Mit Istio als Cluster-Add-on zur Implementierung der Kubernetes-Gateway-API arbeiten

Erfahren Sie, wie Sie das Istio-Cluster-Add-on installieren, konfigurieren und verwenden, um die Kubernetes-Gateway-API in Clustern zu implementieren, die Sie mit Kubernetes Engine (OKE) erstellt haben.

Die Kubernetes-Gateway-API (Gateway-API) ist der Standard der nächsten Generation für die Verwaltung von Ingress- und Netzwerktraffic in Kubernetes-Clustern nach der Ingress-API. Weitere Informationen zur Gateway-API finden Sie unter Gateway-API in der Kubernetes-Dokumentation und in der Dokumentation zur Gateway-API.

Das Istio-Cluster-Add-on ist eine von Oracle verwaltete Erweiterung für Kubernetes Engine, mit der die Istio-Control Plane in einem Cluster bereitgestellt und verwaltet wird. Es ermöglicht erweiterte Service-Mesh- und Gateway-API-Unterstützung für Ingress- und Trafficmanagement.

Durch Aktivieren des Istio-Cluster-Add-ons können Sie Istio als zugrunde liegenden Controller verwenden, um Gateway-, HTTPRoute- und andere Gateway-API-Ressourcen zu verwalten.

Die Verwendung von Istio als Cluster-Add-on (das Istio-Cluster-Add-on) vereinfacht das Lebenszyklusmanagement der Control Plane (istiod). Sie können mehr einfach:

  • Istio-Steuerebene aktivieren oder deaktivieren
  • Automatische Versionsupdates von Oracle aktivieren und deaktivieren
  • Verwalten Sie add-on-spezifische Anpassungen mit genehmigten Konfigurationsargumenten für Schlüssel/Wert-Paare.

In den folgenden Abschnitten wird beschrieben, wie Sie mit dem Istio-Cluster-Add-on zur Konfiguration des Gateway-API-Netzwerks arbeiten:

Voraussetzungen

Bevor Sie das Istio-Cluster-Add-on zur Unterstützung der Kubernetes-Gateway-API einrichten:

  • Sie benötigen kubectl-Zugriff auf das von Kubernetes Engine erstellte Cluster.
  • Sie benötigen cluster-admin-Berechtigungen, um benutzerdefinierte Ressourcendefinitionen (CRDs) und Controller zu installieren.

Istio Cluster-Add-on als Gateway-API-Controller einrichten

Schritte zur Einrichtung des Istio-Cluster-Add-ons als Gateway-API-Controller

Im Allgemeinen sind die Schritte zum Einrichten des Istio-Cluster-Add-ons als Gateway-API-Controller wie folgt:

Schritt 1: Gateway-API-CRDs installieren

Die benutzerdefinierten Ressourcendefinitionen (CRDs) der Gateway-API werden nicht standardmäßig in Clustern installiert, die Sie mit der Kubernetes Engine erstellen. Bevor Sie Istio als Gateway-API-Controller verwenden, müssen Sie die CRDs installieren.

  1. Installieren Sie die standardmäßigen Gateway-API-CRDs (v1.2.0), indem Sie Folgendes eingeben:

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
    
  2. Prüfen Sie, ob die CRD installiert ist, indem Sie Folgendes eingeben:

    kubectl get crd gateways.gateway.networking.k8s.io
    
  3. Vergewissern Sie sich, dass die CRD in der Ausgabe aufgeführt ist.
  4. Stellen Sie sicher, dass das Kubernetes-Gateway-API-Release mit der von Kubernetes Engine unterstützten Istio-Add-on-Version für die auf dem Cluster ausgeführte Kubernetes-Version kompatibel ist (siehe Vergleiche - v1.2 in der Gateway-API-Dokumentation und Unterstützte Cluster-Add-on-Versionen).

Schritt 2: Istio-Cluster-Add-on-Konfigurationsdatei erstellen

Erstellen Sie eine Istio-Cluster-Add-on-Konfigurationsdatei zur Verwendung mit der OCI-CLI.

  1. Erstellen Sie eine JSON-Datei (Beispiel: enableistio.json).

  2. Fügen Sie den folgenden Inhalt hinzu, um das Add-on zu aktivieren.

    Hinweis: Im Gegensatz zum Standard-Service-Mesh-Anwendungsfall müssen Sie das Legacy-Verzeichnis enableIngressGateway nicht unbedingt festlegen, da die Gateway-API die Gateway-Infrastruktur dynamisch bereitstellen kann. Diese Einstellung bietet jedoch ein Standard-Fallback.

    {
        "addonName": "Istio",
        "configurations": [
            {
                "key": "enableIngressGateway",
                "value": "false"
            }
        ]
    }
    

    Beachten Sie Folgendes:

    • Wenn Sie value auf "true" setzen, stellt das Istio-Cluster-Add-on das klassische istio-ingressgateway-Deployment und den klassischen Service neben der Control Plane bereit.
    • Wenn Sie value auf "false" setzen, wird nur die Control Plane (istiod) installiert. Sie können dann Gateway-Ressourcen erstellen, die Istio bei Bedarf automatisch bereitstellt.
  3. Speichern und schließen Sie die Datei.

