In dieser Anleitung wird die saubere Installation der Anthos Service Mesh-Version 1.7.8-asm.10 auf angehängten GKE Enterprise-Clustern beschrieben. Verwenden Sie diese Anleitung, um Anthos Service Mesh in den folgenden Umgebungen zu installieren:
- Amazon Elastic Kubernetes Service (Amazon EKS) in der Kubernetes-Version 1.16
- Microsoft Azure Kubernetes Service (Microsoft AKS) in der Kubernetes-Version 1.16
Durch die Installation werden die unterstützten Funktionen auf Ihrem Cluster für das Konfigurationsprofil asm-multicloud
aktiviert.
Hinweise
Informationen zum Erstellen Ihres Google Cloud-Projekts und zum Registrieren des Clusters in der Flotte des Projekts finden Sie unter Angehängte GKE Enterprise-Cluster einrichten.
Lesen Sie die folgenden Anforderungen und Beschränkungen.
Voraussetzungen
Der Nutzercluster, auf dem Sie Anthos Service Mesh installieren, hat mindestens 4 vCPUs, 15 GB Arbeitsspeicher und 4 Knoten.
Auf dem Cluster ist weder Anthos Service Mesh noch das Open-Source-Framework Istio installiert.
Für die Aufnahme in das Service Mesh müssen Dienstports benannt werden und der Name muss das Protokoll des Ports in der folgenden Syntax enthalten:
name: protocol[-suffix]
, wobei die eckigen Klammern ein optionales Suffix angeben, das mit einem Bindestrich beginnen muss. Weitere Informationen finden Sie unter Dienstports benennen.
Einschränkungen
Mit einem Google Cloud-Projekt kann nur ein Mesh-Netzwerk 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- Google Cloud CLI
Nach der Installation des Google Cloud CLI:
Authentifizieren Sie sich mit dem Google Cloud CLI:
gcloud auth login
Aktualisieren Sie die Komponenten:
gcloud components update
Installieren Sie
kubectl
:gcloud components install kubectl
Installieren Sie die erforderliche Version von
kpt
:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
Wechseln Sie den Kontext zu Ihrem Nutzercluster:
kubectl config use-context CLUSTER_NAME
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
Installation von Anthos Service Mesh vorbereiten
-
Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
-
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.8-asm.10-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Die erwartete Ausgabe ist
Verified OK
. -
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.8-asm.10-linux-amd64.tar.gz
Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis
istio-1.7.8-asm.10
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 Verzeichnisbin
. - Die Anthos Service Mesh-Konfigurationsprofile befinden sich im Verzeichnis
manifests/profiles
.
- Beispielanwendungen im Verzeichnis
-
Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
-
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.8-asm.10-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Die erwartete Ausgabe ist
Verified OK
. -
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.8-asm.10-osx.tar.gz
Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis
istio-1.7.8-asm.10
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 Verzeichnisbin
. - Die Anthos Service Mesh-Konfigurationsprofile befinden sich im Verzeichnis
manifests/profiles
.
- Beispielanwendungen im Verzeichnis
-
Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
-
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.8-asm.10-win.zip.1.sig openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
Die erwartete Ausgabe ist
Verified OK
. -
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.8-asm.10-win.zip
Mit dem Befehl wird in Ihrem aktuellen Arbeitsverzeichnis
istio-1.7.8-asm.10
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 Verzeichnisbin
. - Die Anthos Service Mesh-Konfigurationsprofile befinden sich im Verzeichnis
manifests/profiles
.
- Beispielanwendungen im Verzeichnis
-
Prüfen Sie, ob Sie sich im Stammverzeichnis der Anthos Service Mesh-Installation befinden.
cd istio-1.7.8-asm.10
-
Fügen Sie die Tools der Einfachheit halber im Verzeichnis
/bin
Ihrem PATH hinzu.export PATH=$PWD/bin:$PATH
Linux
macOS
Windows
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-178-10
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-178-10
Anthos Service Mesh installieren
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-178-10
Mit dem Argument
--set revision
wirdistiod
ein Überarbeitungslabel im Formatistio.io/rev=asm-178-10
hinzugefügt. Das Überarbeitungslabel wird vom automatischen Sidecar-Injektor-Webhook verwendet, um eingefügte Sidecars mit einer bestimmtenistiod
-Ü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 aufistiod
übereinstimmt.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
aktiv sind:
kubectl get pod -n istio-system
Die erwartete Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-cff9f5c7d-qg4ls 1/1 Running 0 7m5s istio-ingressgateway-cff9f5c7d-vlkzb 1/1 Running 0 7m20s istiod-66b587859c-886gx 1/1 Running 0 7m33s istiod-66b587859c-dfs2j 1/1 Running 0 7m33s
Wenn aus der Ausgabe des Befehls hervorgeht, dass eine oder mehrere Komponenten nicht den Status Running
haben, finden Sie unter Fehlerbehebung für GKE Enterprise auf angehängten Clustern ein Skript, mit dem Sie Details zu den Komponenten abrufen können.
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:
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-178-10-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586 istiod-asm-178-10-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586
Notieren Sie sich den Wert des Überarbeitungslabels
istiod
aus der Ausgabe in der SpalteLABELS
, das auf das Präfixistio.io/rev=
folgt. In diesem Beispiel ist der Wertasm-178-10
.Wenden Sie das Überarbeitungslabel an und entfernen Sie das Label
istio-injection
, falls vorhanden. Im folgenden Befehl istNAMESPACE
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 Labelistio-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 Labelistio-injection
als auch das Überarbeitungslabel enthält, umfassen allekubectl label
-Befehle in der Anthos Service Mesh-Dokumentation das Entfernen des Labelsistio-injection
.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
Ü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 von
istio-ingressgateway
abrufen.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:
Erstellen Sie die Umgebungsvariable für den Hostschlüssel:
Microsoft AKS
export HOST_KEY="ip"
Amazon EKS
export HOST_KEY="hostname"
Erstellen Sie die Umgebungsvariable
INGRESS_HOST
:export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].'"$HOST_KEY"'}')
Erstellen Sie die Umgebungsvariable
INGRESS_PORT
:export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
Rufen Sie die Anwendung in Ihrem Browser auf. Ersetzen Sie in der folgenden URL
EXTERNAL_IP
durch$INGRESS_HOST:$INGRESS_PORT
:http://EXTERNAL_IP/