Sie lesen die Dokumentation für Anthos Service Mesh 1.7. Lesen Sie die aktuelle Dokumentation oder wählen Sie eine andere verfügbare Version aus:

In Anthos Clusters on AWS installieren

In dieser Anleitung wird die Installation einer sauberen Installation der Anthos Service Mesh-Version 1.7.6-asm.1 in Anthos Clusters on AWS erläutert.

Bei Anthos Service Mesh ist das Istio-Ingress-Gateway vorinstalliert. Wenn Sie jedoch einen Ingress-Controller verwenden möchten, können Sie mit Anthos Service Mesh eine Kubernetes Ingress-Ressource einrichten. In dieser Anleitung erfahren Sie, wie Sie Anthos Service Mesh installieren und optional eine Kubernetes Ingress-Ressource einrichten.

Vorbereitung

Bevor Sie mit der Installation von Anthos Service Mesh beginnen, müssen Sie die folgenden Aufgaben ausgeführt haben:

  • Der Verwaltungsdienst muss installiert sein.
  • Nutzercluster erstellen
  • Sie haben ein AWS-Netzwerk eingerichtet.
  • Lesen Sie die folgenden Anforderungen und Beschränkungen, bevor Sie mit der Einrichtung beginnen.

Anforderungen

  • Achten Sie darauf, dass der Nutzercluster, auf dem Sie Anthos Service Mesh installieren, mindestens 4 vCPUs, 15 GB Arbeitsspeicher und 4 Replikate hat.

  • Lesen Sie Dienstports benennen, bevor Sie Arbeitslasten bereitstellen.

  • Achten Sie darauf, dass Ihre Clusterversion unter Unterstützte Umgebungen aufgeführt ist.

Beschränkungen

Mit einem Google Cloud-Projekt kann nur ein Mesh verknüpft sein.

Umgebung einrichten

Sie benötigen die folgenden Tools auf dem Computer, von dem Sie Anthos Service Mesh installieren möchten. Sie können Anthos Service Mesh nur auf einem Nutzercluster und nicht auf einem Administratorcluster installieren.

  • curl-Befehlszeilentool
  • Das Cloud SDK (das gcloud-Befehlszeilentool)

Nach der Installation des Cloud SDK:

  1. Authentifizieren Sie sich beim Cloud SDK:

    gcloud auth login
    
  2. Aktualisieren Sie die Komponenten:

    gcloud components update
    
  3. Installieren Sie kubectl:

    gcloud components install kubectl
    
  4. Installieren Sie kpt:

    gcloud components install kpt
    
  5. Wechseln Sie den Kontext zu Ihrem Nutzercluster:

    kubectl config use-context CLUSTER_NAME
  6. Gewähren Sie dem Nutzerkonto Administratorberechtigungen (Ihre E-Mail-Adresse für die Anmeldung in Google Cloud). Sie benötigen diese Berechtigungen, um die erforderlichen Regeln für die rollenbasierte Zugriffssteuerung (Role Based Access Control, RBAC) für Anthos Service Mesh zu erstellen:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Installationsdatei herunterladen

  1. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-linux-amd64.tar.gz
  2. Laden Sie die Signaturdatei herunter und bestätigen Sie die Signatur mit openssl:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig istio-1.7.6-asm.1-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Die erwartete Ausgabe ist Verified OK.

  3. Entpacken Sie die Inhalte der Datei in einem Verzeichnis Ihres Dateisystems. So extrahieren Sie beispielsweise den Inhalt in das aktuelle Arbeitsverzeichnis:

    tar xzf istio-1.7.6-asm.1-linux-amd64.tar.gz

    Der Befehl erstellt in Ihrem aktuellen Arbeitsverzeichnis ein Installationsverzeichnis mit dem Namen istio-1.7.6-asm.1. Das Verzeichnis istio-1.7.6-asm.1/bin enthält das istioctl-Befehlszeilentool, mit dem Sie Anthos Service Mesh installieren.

  4. Prüfen Sie, ob Sie sich im Stammverzeichnis der Anthos Service Mesh-Installation befinden.

    cd istio-1.7.6-asm.1
  5. Der Einfachheit halber fügen Sie Ihrem Pfad das Verzeichnis /bin hinzu:

    export PATH=$PWD/bin:$PATH

Namespace istio-system erstellen

Erstellen Sie einen Namespace namens "istio-system" für die Komponenten der Steuerungsebene:

