Nota:
- Questa esercitazione è disponibile in un ambiente di laboratorio gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del proprio ambiente cloud.
Utilizza MetalLB con Oracle Cloud Native Environment
Introduzione
I load balancer di rete forniscono un metodo per l'esposizione esterna delle applicazioni Kubernetes. Un servizio LoadBalancer Kubernetes viene utilizzato per creare un load balancer di rete che fornisce ed espone un indirizzo IP esterno che può essere usato per connettersi a un'applicazione dall'esterno del cluster.
MetalLB è un load balancer di rete per le applicazioni Kubernetes distribuite in Oracle Cloud Native Environment in esecuzione su host Bare Metal. MetalLB ti consente di utilizzare i servizi LoadBalancer Kubernetes, che tradizionalmente utilizzano un load balancer di rete di provider cloud, in un ambiente Bare Metal.
Obiettivi
Questo documento descrive come impostare e utilizzare il modulo MetalLB per le applicazioni Kubernetes utilizzando MetalLB con Oracle Cloud Native Environment.
Prerequisiti
In questa sezione sono elencati i sistemi host per eseguire i passi di questa esercitazione. Per avere successo è necessario:
-
7 sistemi Oracle Linux da utilizzare come:
- Nodo operatore (ocne-operator)
- 3 nodi del piano di controllo Kubernetes (ocne-control01, ocne-control02, ocne-control03)
- 3 nodi di lavoro Kubernetes (ocne-worker01, ocne-worker02, ocne-worker03)
-
Indirizzo IP virtuale per il nodo del piano di controllo primario. Questo indirizzo IP non deve essere in uso in alcun nodo e viene assegnato in modo dinamico al nodo del piano di controllo assegnato come controller primario dal load balancer.
Dichiarazione di non responsabilità del Supporto Oracle: se si esegue la distribuzione in Oracle Cloud Infrastructure, la tenancy richiede l'abilitazione di una nuova funzione introdotta in OCI: networking Layer 2 per le VLAN all'interno delle reti cloud virtuali (VCN). La funzione di networking OCI di livello 2 non è in genere disponibile, sebbene questa funzione sia abilitata nella tenancy per l'ambiente di laboratorio gratuito.
Se si dispone di un caso d'uso, collaborare con il team tecnico per inserire la tenancy nell'elenco in modo che utilizzi questa funzione. -
Ogni sistema deve avere almeno uno dei seguenti supporti installati:
- Oracle Linux 8 (x86_64) più recente installato ed in esecuzione su Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
L'impostazione preconfigurata su questi sistemi è:
- Un account utente
oracle
con privilegisudo
- SSH senza password tra ogni nodo
- Oracle Cloud Native Environment installato e configurato
- Un account utente
Configura laboratorio
Nota: quando si utilizza l'ambiente di laboratorio gratuito, vedere Oracle Linux Lab Basics per informazioni sulla connessione e altre istruzioni sull'uso.
Questo laboratorio coinvolge più sistemi, ognuno dei quali richiede diverse fasi da eseguire. Si consiglia di iniziare aprendo sette finestre o schede del terminale e collegandosi a ciascun nodo. In questo modo, non dovrai più accedere ed eseguire il logout. I nodi sono:
- ocne-control01
- ocne-control02
- ocne-control03
- operatore OCNE
- ocne-worker01
- ocne-worker02
- ocne-worker03
Importante: l'ambiente di laboratorio gratuito distribuisce un Oracle Cloud Native Environment completamente installato sui nodi forniti. Il completamento di questa distribuzione richiede circa 25-30 minuti dopo l'avvio. Pertanto, potrebbe essere necessario uscire durante l'esecuzione e quindi tornare a completare il laboratorio.
-
Aprire un terminale e connettersi tramite ssh a ogni nodo.
ssh oracle@<ip_address_of_ol_node>
Verificare l'ambiente Kubernetes
-
(Su qualsiasi nodo del piano di controllo) Verificare che funzioni
kubectl
.kubectl get nodes
Output di esempio:
[oracle@ocne-control01 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION ocne-control01 Ready control-plane,master 22m v1.23.7+1.el8 ocne-control02 Ready control-plane,master 21m v1.23.7+1.el8 ocne-control03 Ready control-plane,master 20m v1.23.7+1.el8 ocne-worker01 Ready <none> 20m v1.23.7+1.el8 ocne-worker02 Ready <none> 19m v1.23.7+1.el8 ocne-worker03 Ready <none> 19m v1.23.7+1.el8 [oracle@ocne-control01 ~]$
Configurare i nodi di lavoro
(su tutti il piano di controllo e i nodi di lavoro) Impostare le porte di rete.
sudo firewall-cmd --zone=public --add-port=7946/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/udp --permanent
sudo firewall-cmd --reload
Installazione del modulo MetalLB
Installare e convalidare quindi il modulo MetalLB.
Nel nodo ocne-operator:
-
Creare il file di configurazione MetalLB.
cat << 'EOF' | tee metallb-config.yaml address-pools: - name: default protocol: layer2 addresses: - 10.0.12.240-10.0.12.250 EOF
-
Visualizzare il contenuto del file di configurazione.
cat ~/myenvironment.yaml
-
Aggiungere un modulo Helm e MetalLB al file di configurazione di Oracle Cloud Native Environment.
cat << 'EOF' | tee -a ~/myenvironment.yaml - module: helm name: myhelm args: helm-kubernetes-module: mycluster - module: metallb name: mymetallb args: metallb-helm-module: myhelm helm-kubernetes-module: mycluster metallb-config: /home/oracle/metallb-config.yaml EOF
-
Verificare che i moduli Helm e MetalLB siano stati aggiunti al file myenviroment.yaml.
cat ~/myenvironment.yaml
-
Creare i moduli.
olcnectl module create --config-file myenvironment.yaml
Output di esempio:
[oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml Modules created successfully. Modules created successfully. Modules created successfully. [oracle@ocne-operator ~]$
-
Convalidare i moduli.
olcnectl module validate --config-file myenvironment.yaml
Output di esempio:
[oracle@ocne-operator ~]$ olcnectl module validate --config-file myenvironment.yaml Validation of module mycluster succeeded. Validation of module myhelm succeeded. Validation of module mymetallb succeeded. [oracle@ocne-operator ~]$
-
Installare i moduli.
olcnectl module install --config-file myenvironment.yaml
Nota: il completamento di questa operazione può richiedere alcuni minuti.
Output di esempio:
[oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml Modules installed successfully. Modules installed successfully. Modules installed successfully. [oracle@ocne-operator ~]$
-
Visualizzare i moduli installati.
olcnectl module instances --config-file myenvironment.yaml
Output di esempio:
[oracle@ocne-operator ~]$ olcnectl module instances --config-file myenvironment.yaml INSTANCE MODULE STATE 10.0.12.11:8090 node installed 10.0.12.12:8090 node installed 10.0.12.13:8090 node installed 10.0.12.21:8090 node installed 10.0.12.22:8090 node installed 10.0.12.23:8090 node installed mycluster kubernetes installed myhelm helm installed mymetallb metallb installed [oracle@ocne-operator ~]$
Creare un'applicazione Kubernetes
In questa sezione si crea un'applicazione Kubernetes che utilizza un servizio LoadBalancer.
In qualsiasi nodo del piano di controllo:
-
Crea un'applicazione Kubernetes.
tee echo-oci-lb.yml > /dev/null << 'EOF' --- apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment labels: app: echo1 spec: replicas: 2 selector: matchLabels: app: echo1 template: metadata: labels: app: echo1 spec: containers: - name: echoserver image: k8s.gcr.io/echoserver:1.4 ports: - containerPort: 80 --- kind: Service apiVersion: v1 metadata: name: echo-lb-service spec: selector: app: echo1 type: LoadBalancer ports: - name: http port: 80 targetPort: 8080 EOF
-
Creare il servizio.
kubectl create -f echo-oci-lb.yml
Output di esempio:
[oracle@ocne-control01 ~]$ kubectl create -f echo-oci-lb.yml deployment.apps/echo-deployment created service/echo-lb-service created [oracle@ocne-control01 ~]$
-
Confermare che la distribuzione Kubernetes è in esecuzione.
kubectl get deployments
Output di esempio:
[oracle@ocne-control01 ~]$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE echo-deployment 2/2 2 2 3m15s [oracle@ocne-control01~]$
-
Mostra che il servizio Kubernetes è in esecuzione.
kubectl get svc
Output di esempio:
[oracle@ocne-control01 ~]$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE echo-lb-service LoadBalancer 10.111.72.49 10.0.12.240 80:31727/TCP 4m47s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 58m [oracle@ocne-control01 ~]$
Si noti che
EXTERNAL-IP
perecho-lb-service
LoadBalancer ha un indirizzo IP 10.0.12.240. Questo indirizzo IP viene fornito da MetalLB ed è l'indirizzo IP esterno che è possibile utilizzare per connettersi all'applicazione.
Test della distribuzione
Il passo successivo consiste nel test dell'applicazione appena distribuita. Poiché il provisioning del valore EXTERNAL-IP
viene eseguito in modo dinamico da MetalLB (in questo scenario compreso nell'intervallo 10.0.12.240-10.0.12.250
), i primi due passi memorizzano questo valore dinamico come variabili del sistema operativo.
-
In qualsiasi nodo del piano di controllo, acquisire l'indirizzo
EXTERNAL-IP
assegnato.LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
-
Acquisire il numero di porta assegnato.
LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
-
Confermare che sono memorizzate come variabili di ambiente.
echo $LB echo $LBPORT
Output di esempio:
[oracle@ocne-control01 ~]$ echo $LB 10.0.12.240 [oracle@ocne-control01 ~]$ echo $LBPORT 80 [oracle@ocne-control01 ~]$
-
Utilizzare
curl
per connettersi all'applicazione distribuita.curl -i -w "\n" $LB:$LBPORT
Output di esempio:
[oracle@ocne-control01 ~]$ curl -i -w "\n" $LB:$LBPORT HTTP/1.1 200 OK Server: nginx/1.10.0 Date: Wed, 10 Aug 2022 10:52:10 GMT Content-Type: text/plain Transfer-Encoding: chunked Connection: keep-alive CLIENT VALUES: client_address=10.244.2.0 command=GET real path=/ query=nil request_version=1.1 request_uri=http://10.0.12.240:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=10.0.12.240 user-agent=curl/7.61.1 BODY: -no body in request- [oracle@ocne-control01 ~]$
Test da un host non Kubernetes
-
(Su ocne-operator) Questo ultimo test conferma che MetalLB risponde alle richieste esterne.
curl -v http://10.0.12.240:80
Output di esempio:
[oracle@ocne-operator ~]$ curl -v http://10.0.12.240:80 * Rebuilt URL to: http://10.0.12.240:80/ * Trying 10.0.12.240... * TCP_NODELAY set * Connected to 10.0.12.240 (10.0.12.240) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.12.240 > User-Agent: curl/7.61.1 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.0 < Date: Wed, 10 Aug 2022 11:38:08 GMT < Content-Type: text/plain < Transfer-Encoding: chunked < Connection: keep-alive < CLIENT VALUES: client_address=10.244.0.0 command=GET real path=/ query=nil request_version=1.1 request_uri=http://10.0.12.240:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=10.0.12.240 user-agent=curl/7.61.1 BODY: * Connection #0 to host 10.0.12.240 left intact [oracle@ocne-operator ~]$
Ciò conferma che MetalLB è stato configurato correttamente, che un'applicazione è stata distribuita e sta accettando le richieste.
Per ulteriori informazioni
- Documentazione di Oracle Cloud Native Environment
- Formazione su Oracle Cloud Native Environment
- Sottoscrizione al corso di formazione su Oracle Linux
- Curriculum Oracle Linux
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o visita altri contenuti di formazione gratuiti sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione sul prodotto, visitare Oracle Help Center.
Use MetalLB with Oracle Cloud Native Environment
F61364-03
September 2022
Copyright © 2022, Oracle and/or its affiliates.