Anthos Service Mesh lokal installieren

In dieser Anleitung wird die saubere Installation der Anthos Service Mesh-Version 1.6.14-asm.2 auf einem vorhandenen GKE on VMware-Cluster beschrieben. Wenn Sie eine frühere Version von Anthos Service Mesh installiert haben, lesen Sie Upgrade von Anthos Service Mesh auf GKE auf VMware ausführen. Bei der Installation werden die unterstützten Features in Ihrem Cluster für das Konfigurationsprofil asm-multicloud aktiviert.

Komponenten der Steuerungsebene

In GKE on VMware sind die folgenden Istio-Komponenten vorinstalliert:

  • Citadel ist im Namespace kube-system installiert.
  • Pilot und das Istio-Ingress-Gateway sind im Namespace gke-system installiert.

GKE on VMware verwendet diese Komponenten, um eingehenden Traffic zu ermöglichen und die Kommunikation zwischen von Google gesteuerten Komponenten zu sichern. Wenn Sie nur Ingress-Funktionen benötigen, müssen Sie OSS Istio oder Anthos Service Mesh nicht installieren. Weitere Informationen zum Konfigurieren von Ingress finden Sie unter Ingress aktivieren.

Wenn Sie Anthos Service Mesh installieren, sind dessen Komponenten im Namespace istio-system installiert. Da sich die Anthos Service Mesh-Komponenten in einem anderen Namespace befinden, stehen sie nicht in Konflikt mit den vorinstallierten Istio-Komponenten von GKE on VMware.

Hinweise

Lesen Sie die folgenden Voraussetzungen, bevor Sie mit der Einrichtung beginnen.

Voraussetzungen

  • Sie benötigen ein Anthos-Abo. Alternativ ist eine „Pay as you go“-Abrechnungsoption nur für GKE Enterprise in Google Cloud verfügbar. Weitere Informationen finden Sie in der GKE Enterprise-Preisübersicht.

  • Prüfen Sie, ob Ihr Nutzercluster, auf dem Sie Anthos Service Mesh installieren, mindestens 4 vCPUs, 15 GB Arbeitsspeicher und 4 Replikate hat.

  • Verwenden Sie für die Benennung Ihrer Dienstports die folgende Syntax: name: protocol[-suffix]. Die eckigen Klammern geben dabei ein optionales Suffix an, das mit einem Bindestrich beginnen muss. Weitere Informationen finden Sie unter Dienstports benennen.

  • Prüfen Sie, ob Ihre Clusterversion unter Unterstützte Umgebungen aufgeführt ist. Mit dem gkectl-Befehlszeilentool können Sie die Clusterversion prüfen.

    gkectl version

    Eine erfolgreiche Ausgabe sieht etwa so aus:

     1.4.0-gke.13 (git-b39331512)
    

    Wenn gkectl nicht installiert ist, finden Sie unter GKE On-Prem-Downloads weitere Informationen.

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.