kubectl create namespace istio-system

Webhook für die Validierung konfigurieren

Wenn Sie Anthos Service Mesh installieren, legen Sie ein Überarbeitungslabel auf istiod fest. Sie müssen für den Validierungs-Webhook dieselbe Überarbeitung festlegen.

Kopieren Sie die folgende YAML-Datei in eine Datei mit dem Namen istiod-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-176-1
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-176-1

Anthos Service Mesh installieren

In diesem Abschnitt wird erläutert, wie Sie Anthos Service Mesh auf Ihrem Nutzercluster installieren. Dadurch werden die unterstützten Standardfeatures aktiviert, die auf der Seite Unterstützte Features für das Profil asm-multicloud aufgeführt sind. Sie können Ingress für das öffentliche oder das private Subnetz aktivieren.

Öffentlich

  1. Installieren Sie Anthos Service Mesh:

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-176-1
    

    Mit dem Argument --set revision wird istiod ein Überarbeitungslabel im Format istio.io/rev=asm-176-1 hinzugefügt. Das Überarbeitungslabel wird vom automatischen Sidecar-Injektor-Webhook verwendet, um eingefügte Sidecars mit einer bestimmten istiod-Überarbeitung zu verknüpfen. Wenn Sie die automatische Sidecar-Injektion für einen Namespace aktivieren möchten, müssen Sie sie mit einer Überarbeitung kennzeichnen, die mit dem Label auf istiod übereinstimmt.

  2. Konfigurieren Sie den Validierungs-Webhook so, dass er den Dienst istiod mit dem Überarbeitungslabel finden kann:

    kubectl apply -f istiod-service.yaml
    

    Dieser Befehl erstellt einen Diensteintrag, dank dem der Webhook automatisch Konfigurationen prüfen kann, bevor sie angewendet werden.

Privat

Im Folgenden fügen Sie die Annotation service.beta.kubernetes.io/aws-load-balancer-internal allen Diensten hinzu, die von Anthos Service Mesh erstellt werden. Wenn diese Annotation vorhanden ist, erstellt Anthos Clusters on AWS private Ingress-Dienste.

  1. Speichern Sie die folgende YAML-Datei in einer Datei mit dem Namen istio-operator-internal-lb.yaml:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  2. Installieren Sie Anthos Service Mesh:

    istioctl install \
     --set profile=asm-multicloud \
     --set revision=asm-176-1 \
     -f istio-operator-internal-lb.yaml
    

    Mit dem Argument --set revision wird istiod ein Überarbeitungslabel im Format istio.io/rev=asm-176-1 hinzugefügt. Das Überarbeitungslabel wird vom automatischen Sidecar-Injektor-Webhook verwendet, um eingefügte Sidecars mit einer bestimmten istiod-Überarbeitung zu verknüpfen. Wenn Sie die automatische Sidecar-Injektion für einen Namespace aktivieren möchten, müssen Sie sie mit einer Überarbeitung kennzeichnen, die mit dem Label auf istiod übereinstimmt.

  3. Konfigurieren Sie den Validierungs-Webhook so, dass er den Dienst istiod mit dem Überarbeitungslabel finden kann:

    kubectl apply -f istiod-service.yaml
    

    Dieser Befehl erstellt einen Diensteintrag, dank dem der Webhook automatisch Konfigurationen prüfen kann, bevor sie angewendet werden.

Ohne Prometheus und Kiali installieren

Standardmäßig werden in Anthos Service Mesh 1.7 und früher Prometheus und Kiali aus ihren ursprünglichen Paket-Repositories in docker.io und quay.io installiert. Wenn Sie diese Tools weder installieren noch Verbindungen zu diesen Repositories zulassen möchten, übergeben Sie -set addonComponents.prometheus.enabled=false und --set addonComponents.kiali.enabled=false an istioctl install. Verwenden Sie beispielsweise den folgenden Befehl, um Prometheus und Kiali von der Installation des öffentlichen Subnetzes auszuschließen.

  istioctl install \
    --set profile=asm-multicloud \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-176-1

Komponenten der Steuerungsebene prüfen

Prüfen Sie, ob die Pods der Steuerungsebene in istio-system aktiv sind:

kubectl get pod -n istio-system

Die erwartete Ausgabe sieht in etwa so aus:

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

Sidecar-Proxys einfügen

