Hinweis:

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:

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

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.

  1. Öffnen Sie ein Terminal, und stellen Sie eine SSH-Verbindung zu jedem Knoten her.

    ssh oracle@<ip_address_of_ol_node>
    

Kubernetes-Umgebung validieren

  1. (Prüfen Sie auf jedem Control-Plane-Knoten, ob kubectl funktioniert.

    kubectl get nodes
    

    Beispielausgabe:

    [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:

  1. 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
    
  2. Zeigen Sie den Inhalt der Konfigurationsdatei an.

    cat ~/myenvironment.yaml
    
  3. 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
    
  4. Vergewissern Sie sich, dass die Module Helm und MetalLB der Datei myenviroment.yaml hinzugefügt wurden.

    cat ~/myenvironment.yaml
    
  5. Erstellen Sie die Module.

    olcnectl module create --config-file myenvironment.yaml
    

    Beispielausgabe:

    [oracle@ocne-operator ~]$ olcnectl module create --config-file myenvironment.yaml
    Modules created successfully.
    Modules created successfully.
    Modules created successfully.
    [oracle@ocne-operator ~]$
    
  6. Validieren Sie die Module.

    olcnectl module validate --config-file myenvironment.yaml
    

    Beispielausgabe:

    [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 ~]$
    
  7. Installieren Sie die Module.

    olcnectl module install --config-file myenvironment.yaml
    

    Hinweis: 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 ~]$
    
  8. Zeigen Sie die installierten Module an.

    olcnectl module instances --config-file myenvironment.yaml
    

    Beispielausgabe:

    [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:

  1. 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
    
  2. Erstellen Sie den Service.

    kubectl create -f echo-oci-lb.yml
    

    Beispielausgabe:

    [oracle@ocne-control01 ~]$ kubectl create -f echo-oci-lb.yml
    deployment.apps/echo-deployment created
    service/echo-lb-service created
    [oracle@ocne-control01 ~]$ 
    
  3. Bestätigen Sie, dass das Kubernetes-Deployment ausgeführt wird.

    kubectl get deployments
    

    Beispielausgabe:

    [oracle@ocne-control01 ~]$ kubectl get deployment      
    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    echo-deployment   2/2     2            2           3m15s
    [oracle@ocne-control01~]$
    
  4. Zeigen Sie an, dass der Kubernetes-Service ausgeführt wird.

    kubectl get svc
    

    Beispielausgabe:

    [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-IP für die echo-lb-service LoadBalancer 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.

  1. (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)
    
  2. Erfassen Sie die zugewiesene Portnummer.

    LBPORT=$(kubectl get svc -o jsonpath="{.spec.ports[0].port}" echo-lb-service)
    
  3. Vergewissern Sie sich, dass diese als Umgebungsvariablen gespeichert sind.

    echo $LB
    echo $LBPORT
    

    Beispielausgabe:

    [oracle@ocne-control01 ~]$ echo $LB
    10.0.12.240
    [oracle@ocne-control01 ~]$ echo $LBPORT
    80
    [oracle@ocne-control01 ~]$
    
  4. Verwenden Sie curl, um eine Verbindung zur bereitgestellten Anwendung herzustellen.

    curl -i -w "\n" $LB:$LBPORT
    

    Beispielausgabe:

    [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

  1. (Auf ocne-operator) Dieser letzte Test bestätigt, dass MetalLB auf externe Anforderungen antwortet.

    curl -v http://10.0.12.240:80
    

    Beispielausgabe:

    [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

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.