Hinweis:

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

Voraussetzungen

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

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.

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

  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
    

    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.

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

    1. Wechseln Sie vom Terminal zum kostenlosen Labordesktop.

    2. Öffnen Sie die Detailseite für Luna Lab mit dem Symbol Luna Lab im kostenlosen Lab-Desktop.

    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 vorherigen geöffneten Terminal.

    6. Öffnen Sie die Konfigurationsdatei mit dem gewünschten Texteditor. 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 Luna Lab, und klicken Sie auf die Registerkarte "Ressourcen".

      Ressourcen

    10. Suchen Sie die 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 des Luna Lab zurück.

    14. Suchen Sie die 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 dies tun, indem Sie ESC, :wq! und ENTER 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.

  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: "true"
        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. Deployment abrufen

    kubectl get deployment
    

    Beispielausgabe:

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

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

  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 Port LoadBalancer 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://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.