Hinweis:
- Dieses Tutorial ist in einer von Oracle bereitgestellten freien Laborumgebung verfügbar.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch Werte, die speziell für Ihre Cloud-Umgebung gelten.
Verwenden Sie MetalLB mit Oracle Cloud Native Environment
Einführung
Network Load Balancer stellen eine Methode bereit, mit der Kubernetes-Anwendungen extern verfügbar gemacht werden können. Ein Kubernetes-Service LoadBalancer wird verwendet, um einen Network Load Balancer zu erstellen, der eine externe IP-Adresse bereitstellt und bereitstellt, mit der eine Verbindung zu einer Anwendung von außerhalb des Clusters hergestellt werden kann.
MetalLB ist ein Network Load Balancer für Kubernetes-Anwendungen, die auf Oracle Cloud Native Environment bereitgestellt werden und auf Bare-Metal-Hosts ausgeführt werden. Mit MetalLB können Sie Kubernetes-LoadBalancer-Services verwenden, die normalerweise einen Network Load Balancer eines Cloud-Providers in einer Bare-Metal-Umgebung nutzen.
Ziele
In diesem Dokument wird beschrieben, wie Sie das Modul MetalLB für Kubernetes-Anwendungen mit MetalLB mit Oracle Cloud Native Environment einrichten und verwenden.
Voraussetzungen
In diesem Abschnitt werden die Hostsysteme aufgeführt, auf denen die Schritte in diesem Tutorial ausgeführt werden. Um erfolgreich zu sein, ist Folgendes erforderlich:
-
7 Oracle Linux-Systeme als:
- Operatorknoten (ocne-operator)
- 3 Kubernetes-Control-Plane-Knoten (ocne-control01, ocne-control02, ocne-control03)
- 3 Kubernetes-Worker-Knoten (ocne-worker01, ocne-worker02, ocne-worker03)
-
Eine virtuelle IP-Adresse für den primären Control-Plane-Knoten. Diese IP-Adresse darf auf keinem Knoten verwendet werden und wird dynamisch dem Control-Plane-Knoten zugewiesen, der vom Load Balancer als primärer Controller zugewiesen wird.
Oracle Support-Ausschlussklausel: Wenn Sie Oracle Cloud Infrastructure bereitstellen, muss Ihr Mandant ein neues Feature aktivieren, das in OCI: Layer 2 Networking for VLANs innerhalb Ihrer virtuellen Cloud-Netzwerke (VCNs) eingeführt wurde. Das OCI Layer 2 Networking-Feature ist im Allgemeinen nicht verfügbar, obwohl dieses Feature für den Mandanten für die kostenlose Übungsumgebung aktiviert ist.
Wenn Sie einen Anwendungsfall haben, wenden Sie sich an Ihr technisches Team, um Ihren Mandanten zur Verwendung dieses Features aufzulisten. -
Auf jedem System muss mindestens Folgendes installiert sein:
- Neueste Installation von Oracle Linux 8 (x86_64) und Ausführung von Unbreakable Enterprise Kernel Release 6 (UEK R6)
-
Das vorkonfigurierte Setup auf diesen Systemen ist:
- Ein
oracle-Benutzeraccount mitsudo-Berechtigungen - Kennwortlose SSH zwischen den einzelnen Knoten
- Oracle Cloud Native Environment installiert und konfiguriert
- Ein
Übungsumgebung einrichten
Hinweis: Bei Verwendung der kostenlosen Übungsumgebung finden Sie unter Oracle Linux Lab - Grundlagen weitere Anweisungen zur Verbindung und Verwendung.
Diese Übung umfasst mehrere Systeme, die jeweils unterschiedliche Schritte erfordern. Es wird empfohlen, zunächst sieben Terminalfenster oder Registerkarten zu öffnen und eine Verbindung zu jedem Knoten herzustellen. Dadurch müssen Sie sich nicht wiederholt anmelden und abmelden. Die Knoten sind:
- ocne-control01
- ocne-control02
- ocne-control03
- Netzbetreiber
- ocne-worker01
- ocne-worker02
- ocne-worker03
Wichtig: Die kostenlose Laborumgebung stellt eine vollständig installierte Oracle Cloud Native Environment auf den bereitgestellten Knoten bereit. Das Deployment dauert nach dem Start etwa 25 bis 30 Minuten. Aus diesem Grund können Sie die Ausführung schrittweise beenden und dann zum Abschluss der Übung zurückkehren.
-
Öffnen Sie ein Terminal, und stellen Sie eine SSH-Verbindung zu jedem Knoten her.
ssh oracle@<ip_address_of_ol_node>
Kubernetes-Umgebung validieren
-
(Prüfen Sie auf jedem Control-Plane-Knoten, ob
kubectlfunktioniert.kubectl get nodesBeispielausgabe:
[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 ~]$
Worker-Knoten konfigurieren
(Auf allen Control-Plane- und Worker-Knoten) Richten Sie die Netzwerkports ein.
sudo firewall-cmd --zone=public --add-port=7946/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7946/udp --permanent
sudo firewall-cmd --reload
Installieren des MetalLB-Moduls
Installieren und validieren Sie anschließend das Modul MetalLB.
Auf dem Knoten ocne-operator:
-
Erstellen Sie die KonfigurationsdateiMetalLB.
cat << 'EOF' | tee metallb-config.yaml address-pools: - name: default protocol: layer2 addresses: - 10.0.12.240-10.0.12.250 EOF -
Zeigen Sie den Inhalt der Konfigurationsdatei an.
cat ~/myenvironment.yaml -
Fügen Sie der Oracle Cloud Native Environment-Konfigurationsdatei ein Helm- und ein MetalLB-Modul hinzu.
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 -
Vergewissern Sie sich, dass die Module Helm und MetalLB der Datei myenviroment.yaml hinzugefügt wurden.
cat ~/myenvironment.yaml -
Erstellen Sie die Module.
olcnectl module create --config-file myenvironment.yamlBeispielausgabe:
[oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml Modules created successfully. Modules created successfully. Modules created successfully. [oracle@ocne-operator ~]$ -
Validieren Sie die Module.
olcnectl module validate --config-file myenvironment.yamlBeispielausgabe:
[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 ~]$ -
Installieren Sie die Module.
olcnectl module install --config-file myenvironment.yamlHinweis: Dieser Vorgang kann einige Minuten dauern.
Beispielausgabe:
[oracle@ocne-operator ~]$ olcnectl module install --config-file myenvironment.yaml Modules installed successfully. Modules installed successfully. Modules installed successfully. [oracle@ocne-operator ~]$ -
Zeigen Sie die installierten Module an.
olcnectl module instances --config-file myenvironment.yamlBeispielausgabe:
[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 ~]$
Kubernetes-Anwendung erstellen
In diesem Abschnitt erstellen Sie eine Kubernetes-Anwendung, die einen LoadBalancer-Service verwendet.
Auf beliebigem Control-Plane-Knoten:
-
Erstellen Sie eine Kubernetes-Anwendung.
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 -
Erstellen Sie den Service.
kubectl create -f echo-oci-lb.ymlBeispielausgabe:
[oracle@ocne-control01 ~]$ kubectl create -f echo-oci-lb.yml deployment.apps/echo-deployment created service/echo-lb-service created [oracle@ocne-control01 ~]$ -
Bestätigen Sie, dass das Kubernetes-Deployment ausgeführt wird.
kubectl get deploymentsBeispielausgabe:
[oracle@ocne-control01 ~]$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE echo-deployment 2/2 2 2 3m15s [oracle@ocne-control01~]$ -
Zeigen Sie an, dass der Kubernetes-Service ausgeführt wird.
kubectl get svcBeispielausgabe:
[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 ~]$Beachten Sie, dass die
EXTERNAL-IPfür dieecho-lb-serviceLoadBalancer eine IP-Adresse von 10.0.12.240 hat. Diese IP-Adresse wird von MetalLB bereitgestellt und ist die externe IP-Adresse, mit der Sie eine Verbindung zur Anwendung herstellen können.
Deployments testen
Im nächsten Schritt testen Sie die neu bereitgestellte Anwendung. Da der Wert EXTERNAL-IP dynamisch von MetalLB bereitgestellt wird (in diesem Szenario zwischen dem Bereich 10.0.12.240-10.0.12.250), speichern die ersten beiden Schritte diesen dynamischen Wert als Betriebssystemvariablen.
-
(Auf beliebigem Control-Plane-Knoten) Erfassen Sie die zugewiesene
EXTERNAL-IP-Adresse.LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service) -
Erfassen Sie die zugewiesene Portnummer.
LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service) -
Vergewissern Sie sich, dass diese als Umgebungsvariablen gespeichert sind.
echo $LB echo $LBPORTBeispielausgabe:
[oracle@ocne-control01 ~]$ echo $LB 10.0.12.240 [oracle@ocne-control01 ~]$ echo $LBPORT 80 [oracle@ocne-control01 ~]$ -
Verwenden Sie
curl, um eine Verbindung zur bereitgestellten Anwendung herzustellen.curl -i -w "\n" $LB:$LBPORTBeispielausgabe:
[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 von einem Nicht-Kubernetes-Host
-
(Auf ocne-operator) Dieser letzte Test bestätigt, dass MetalLB auf externe Anforderungen antwortet.
curl -v http://10.0.12.240:80Beispielausgabe:
[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 ~]$
Dadurch wird bestätigt, dass MetalLB korrekt konfiguriert wurde, eine Anwendung bereitgestellt wurde und Anforderungen erfolgreich akzeptiert.
Weitere Informationen
- Oracle Cloud Native Environment-Dokumentation
- Oracle Cloud Native Environment-Schulung
- Oracle Linux-Lernabonnement
- Oracle Linux-Curriculum
Weitere Lernressourcen
Sehen Sie sich weitere Übungen unter docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning-Kanal YouTube zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Use MetalLB with Oracle Cloud Native Environment
F61364-03
September 2022
Copyright © 2022, Oracle and/or its affiliates.