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.
OCI Cloud Controller Manager in Oracle Cloud Native Environment verwenden
Einführung
Der Kubernetes-Service LoadBalancer stellt das Deployment extern über den Load Balancer eines Cloudproviders bereit. Die abhängigen NodePort- und ClusterIP-Services, an die der externe Load Balancer weitergeleitet wird, werden automatisch erstellt.
In diesem Tutorial wird gezeigt, wie Sie das Oracle Cloud Infrastructure Cloud Controller Manager-Modul (OCI-CCM-Modul) in Oracle Cloud Native Environment bereitstellen, um Anforderungen für einen externen LoadBalancer-Servicetyp zu verarbeiten. Das Oracle Cloud Infrastructure Cloud Controller Manager-Modul verwendet das Open-Source-Projekt oci-cloud-controller-manager, bei dem es sich um eine Kubernetes Cloud Controller Manager-Implementierung (oder einen Out-of-Tree-Cloud-Provider) für Oracle Cloud Infrastructure (OCI) handelt.
Ziele
- Bereitstellen des Oracle Cloud Infrastructure Cloud Controller Manager-Moduls
- 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
Übungsumgebung einrichten
Hinweis: Bei Verwendung der kostenlosen Übungsumgebung finden Sie unter Oracle Linux Lab - Grundlagen weitere Anweisungen zur Verbindung und Verwendung.
Informationen: Die kostenlose Laborumgebung stellt eine kompakte Oracle Cloud Native Environment auf dem bereitgestellten Knoten bereit, die zum Erstellen von Umgebungen bereit ist. Das Deployment dauert nach dem Start etwa 8 bis 10 Minuten. Aus diesem Grund können Sie die Ausführung schrittweise beenden und dann zum Abschluss der Übung zurückkehren.
-
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>
-
Bestätigen Sie, dass 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
Port HealthCheck in Oracle Linux-Firewall öffnen
Wenn Sie einen mit OCI-CCM verknüpften LoadBalancer-Service verwenden, erwartet Kubernetes einen Health-Check-Endpunkt, der auf Port 10256 verfügbar ist. Daher erstellt kube-proxy
einen Listener auf diesem Port, damit der Cloudprovider-Load Balancer prüfen kann, ob kube-proxy
fehlerfrei ist. Mit diesem Health Check bestimmt der Load Balancer, welche Knoten Traffic an sie weiterleiten können.
-
Legen Sie die Firewallregeln für den Knoten fest.
sudo firewall-cmd --add-port=10256/tcp --permanent sudo firewall-cmd --reload
Wenn Sie in einer geclusterten Umgebung arbeiten, öffnen Sie diesen Firewallport auf allen Control-Plane- und Worker-Knoten.
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
Die kostenlose Übungsumgebung verwendet Policys, um die Verwendung von Instanz-Principals zu ermöglichen, mit denen Instanzen autorisierte Akteure (oder Principals) Aktionen für Serviceressourcen ausführen können.
Das Oracle Cloud Infrastructure Cloud Controller Manager-Modul verwendet die Option
oci-use-instance-principals: true
zur Authentifizierung als Standardeinstellung.Weitere Informationen zum Übergeben von Zugangsdateninformationen in Bezug auf Ihren Oracle Cloud Infrastructure-Mandanten anstelle von Instanz-Principals finden Sie in der Dokumentation unter Oracle Cloud Infrastructure Load Balancer verwenden.
-
Fügen Sie die erforderlichen OCIDs in der Konfigurationsdatei hinzu.
-
Wechseln Sie vom Terminal zum freien Labor-Desktop.
-
Öffnen Sie die Detailseite Luna Lab über das Symbol Luna Lab im Desktop der kostenlosen Übung.
-
Klicken Sie auf die Registerkarte "Oracle Cloud".
-
Scrollen Sie nach unten, suchen Sie die Compartment-OCID, und kopieren Sie sie.
-
Wechseln Sie zum zuvor geöffneten Terminal.
-
Öffnen Sie die Konfigurationsdatei in einem Texteditor Ihrer Wahl. 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 für Luna Lab, und klicken Sie auf die Registerkarte "Ressourcen".
-
Suchen Sie die Datei 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 für Luna Lab zurück.
-
Suchen Sie die Datei 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 dazuESC
,:wq!
undENTER
eingeben.
WICHTIG: Stellen Sie sicher, dass die OCIDs in Ihrer Umgebung korrekt sind. Wenn die Werte falsch sind, wird das
oci-ccm
-Modul 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: "false" 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
-
Liste der Deployments abrufen.
kubectl get deployment
Beispielausgabe:
NAME READY UP-TO-DATE AVAILABLE AGE echo-deployment 2/2 2 2 15s
-
Rufen Sie eine Liste der Services ab.
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
Das "Ausstehend" unter EXTERNAL-IP für den echo-lb-service ist so lange 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. Es sollte maximal innerhalb von 1-2 Minuten angezeigt werden.Die PORTS geben den Listening-Port (80) von OCI LoadBalancer und den automatisch generierten sekundären Kubernetes-Serviceport NodePort an.
-
Liste der Endpunkt 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 während der Serviceerstellung dynamisch zugewiesen werden.
Anwendung überprüfen
Auf Control-Plane-Knoten testen
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-Backend LoadBalancer gesendet. Das OCI-Backend LoadBalancer leitet dann Traffic an den sekundären NodePort-Service weiter, der auf dem bestimmten Knoten ausgeführt wird, und dann an den Pod.
Für die Verwendung dieses spezifischen Tests ist ein Knoten erforderlich, in dem kubectl
vorhanden ist.
-
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 LoadBalancer-Port 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://130.162.210.115: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 IP-Adresse von
130.162.210.115
in der obigen Ausgabe ist die EXTERNAL-IP-Adresse für die OCI LoadBalancer. Diese Adresse ist bei jedem Deployment der Übung unterschiedlich. Prüfen Sie die Load Balancer-Adresse, indem Sie sich optional bei der Cloud-Konsole anmelden und zu "Networking > Load Balancer" navigieren.
Test von Luna Desktop
Für die Verwendung dieses spezifischen Tests ist ein Knoten außerhalb des Kubernetes-Clusters erforderlich.
-
Suchen Sie den Wert
EXTERNAL-IP
fürecho-lb-service
.kubectl get service
Beispielausgabe
[oracle@ocne-node01 ~]$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE echo-lb-service LoadBalancer 10.102.1.165 130.162.210.115 80:31468/TCP 32s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11m
-
Öffnen Sie mit dem Browser auf dem Luna Desktop einen neuen Tab.
-
Geben Sie den in der Spalte
EXTERNAL-IP
zurückgegebenen Wert ein, und drücken Sie die Eingabetaste.HINWEIS: Die in der Ausgabe angezeigte client_address ist die Gateway-IP-Adresse, die der Schnittstelle cni0 zugeordnet ist. Die cni0-Schnittstelle verwaltet das Kubernetes-Clusternetzwerk, wie in der Upstreamdokumentation zu Netzwerk-Plug-ins beschrieben.
Übersicht
Wir verstehen jetzt, wie Sie einen LoadBalancer-Service in Kubernetes erstellen. Prüfen und explorieren Sie zusätzliche Features von Oracle Cloud Native Environment mit dem Oracle Cloud Infrastructure Cloud Controller Manager-Modul und den verfügbaren Load-Balancer-Annotationen.
Weitere Informationen
- Oracle Linux-Schulungsstation
- Oracle Linux-Dokumentation
- Oracle Cloud Native Environment-Dokumentation
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 OCI Cloud Controller Manager on Oracle Cloud Native Environment
F60051-02
August 2022
Copyright © 2022, Oracle and/or its affiliates.