Nach der Installation der gcloud CLI:

  1. Authentifizieren Sie sich über die gcloud CLI:

    gcloud auth login
    
  2. Aktualisieren Sie die Komponenten:

    gcloud components update
    
  3. Installieren Sie kubectl:

    gcloud components install kubectl
    
  4. Wenn Sie Ihre Installation mit der Online Boutique-Beispielanwendung bereitstellen und testen möchten, installieren Sie kpt:

    gcloud components install kpt
    
  5. Wechseln Sie den Kontext zu Ihrem Nutzercluster (falls nötig):

    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

    Linux

  1. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-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.6.14-asm.2-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-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.6.14-asm.2-linux-amd64.tar.gz

    Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis istio-1.6.14-asm.2 ein Installationsverzeichnis erstellt, das Folgendes enthält:

    • Beispielanwendungen im Verzeichnis samples.
    • Das istioctl-Befehlszeilentool, das Sie zum Installieren von Anthos Service Mesh verwenden, befindet sich im Verzeichnis bin.
    • Die Anthos Service Mesh-Konfigurationsprofile befinden sich im Verzeichnis install/kubernetes/operator/profiles.

  4. macOS

  5. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
  6. Laden Sie die Signaturdatei herunter und bestätigen Sie die Signatur mit openssl:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Die erwartete Ausgabe ist Verified OK.

  7. 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.6.14-asm.2-osx.tar.gz

    Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis istio-1.6.14-asm.2 ein Installationsverzeichnis erstellt, das Folgendes enthält:

    • Beispielanwendungen im Verzeichnis samples.
    • Das istioctl-Befehlszeilentool, das Sie zum Installieren von Anthos Service Mesh verwenden, befindet sich im Verzeichnis bin.
    • Die Anthos Service Mesh-Konfigurationsprofile befinden sich im Verzeichnis install/kubernetes/operator/profiles.

  8. Windows

  9. Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
  10. Laden Sie die Signaturdatei herunter und bestätigen Sie die Signatur mit openssl:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Die erwartete Ausgabe ist Verified OK.

  11. 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.6.14-asm.2-win.zip

    Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis istio-1.6.14-asm.2 ein Installationsverzeichnis erstellt, das Folgendes enthält:

    • Beispielanwendungen im Verzeichnis samples.
    • Das istioctl-Befehlszeilentool, das Sie zum Installieren von Anthos Service Mesh verwenden, befindet sich im Verzeichnis bin.
    • Die Anthos Service Mesh-Konfigurationsprofile befinden sich im Verzeichnis install/kubernetes/operator/profiles.

  12. Prüfen Sie, ob Sie sich im Stammverzeichnis der Anthos Service Mesh-Installation befinden.
    cd istio-1.6.14-asm.2
  13. Fügen Sie die Tools der Einfachheit halber im Verzeichnis /bin Ihrem PATH 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-1614-2
    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-1614-2

Anthos Service Mesh installieren

  1. Führen Sie den folgenden Befehl aus, um Anthos Service Mesh mit dem Profil asm-multicloud zu installieren. Wenn Sie ein unterstütztes optionales Feature aktivieren möchten, fügen Sie in der folgenden Befehlszeile -f und den YAML-Dateinamen hinzu. Weitere Informationen finden Sie unter Optionale Features aktivieren.

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-1614-2
    

    Mit dem Argument --set revision wird istiod ein Überarbeitungslabel im Format istio.io/rev=asm-1614-2 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.

Automatisches gegenseitiges TLS (automTLS) ist standardmäßig aktiviert. Beim automatischen mTLS erkennt ein Client-Sidecar-Proxy automatisch, ob der Server eine Sidecar-Datei hat. Die Client-Sidecar-Datei sendet mTLS an Arbeitslasten mit Sidecar-Dateien und Nur-Text-Traffic an Arbeitslasten ohne Sidecar-Dateien.

Komponenten der Steuerungsebene prüfen

Prüfen Sie, ob die Pods der Steuerungsebene in istio-system ausgeführt werden:

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.

Bevor Sie Arbeitslasten bereitstellen, muss die Sidecar-Proxy-Injektion so konfiguriert werden, dass Traffic mit Anthos Service Mesh überwacht und geschützt werden kann.

Alle Arbeitslasten, die vor der Installation von Anthos Service Mesh auf Ihrem Cluster ausgeführt wurden, müssen den Sidecar-Proxy enthalten oder aktualisiert haben, damit sie die aktuelle Anthos Service Mesh-Version haben. Bevor Sie neue Arbeitslasten bereitstellen, muss die Sidecar-Proxy-Injektion so konfiguriert werden, dass Traffic mit Anthos Service Mesh überwacht und geschützt werden kann.

Wenn Sie Sidecar-Injektion aktivieren möchten, müssen Sie Ihre Namespaces mit derselben Überarbeitung kennzeichnen, die sie auf istiod festgelegt haben. Führen Sie den folgenden Befehl aus, um sich die Labels auf istiod anzeigen zu lassen:

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

Bestätigen Sie, dass sich das Überarbeitungslabel istio.io/rev=asm-1614-2 in der Ausgabe befindet. Mit diesem Label wird die automatische Einfügung aktiviert. Sie können die automatische Einfügung mit einem einzigen Befehl aktivieren. Beispiel:

kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-1614-2 --overwrite

Dabei ist NAMESPACE der Name des Namespace für die Dienste der Anwendung oder default, wenn Sie nicht explizit einen Namespace erstellt haben.

Weitere Informationen finden Sie unter Sidecar-Proxys einfügen.

Externe IP-Adresse konfigurieren

Die Standardinstallation von Anthos Service Mesh geht davon aus, dass LoadBalancer-Diensten automatisch eine externe IP-Adresse zugewiesen wird. Dies gilt nicht für GKE on VMware. Aus diesem Grund müssen Sie der IP-Adresse des Anthos Service Mesh-Ingress-Gateways manuell eine IP-Adresse zuweisen.

Folgen Sie zum Konfigurieren einer externen IP-Adresse einem der folgenden Abschnitte je nach Load-Balancing-Modus des Clusters:

Integrierten Load-Balancing-Modus konfigurieren

  1. Öffnen Sie die Konfiguration des istio-ingressgateway-Dienstes:

    kubectl edit svc -n istio-system istio-ingressgateway
    

    Die Konfiguration für den Dienst istio-ingressgateway wird im Standardtexteditor der Shell aufgerufen.

  2. Fügen Sie der Datei die folgende Zeile unter dem Spezifikationsblock (spec) hinzu:

    loadBalancerIP: <your static external IP address>
    

    Beispiel:

    spec:
     loadBalancerIP: 203.0.113.1
    
  3. Speichern Sie die Datei.

Manuellen Load-Balancing-Modus konfigurieren

Um einen Dienst vom Typ NodePort mit einer VIP auf dem ausgewählten Load-Balancer verfügbar zu machen, müssen Sie zuerst die nodePort-Werte ermitteln:

  1. Rufen Sie die Konfiguration des Dienstes istio-ingressgateway in Ihrer Shell auf:

    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    

    Jeder Port für die Gateways von Anthos Service Mesh wird angezeigt. Die entsprechende Befehlsausgabe sieht etwa so aus:

     ...
     ports:
     - name: status-port
       nodePort: 30391
       port: 15020
       protocol: TCP
       targetPort: 15020
     - name: http2
       nodePort: 31380
       port: 80
       protocol: TCP
       targetPort: 80
     - name: https
       nodePort: 31390
       port: 443
       protocol: TCP
       targetPort: 443
     - name: tcp
       nodePort: 31400
       port: 31400
       protocol: TCP
       targetPort: 31400
     - name: https-kiali
       nodePort: 31073
       port: 15029
       protocol: TCP
       targetPort: 15029
     - name: https-prometheus
       nodePort: 30253
       port: 15030
       protocol: TCP
       targetPort: 15030
     - name: https-grafana
       nodePort: 30050
       port: 15031
       protocol: TCP
       targetPort: 15031
     - name: https-tracing
       nodePort: 31204
       port: 15032
       protocol: TCP
       targetPort: 15032
     - name: tls
       nodePort: 30158
       port: 15443
       protocol: TCP
       targetPort: 15443
     ...
    
  2. Machen Sie diese Ports über Ihren Load-Balancer verfügbar.

    Der Dienstport http2 hat beispielsweise port 80 und nodePort 31380. Angenommen, die Knotenadressen für Ihren Nutzercluster lauten 192.168.0.10, 192.168.0.11 und 192.168.0.12 und die VIP Ihres Load-Balancers ist 203.0.113.1.

    Konfigurieren Sie dann Ihren Load-Balancer so, dass der an 203.0.113.1:80 gesendete Traffic an 192.168.0.10:31380, 192.168.0.11:31380 oder 192.168.0.12:31380 weitergeleitet wird. Sie können die Dienstports auswählen, die Sie für diese VIP freigeben möchten.

Nächste Schritte