Hinweis:

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

Voraussetzungen

Ein Oracle Linux 8- oder höher-System mit der folgenden Konfiguration:

Ü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.

  1. 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>
    
  2. 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.

  1. 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

  1. Hängen Sie die Module helm und oci-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.

  2. Fügen Sie die erforderlichen OCIDs in der Konfigurationsdatei hinzu.

    1. Wechseln Sie vom Terminal zum freien Labor-Desktop.

    2. Öffnen Sie die Detailseite Luna Lab über das Symbol Luna Lab im Desktop der kostenlosen Übung.

    3. Klicken Sie auf die Registerkarte "Oracle Cloud".

      oracle_cloud

    4. Scrollen Sie nach unten, suchen Sie die Compartment-OCID, und kopieren Sie sie.

      comp_ocid_copy

    5. Wechseln Sie zum zuvor geöffneten Terminal.

    6. Öffnen Sie die Konfigurationsdatei in einem Texteditor Ihrer Wahl. Hier verwenden wir vi.

      vi ~/myenvironment.yaml
      
    7. Geben Sie den Einfügemodus vi ein, indem Sie i eingeben.

    8. 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:
      
    9. Wechseln Sie zur Detailseite für Luna Lab, und klicken Sie auf die Registerkarte "Ressourcen".

      Ressourcen

    10. Suchen Sie die Datei vcn_ocid, und kopieren Sie sie.

      vcn_copy

    11. Wechseln Sie zurück zum Terminal.

    12. 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:
      
    13. Kehren Sie zur Detailseite für Luna Lab zurück.

    14. Suchen Sie die Datei vcn_subnet_ocid, und kopieren Sie sie.

      vcn_sub_copy

    15. Wechseln Sie zurück zum Terminal.

    16. 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
      
    17. Speichern und schließen Sie die Datei. Wenn Sie vi verwenden, können Sie dazu ESC, :wq! und ENTER 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.

  3. 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

  1. 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
    
  2. Deployment und Service erstellen.

    kubectl create -f echo-oci-lb.yml
    

Erstellung von Deployment und Service prüfen

  1. Liste der Deployments abrufen.

    kubectl get deployment
    

    Beispielausgabe:

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    echo-deployment   2/2     2            2           15s
    
  2. 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.

  3. 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.

  1. Verwenden Sie JSONPath, um dem LoadBalancer-Listener eine Variable zuzuweisen.

    LB=$(kubectl get svc -o jsonpath="{.status.loadBalancer.ingress[0].ip}" echo-lb-service)
    
  2. Verwenden Sie JSONPath, um dem LoadBalancer-Port eine Variable zuzuweisen.

    LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
    
  3. 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.

    loadbalancer_ip

Test von Luna Desktop

Für die Verwendung dieses spezifischen Tests ist ein Knoten außerhalb des Kubernetes-Clusters erforderlich.

  1. Suchen Sie den Wert EXTERNAL-IP für echo-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
    
  2. Öffnen Sie mit dem Browser auf dem Luna Desktop einen neuen Tab.

  3. Geben Sie den in der Spalte EXTERNAL-IP zurückgegebenen Wert ein, und drücken Sie die Eingabetaste.

    http-Anforderung

    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

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.