Schritt 3: Istio-Cluster-Add-on im Cluster bereitstellen und erfolgreiches Deployment bestätigen

Stellen Sie das Istio-Cluster-Add-on bereit.

  1. Stellen Sie das Add-on mit der OCI-CLI bereit, indem Sie Folgendes eingeben:

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json
    
  2. Erfolgreiches Deployment prüfen:

    1. Eingeben:

      oci ce cluster list-addons --cluster-id <cluster-ocid>
      
    2. Vergewissern Sie sich, dass der Lebenszyklusstatus des Istio-Cluster-Add-ons ACTIVE lautet.

  3. Stellen Sie sicher, dass die Istio-Control Plane ausgeführt wird:

    1. Eingeben:

      kubectl get pods -n istio-system
      
    2. Stellen Sie sicher, dass der istiod-Pod den Status Running aufweist.

4. Schritt: Gateway erstellen

Erstellen Sie die Ressource Gateway.

  1. Erstellen Sie einen neuen Namespace (z.B. test-gateway), indem Sie Folgendes eingeben:
    kubectl create namespace test-gateway
  2. Erstellen Sie eine Datei mit dem Namen gateway.yaml mit dem folgenden Inhalt.

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: test-gateway
      annotations:
        # OCI specific annotation for Network Load Balancer (Layer 4)
        oci.oraclecloud.com/load-balancer-type: "nlb"
    spec:
      gatewayClassName: istio
      listeners:
      - name: http
        port: 80
        protocol: HTTP
        allowedRoutes:
          namespaces:
            from: Same
    

    Beachten Sie die Zeile gatewayClassName: istio, die das Istio-Cluster-Add-on anweist, dieses Gateway zu verwalten.

  3. Erstellen Sie die Gateway, indem Sie Folgendes eingeben:

    kubectl apply -f gateway.yaml
    
  4. Rufen Sie die externe IP-Adresse ab, indem Sie Folgendes eingeben:

    kubectl get gateway -n test-gateway
    

    Es kann einige Minuten dauern, bis OCI den Load Balancer bereitstellt.

    Warten Sie, bis die Spalte PROGRAMMED True enthält und eine IP-Adresse in der Spalte ADDRESS angezeigt wird.

Schritt 5: Beispielanwendung bereitstellen

Stellen Sie eine Beispielanwendung im neuen Namespace bereit.

  1. Stellen Sie eine Beispielanwendung bereit (z.B. httpbin), indem Sie Folgendes eingeben:

    
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n test-gateway
    

Schritt 6: HTTPRoute erstellen

Erstellen Sie eine HTTPRoute, um Traffic von Gateway an den httpbin-Service zu leiten.

  1. Erstellen Sie eine Datei namens route.yaml mit dem folgenden Inhalt:

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin-route
      namespace: test-gateway
    spec:
      parentRefs:
      - name: my-gateway
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /get
        backendRefs:
        - name: httpbin
          port: 8000
    
  2. Erstellen Sie HTTPRoute, indem Sie Folgendes eingeben:

    kubectl apply -f route.yaml
    

Schritt 7: Konnektivität prüfen

Prüfen Sie die Konnektivität, indem Sie eine Anforderung an die externe IP-Adresse der Gateway senden.

  1. Rufen Sie die öffentliche IP-Adresse des Gateways ab, und speichern Sie sie als Umgebungsvariable, indem Sie Folgendes eingeben:

    export GATEWAY_IP=$(kubectl get gateway my-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}')
  2. Verwenden Sie curl, um eine Anforderung an die externe IP-Adresse des Gateways zu senden, indem Sie Folgendes eingeben:

    curl -i http://$GATEWAY_IP/get
    
    
    
  3. Bestätigen Sie, dass Sie eine 200 OK-Antwort von der httpbin-Anwendung erhalten.

Cluster-Add-ons von Istio deaktivieren (und löschen)

In diesen Anweisungen wird beschrieben, wie Sie das Istio-Cluster-Add-on deaktivieren und entfernen.

  1. Deaktivieren und entfernen Sie das Add-on mit der OCI-CLI, indem Sie Folgendes eingeben:

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true
    
  2. (Optional) Entfernen Sie Gateway-API-Ressourcen.

    Beim Entfernen des Add-ons werden die von Ihnen erstellten Ressourcen Gateway oder HTTPRoute nicht automatisch gelöscht. Entfernen Sie sie manuell, um die zugehörigen Load Balancer zu bereinigen, indem Sie Folgendes eingeben:

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (Optional) Entfernen Sie Gateway-API-CRDs.

    Wenn Sie die Gateway-API in diesem Cluster nicht mehr benötigen, können Sie die CRDs entfernen, indem Sie Folgendes eingeben:

    kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml