Hinweis:
- Dieses Tutorial ist in einer von Oracle bereitgestellten kostenlosen Übungsumgebung verfügbar.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte durch die für Ihre Cloud-Umgebung spezifischen Werte.
LoadBalancer-Servicetyp in Oracle Cloud Native Environment verwenden
Einführung
Der Kubernetes-Service LoadBalancer stellt das Deployment extern mit dem Load Balancer eines Cloud-Providers bereit. Die abhängigen NodePort- und ClusterIP-Services, an die der externe Load Balancer weiterleitet, werden automatisch erstellt.
In diesem Tutorial wird gezeigt, wie Sie das Oracle Cloud Infrastructure Cloud Controller Manager-Modul (Modul oci-ccm
) in Oracle Cloud Native Environment bereitstellen, um Anforderungen für einen LoadBalancer-Servicetyp zu verarbeiten. Das Oracle Cloud Infrastructure Cloud Controller Manager-Modul verwendet das Open-Source-Projekt oci-cloud-controller-manager, das eine Kubernetes Cloud Controller Manager-Implementierung (oder ein Out-of-Tree-Cloud-Provider) für Oracle Cloud Infrastructure (OCI) ist.
Ziele
- Oracle Cloud Infrastructure Cloud Controller Manager-Modul bereitstellen
- Deployment und LoadBalancer-Service erstellen
- Zugriff über den LoadBalancer-Service prüfen
Voraussetzungen
Ein Oracle Linux 8- oder höher-System mit der folgenden Konfiguration:
- ein Nicht-Root-Benutzer mit
sudo
-Berechtigungen - Oracle Cloud Native Environment installiert und konfiguriert
Laborumgebung einrichten
Hinweis: Wenn Sie die kostenlose Übungsumgebung verwenden, finden Sie unter Oracle Linux Lab - Grundlagen Informationen zu Verbindungen und anderen Nutzungsanweisungen.
Informationen: Die kostenlose Übungsumgebung stellt Oracle Cloud Native Environment auf dem angegebenen Knoten bereit, der für das Erstellen von Umgebungen bereit ist. Dieses Deployment dauert nach dem Start etwa 8-10 Minuten. Aus diesem Grund sollten Sie die Übung schrittweise beenden und dann wieder abschließen.
-
Wenn noch nicht geschehen, öffnen Sie ein Terminal und verbinden Sie sich über SSH mit dem System ocne-node01.
ssh oracle@<ip_address_of_ol_node>
-
Prüfen Sie, ob die Umgebung bereit ist.
kubectl get pods -A
Beispielausgabe:
[oracle@ocne-node01 ~]$ kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE externalip-validation-system externalip-validation-webhook-7988bff847-8ws2v 1/1 Running 0 3m18s kube-system coredns-7cbc77dbc7-qxqth 1/1 Running 0 3m18s kube-system coredns-7cbc77dbc7-r9bgj 1/1 Running 0 3m18s kube-system etcd-ocne-node01 1/1 Running 0 3m37s kube-system kube-apiserver-ocne-node01 1/1 Running 0 3m37s kube-system kube-controller-manager-ocne-node01 1/1 Running 0 3m37s kube-system kube-flannel-ds-vcwzn 1/1 Running 0 3m18s kube-system kube-proxy-7lx59 1/1 Running 0 3m18s kube-system kube-scheduler-ocne-node01 1/1 Running 0 3m37s kubernetes-dashboard kubernetes-dashboard-5d5d4947b5-7pffh 1/1 Running 0 3m18s
Oracle Cloud Infrastructure Cloud Controller Manager-Modul bereitstellen
-
Hängen Sie die Module
helm
undoci-ccm
an die vorhandene Konfigurationsdatei an.tee -a ~/myenvironment.yaml > /dev/null << 'EOF' - module: helm name: myhelm args: helm-kubernetes-module: mycluster - module: oci-ccm name: myoci oci-ccm-helm-module: myhelm oci-use-instance-principals: true oci-compartment: oci-vcn: oci-lb-subnet1: EOF
In der kostenlosen Übungsumgebung werden Policys verwendet, um die Verwendung von Instanz-Principals zuzulassen. Dadurch können Instanzen autorisierte Akteure (oder Principals) sein, um Aktionen für Serviceressourcen auszuführen.
Das Oracle Cloud Infrastructure Cloud Controller Manager-Modul verwendet die Option
oci-use-instance-principals: false
zur Authentifizierung als Standardeinstellung.Weitere Einzelheiten finden Sie in der Dokumentation zum Oracle Cloud Infrastructure-Load Balancer verwenden, wie Zugangsdateninformationen zu Ihrem Oracle Cloud Infrastructure-Mandanten übergeben werden, anstatt Instanz-Principals zu verwenden.
-
Fügen Sie die erforderlichen OCIDs in der Konfigurationsdatei hinzu.
-
Wechseln Sie vom Terminal zum kostenlosen Labordesktop.
-
Öffnen Sie die Detailseite für Luna Lab mit dem Symbol Luna Lab im kostenlosen Lab-Desktop.
-
Klicken Sie auf die Registerkarte "Oracle Cloud".
-
Scrollen Sie nach unten, suchen Sie die Compartment-OCID, und kopieren Sie sie.
-
Wechseln Sie zum vorherigen geöffneten Terminal.
-
Öffnen Sie die Konfigurationsdatei mit dem gewünschten Texteditor. Hier verwenden wir
vi
.vi ~/myenvironment.yaml
-
Geben Sie den Einfügemodus
vi
ein, indem Siei
eingeben. -
Fügen Sie die Compartment-OCID am Ende der Zeile oci-compartment: hinzu.
Hinweis: Da dies YAML ist, müssen Sie ein Leerzeichen hinzufügen, bevor Sie den Wert einfügen.
Beispiel:
- module: oci-ccm name: myoci oci-ccm-helm-module: myhelm oci-use-instance-principals: true oci-compartment: ocid1.compartment.oc1..aaaaaaaamqicnhi7e6dj7fwtbiibfxxlzjpd3uf33f7a33gftzgpchrnuzna oci-vcn: oci-lb-subnet1:
-
Wechseln Sie zur Detailseite Luna Lab, und klicken Sie auf die Registerkarte "Ressourcen".
-
Suchen Sie die vcn_ocid, und kopieren Sie sie.
-
Wechseln Sie zurück zum Terminal.
-
Fügen Sie die vcn_ocid am Ende der Zeile oci-vcn: hinzu.
Hinweis: Da dies YAML ist, müssen Sie ein Leerzeichen hinzufügen, bevor Sie den Wert einfügen.
Beispiel:
- module: oci-ccm name: myoci oci-ccm-helm-module: myhelm oci-use-instance-principals: true oci-compartment: ocid1.compartment.oc1..aaaaaaaamqicnhi7e6dj7fwtbiibfxxlzjpd3uf33f7a33gftzgpchrnuzna oci-vcn: ocid1.vcn.oc1.eu-frankfurt-1.amaaaaaar5cqh7qam56nztotyx4xzhovuo7stl5dddlmdmubdcdam64sadka oci-lb-subnet1:
-
Kehren Sie zur Detailseite des Luna Lab zurück.
-
Suchen Sie die vcn_subnet_ocid, und kopieren Sie sie.
-
Wechseln Sie zurück zum Terminal.
-
Fügen Sie die vcn_subnet_ocid am Ende der Zeile oci-lb-subnet1: hinzu.
Hinweis: Da dies YAML ist, müssen Sie ein Leerzeichen hinzufügen, bevor Sie den Wert einfügen.
Beispiel:
- module: oci-ccm name: myoci oci-ccm-helm-module: myhelm oci-use-instance-principals: true oci-compartment: ocid1.compartment.oc1..aaaaaaaamqicnhi7e6dj7fwtbiibfxxlzjpd3uf33f7a33gftzgpchrnuzna oci-vcn: ocid1.vcn.oc1.eu-frankfurt-1.amaaaaaar5cqh7qam56nztotyx4xzhovuo7stl5dddlmdmubdcdam64sadka oci-lb-subnet1: ocid1.subnet.oc1.eu-frankfurt-1.aaaaaaaazq3yaeofyv3azmnzm2cxrilnfhpmvhark7xw5u6eo3574mtbzswa
-
Speichern und schließen Sie die Datei. Wenn Sie
vi
verwenden, können Sie dies tun, indem SieESC
,:wq!
undENTER
eingeben.
WICHTIG: Stellen Sie sicher, dass die OCIDs in Ihrer Umgebung korrekt sind. Wenn die Werte falsch sind, werden die Module
oci-ccm
installiert, es kann jedoch keine LoadBalancer erstellt werden, wenn dies vom Service angefordert wird. -
-
Module erstellen und installieren
olcnectl module create --config-file myenvironment.yaml olcnectl module validate --config-file myenvironment.yaml olcnectl module install --config-file myenvironment.yaml
Deployment und Service erstellen
-
Generieren Sie die Konfigurationsdatei für das Deployment und den Service.
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 annotations: service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None" service.beta.kubernetes.io/oci-load-balancer-internal: "true" service.beta.kubernetes.io/oci-load-balancer-shape: "10Mbps" spec: selector: app: echo1 type: LoadBalancer ports: - name: http port: 80 targetPort: 8080 EOF
-
Deployment und Service erstellen
kubectl create -f echo-oci-lb.yml
Erstellung von Deployment und Service prüfen
-
Deployment abrufen
kubectl get deployment
Beispielausgabe:
NAME READY UP-TO-DATE AVAILABLE AGE echo-deployment 2/2 2 2 15s
-
Service abrufen
kubectl get service
Beispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE echo-lb-service LoadBalancer 10.108.35.18 <pending> 80:32162/TCP 23s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m
Die Option "Ausstehend" unter "EXTERNAL-IP" für den echo-lb-service ist vorhanden, bis das Oracle Cloud Infrastructure Cloud Controller Manager-Modul die OCI LoadBalancer erstellt und startet.
Wiederholen Sie die Ausführung des Befehls
kubectl get service
, bis die Ausgabe die EXTERNAL-IP-Adresse anzeigt. Sie sollte innerhalb von maximal 1-2 Minuten angezeigt werden.Die PORTS geben den OCI-Listening-Port LoadBalancer (80) und den automatisch generierten sekundären Kubernetes-Serviceport NodePort an.
-
Endpunkte abrufen
kubectl get endpoints
Beispielausgabe:
NAME ENDPOINTS AGE echo-lb-service 10.244.0.7:8080,10.244.0.8:8080 5m37s kubernetes 10.0.0.140:6443 18m
Ein Endpunkt ist eine Ressource, die von einem Kubernetes-Service referenziert wird. Die Ressource verfolgt die IP-Adressen und Ports von einem oder mehreren Pods, die beim Erstellen des Service dynamisch zugewiesen werden.
Anwendung überprüfen
Bei einem LoadBalancer-Servicetyp sind die zu testende IP-Adresse und der zu testende Port die EXTERNAL-IP-Adresse und der Port des Service, der OCI-LoadBalancer-Listener. Die Anforderung wird dann an das OCI-LoadBalancer-Backend gesendet. Das OCI-LoadBalancer-Backend leitet dann den Traffic an den sekundären NodePort-Service weiter, der auf dem spezifischen Knoten und dann an den Pod ausgeführt wird.
-
Verwenden Sie JSONPath, um dem LoadBalancer-Listener eine Variable zuzuweisen
LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
-
Verwenden Sie JSONPath, um dem Port LoadBalancer eine Variable zuzuweisen
LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
-
Testen Sie die Anwendung.
curl -i -w "\n" $LB:$LBPORT
Beispielausgabe:
[oracle@ocne-node01 ~]$ curl -i -w "\n" $LB:$LBPORT HTTP/1.1 200 OK Server: nginx/1.10.0 Date: Wed, 06 Jul 2022 16:41:23 GMT Content-Type: text/plain Transfer-Encoding: chunked Connection: keep-alive CLIENT VALUES: client_address=10.244.0.1 command=GET real path=/ query=nil request_version=1.1 request_uri=http://10.0.0.138:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=*/* host=10.0.0.138 user-agent=curl/7.61.1 BODY: -no body in request-
Die in der Ausgabe gezeigte client_address-Datei ist die Gateway-IP-Adresse, die mit der cni0-Schnittstelle verknüpft ist. Die Schnittstelle cni0 verwaltet das Kubernetes-Clusternetzwerk wie in der Upstreamdokumentation für Netzwerk-Plug-ins beschrieben.
Übersicht
Wir verstehen jetzt, wie Sie einen LoadBalancer-Service in Kubernetes erstellen. Sehen Sie sich weitere Features von Oracle Cloud Native Environment mit dem Oracle Cloud Infrastructure Cloud Controller Manager-Modul und den verfügbaren Load-Balancer-Annotationen an, und entdecken Sie diese selbst.
Weitere Informationen
Weitere Lernressourcen
Sehen Sie sich andere Übungen auf der Website docs.oracle.com/learn an, oder greifen Sie auf Inhalte zu, die Sie über den Oracle Learning-Kanal YouTube benötigen. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie unter Oracle Help Center.
Use LoadBalancer Service Type on Oracle Cloud Native Environment
F60136-01
July 2022
Copyright © 2022, Oracle and/or its affiliates.