Anthos Service Mesh verwendet Sidecar-Proxys, um die Sicherheit, Zuverlässigkeit und Beobachtbarkeit von Netzwerken zu verbessern. Mit Anthos Service Mesh werden diese Funktionen vom primären Container der Anwendung abstrahiert und in einem gemeinsamen Out-of-Process-Proxy implementiert, der als separater Container im selben Pod bereitgestellt wird. Zum Einfügen des Sidecar-Proxys in Ihre Pods konfigurieren Sie die automatische Sidecar-Proxy-Einfügung (automatisches Einfügen), indem Sie Ihre Namespaces mit demselben Überarbeitungslabel versehen, das Sie bei der Installation von Anthos Service Mesh für istiod festgelegt haben.

  • Sie müssen die automatische Einfügung in allen Namespaces mit Arbeitslasten aktivieren, die vor der Installation von Anthos Service Mesh auf Ihrem Cluster ausgeführt wurden.

  • Bevor Sie neue Arbeitslasten bereitstellen, muss die automatische Einfügung konfiguriert werden, um den Traffic mit Anthos Service Mesh überwachen und schützen zu können.

So aktivieren Sie die automatische Einfügung:

  1. Verwenden Sie den folgenden Befehl, um das Überarbeitungslabel für istiod zu finden:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    Die Ausgabe sieht dann ungefähr so aus:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-176-1-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-176-1-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586

    Notieren Sie sich den Wert des Überarbeitungslabels istiod aus der Ausgabe in der Spalte LABELS, das auf das Präfix istio.io/rev= folgt. In diesem Beispiel ist der Wert asm-176-1.

  2. Wenden Sie das Überarbeitungslabel an und entfernen Sie das Label istio-injection, falls vorhanden. Im folgenden Befehl ist NAMESPACE der Name des Namespace, in dem Sie die automatische Einfügung aktivieren möchten. REVISION ist das Überarbeitungslabel, das Sie im vorherigen Schritt notiert haben.

    kubectl label namespace NAMESPACE istio-injection-istio.io/rev=REVISION --overwrite
    

    Sie können die Nachricht "istio-injection not found" in der Ausgabe ignorieren. Das bedeutet, dass der Namespace bisher nicht das Label istio-injection hatte, was bei Neuinstallationen von Anthos Service Mesh oder neuen Bereitstellungen zu erwarten wäre. Da die automatische Einfügung fehlschlägt, wenn ein Namespace sowohl das Label istio-injectionals auch das Überarbeitungslabel enthält, umfassen alle kubectl label-Befehle in der Anthos Service Mesh-Dokumentation das Entfernen des Labels istio-injection.

  3. Wenn vor der Installation von Anthos Service Mesh in Ihrem Cluster Arbeitslasten ausgeführt wurden, starten Sie die Pods neu, um eine erneute Injektion auszulösen.

    Wie Sie Pods neu starten, hängt von der Anwendung und der Umgebung ab, in der sich der Cluster befindet. Beispielsweise können Sie in Ihrer Staging-Umgebung einfach alle Pods löschen, wodurch sie neu gestartet werden. Aber in Ihrer Produktionsumgebung haben Sie vielleicht einen Prozess, der ein Blau/Grün-Deployment implementiert, sodass Pods sicher neu gestartet werden können, um Traffic-Unterbrechungen zu vermeiden.

    Sie können kubectl verwenden, um einen rollierenden Neustart durchzuführen:

    kubectl rollout restart deployment -n NAMESPACE
    
  4. Überprüfen Sie, ob Ihre Pods so konfiguriert sind, dass sie auf die neue Version von istiod verweisen.

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    

Auf Ingress-Gateway zugreifen

Anthos Service Mesh bietet ein vorkonfiguriertes Ingress-Gateway, istio-ingressgateway, mit dem Sie eingehenden Traffic zu Anwendungen verwalten können, die in Ihrem Service Mesh ausgeführt werden. So machen Sie Anwendungen zugänglich, die außerhalb des Clusters liegen (z. B. über einen Browser):

  • Sie müssen die externe IP-Adresse oder den Hostnamen und den Port des externen Load-Balancers abrufen, der für die Verwendung im istio-ingressgateway konfiguriert ist.

  • Ihre Anwendung muss ein Gateway und eine VirtualService-Ressource definieren, ähnlich der Datei frontend-gateway.yaml der Beispielanwendung für die Online-Boutique.

So rufen Sie die externe IP-Adresse von istio-ingressgateway ab:

  1. Erstellen Sie die Umgebungsvariable INGRESS_HOST:

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    
  2. Erstellen Sie die Umgebungsvariable INGRESS_PORT:

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  3. Stellen Sie zum Testen eine Beispielanwendung bereit, z. B. Online Boutique.

  4. Verwenden Sie den Wert $INGRESS_HOST:$INGRESS_PORT in der URL, um in Ihrem Browser auf die Anwendung zuzugreifen.

Fehlerbehebung

Anthos Clusters on AWS erfordert Tags für Subnetze, die Endpunkte des Load-Balancers enthalten. Anthos Clusters on AWS kennzeichnet automatisch alle Subnetze im Feld spec.Networking.ServiceLoadBalancerSubnetIDs der Ressource AWSCluster mit Tags.

Wenn Sie Ihrem Nutzercluster weitere Subnetze hinzufügen oder Tags auf vorhandene Subnetze anwenden möchten, führen Sie die folgenden Schritte aus:

  1. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Rufen Sie die ID der AWS-VPC des Clusters mit kubectl ab und speichern Sie sie als Variable.

     export VPC_ID=$(\
     env HTTP_PROXY=http://localhost:8118 \
     kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
    
  3. Prüfen Sie den Inhalt der Variablen mit echo. Die Ausgabe ähnelt vpc-12345678abcdef0.

    echo $VPC_ID
    
  4. Speichern Sie die Cluster-ID in einer Umgebungsvariablen.

    export CLUSTER_ID=$(\
    env HTTP_PROXY=http://localhost:8118 \
    kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
    

    Sie können die Variable mit echo prüfen:

    echo $CLUSTER_ID
    

    Die Antwort enthält Ihre Cluster-ID.

    gke-12345678
    
  5. Standardmäßig richtet Anthos Clusters on AWS eine VPC mit privaten und öffentlichen Subnetzen ein. Verwenden Sie zum Abrufen der Subnetz-ID das aws-Befehlszeilentool.

    Folgende Optionen sind verfügbar:

    • Öffentlich, wenn Sie Dienste in Ihrem öffentlichen Subnetz verfügbar machen möchten.
    • Privat, wenn Sie Dienste in Ihrem privaten Subnetz verfügbar machen möchten.
    • Mehrere Subnetze, wenn Sie Dienste in mehreren Subnetzen verfügbar machen möchten.

    Öffentlich

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    Die Ausgabe ist ein Objekt, das Ihre Subnetz-ID enthält. Sie ähnelt subnet-1234abcdefg. Sie können die Variable mit echo prüfen:

    echo $SUBNET_ID
    

    Die Antwort enthält Ihre Subnetz-ID.

    subnet-012345678abcdef
    

    Privat

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    Die Ausgabe ist ein Objekt, das Ihre Subnetz-ID enthält. Sie ähnelt subnet-1234abcdefg. Sie können die Variable mit echo prüfen:

    echo $SUBNET_ID
    

    Die Antwort enthält Ihre Subnetz-ID.

    subnet-012345678abcdef
    

    Mehrere Subnetze

    Wenn Sie mehrere Subnetze für Ihre AWSNodePools nutzen, z. B. wenn Sie mehrere Verfügbarkeitszonen verwenden, müssen Sie Ihre Subnetz-IDs einzeln taggen.

    Rufen Sie die Liste der Subnetz-IDs mit aws ec2 describe-subnets ab.

    Führen Sie den folgenden Befehl aus, um eine Liste aller öffentlichen Subnetze abzurufen:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    Führen Sie den folgenden Befehl aus, um eine Liste aller privaten Subnetze abzurufen:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    Die Antwort enthält Ihre Subnetz-IDs.

    subnet-012345678abcdef
    subnet-abcdef123456789
    subnet-123456789abcdef
    
  6. Taggen Sie das Subnetz mit Ihrer Cluster-ID. Wenn Sie mehrere Subnetze haben, wählen Sie die Methode für mehrere Subnetze aus.

    Einzelnes Subnetz

    aws ec2 create-tags \
    --resources $SUBNET_ID \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    Mehrere Subnetze

    Führen Sie für jedes Ihrer Subnetze den folgenden Befehl aus:

    aws ec2 create-tags \
    --resources subnet-ids \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    Ersetzen Sie subnet-ids durch die durch Leerzeichen getrennte Liste der Subnetz-IDs. Beispiel: subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef

Nächste Schritte

Beispielbereitstellung für Anthos Clusters on AWS erstellen