Einführung
Mit Anthos Service Mesh können Sie Dienste, die in verwalteten Instanzgruppen (Managed Instance Groups, MIGs) ausgeführt werden, zusammen mit Diensten ausführen, die in GKE-Clustern (Google Kubernetes Engine) im Mesh-Netzwerk ausgeführt werden. Dadurch können Sie mit den Compute Engine-Instanzen in Ihrem Mesh-Netzwerk Folgendes tun:
- Traffic verwalten.
- mTLS erzwingen.
- Zugriffssteuerung auf Diensttraffic anwenden.
- Sicher auf Google Cloud-Dienste zugreifen.
- Messwerte erfassen sowie Logging und Tracing von Daten.
- Dienste mit der Google Cloud Console überwachen.
Dadurch können Legacy-Anwendungen für die Nutzung von Anthos Service Mesh-Funktionen aktiviert werden, die sich nicht für die Containerisierung eignen. Außerdem ist die Einbindung dieser Arbeitslasten in die übrigen Dienste möglich.
Funktionsweise
ASM bietet zwei zugehörige benutzerdefinierte Ressourcendefinitionen (CRDs) zur Darstellung von Arbeitslasten für virtuelle Maschinen:
WorkloadGroup
steht für eine logische Gruppe von VM-Arbeitslasten mit gemeinsamen Attributen. Dies ähnelt einem Deployment in Kubernetes.WorkloadEntry
steht für eine einzelne Instanz einer VM-Arbeitslast. Dies ist mit einem Pod in Kubernetes vergleichbar.- Ein
Service
kann dann dieWorkloadGroup
auswählen und Traffic von ASM an die VM-Instanz weiterleiten lassen, ähnlich wie bei einemPod
. Auf diese Weise kann die VM wie jede andere Arbeitslast im Mesh-Netzwerk ausgeführt werden.
Sie erstellen eine Compute Engine-Instanzvorlage für jede Compute Engine-Instanzgruppe, die einen Dienstproxy-Agent für jede Compute Engine-Instanz in dieser Gruppe angibt. Während der Installation bootet der Agent den Dienstproxy, richtet das Abfangen von Traffic ein und überwacht den Status des Dienstproxys während der Lebensdauer der Compute Engine-Instanz. Der Proxy stellt eine Verbindung zur Anthos Service Mesh-Steuerungsebene her und registriert dann automatisch jede Compute Engine-Instanz als WorkloadEntry für die entsprechende WorkloadGroup. So kann Anthos Service Mesh jede Instanz als Dienstendpunkt behandeln, wie die Kubernetes-Pods im Cluster. Sie können Kubernetes-Dienste auch für VM-Arbeitslasten erstellen, wie dies bei Kubernetes-Pods der Fall ist.
Informationen zur vertikalen oder horizontalen Skalierung von Arbeitslasten auf Compute Engine-Instanzen, beginnend mit einer MIG-Mindestgröße von null, finden Sie unter Autoscaling von Instanzgruppen.
Der Dienst-Proxy-Agent stützt sich auf VM-Manager, um dafür zu sorgen, dass der Agent auf jeder VM in der MIG installiert wird. Weitere Informationen zu Instanzgruppen und zur VM-Verwaltung finden Sie unter Verwaltete Instanzgruppe (Managed Instance Group, MIG) und VM Manager.
Unterstützte Linux-Distributionen
Betriebssystemversion | Unterstützt |
---|---|
Debian 10 | |
Debian 9 | |
CentOS 8 | |
CentOS 7 |
Weitere Informationen zu Betriebssystem-Distributionen finden Sie unter Debian-Unterstützung oder CentOS-Unterstützung.
Beschränkungen
- Die Steuerungsebene des Mesh-Netzwerks muss Anthos Service Mesh 1.9 oder höher sein.
- Es werden nur von Compute Engine verwaltete Instanzgruppen unterstützt, die anhand einer Compute Engine-Instanzvorlage erstellt wurden.
- Der Cluster und die VMs müssen sich im selben Netzwerk und im selben Projekt befinden und eine einzelne Netzwerkschnittstelle verwenden.
- Sie können dieses Feature ohne GKE Enterprise-Abo verwenden. Bestimmte UI-Elemente und Features in der Google Cloud Console sind jedoch nur für GKE Enterprise-Abonnenten verfügbar. Informationen dazu, was für Abonnenten und Nicht-Abonnenten verfügbar ist, finden Sie unter Unterschiede zwischen GKE Enterprise und Anthos Service Mesh.
Vorbereitung
Prüfen Sie zuerst, ob die folgenden Voraussetzungen erfüllt sind.
Cluster
Diese Seite enthält die Option, Anthos Service Mesh als Teil seiner Schritte zu installieren oder einen Cluster zu aktualisieren, auf dem Anthos Service Mesh bereits installiert ist. In beiden Fällen erfordern diese Schritte Anthos Service Mesh 1.9+ und einen Cluster, der diese Anforderungen erfüllt. Darüber hinaus gelten für den Anthos Service Mesh-VM-Support weitere Anforderungen:
- Die Steuerungsebene muss in einem von Ihnen kontrollierten Cluster installiert sein. Von Google verwaltete Steuerungsebenen werden nicht unterstützt. Weitere Informationen finden Sie unter Von Google verwaltete Steuerungsebenen.
- Verwendet Mesh CA als Zertifizierungsstelle.
- Verwendet Stackdriver für Telemetrie.
- Das Canonical Service-Deployment ist aktiviert, sodass der Anthos Service Mesh-Installationsprozess automatisch aktiviert wird.
Ihr Cluster muss in einer Flotte registriert sein. Wenn Sie den Cluster noch nicht registriert haben, kann er vom Prozess der VM-Installation im angegebenen Projekt für Sie registriert werden.
Wenn Sie ein GKE Enterprise-Abonnent sind, aktivieren Sie die GKE Enterprise API.
Befehlszeilentools
Für den Installationsprozess sind die folgenden Tools erforderlich, die bereits bei Verwendung der Google Cloud Shell installiert sind:
gcloud
kubectl
kpt
curl
jq
awk
printf
tr
grep
tail
Skript herunterladen
In diesem Abschnitt wird beschrieben, wie Sie das Skript für VM-Onboarding herunterladen.
Laden Sie das VM-Skript für Anthos Service Mesh 1.9.8 in das aktuelle Arbeitsverzeichnis herunter:
curl https://storage.googleapis.com/csm-artifacts/asm/asm_vm_1.9 > asm_vm
Laden Sie das SHA-256 der Datei in das aktuelle Arbeitsverzeichnis herunter:
curl https://storage.googleapis.com/csm-artifacts/asm/asm_vm_1.9.sha256 > asm_vm.sha256
Prüfen Sie den Download, wenn beide Dateien im selben Verzeichnis sind:
sha256sum -c --ignore-missing asm_vm.sha256
Wenn die Prüfung erfolgreich ist, gibt der Befehl Folgendes aus:
asm_vm: OK
Aus Kompatibilitätsgründen enthält die Datei
asm_vm.sha256
die Prüfsumme zweimal, damit jede Version des Skripts inasm_vm
umbenannt werden kann. Wenn Sie die Fehlermeldung erhalten, dass--ignore-missing
nicht vorhanden ist, führen Sie den vorherigen Befehl ohne das Flag--ignore-missing
noch einmal aus.Machen Sie das Skript ausführbar:
chmod +x asm_vm
Erste Schritte
In diesem Abschnitt werden die Schritte zum Hinzufügen von Compute Engine-Instanzen zu Anthos Service Mesh erläutert.
Umgebung einrichten
Verwenden Sie
gcloud
, um daskubectl
-Tool so zu konfigurieren, dass es auf den angegebenen Cluster verweist, da Sie für einige der unten aufgeführten Schritte Änderungen direkt am Cluster vornehmen müssen.gcloud container clusters get-credentials CLUSTER_NAME --zone CLUSTER_LOCATION --project PROJECT_ID
Cluster vorbereiten
Richten Sie den Anthos Service Mesh-Cluster für VMs ein, indem Sie die Anthos Service Mesh 1.9+-Steuerungsebene vorbereiten.
Wählen Sie Ihren nächsten Schritt aus, je nachdem, ob Anthos Service Mesh 1.9+ bereits im Cluster installiert ist.
Nicht installiert
Wenn Anthos Service Mesh 1.9+ nicht auf Ihrem Cluster installiert wurde, wird im folgenden Beispiel gezeigt, wie die Optionen vm
und hub-meshca
hinzugefügt werden, um die üblichen Anthos Service Mesh-Installationsschritte, die unter Installation, Migration und Upgrade für GKE zu finden sind, zu ändern.
Außerdem wird erläutert, wie das im folgenden Beispiel verwendete Skript install_asm
heruntergeladen wird.
Nachdem Sie das Skript install_asm
heruntergeladen haben, können Sie Anthos Service Mesh auf Ihrem Cluster installieren. Fügen Sie dazu die Flags --option hub-meshca
, --option vm
und --enable_all
hinzu. Weitere Informationen finden Sie unter Mesh CA mit Flotte aktivieren und Flags zur Aktivierung.
./install_asm --project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--mode install --option vm --option hub-meshca \
--enable_all
Installiert
Wenn Anthos Service Mesh 1.9+ bereits auf Ihrem Cluster installiert ist und Mesh CA mit aktivierter Flotte vorhanden ist, aktualisieren Sie die Anthos Service Mesh-Steuerungsebene, um VM-basierte Arbeitslasten zu unterstützen. Mit dem Skript können Sie auch prüfen, ob Ihre Anthos Service Mesh-Installation im Cluster für VM-Arbeitslasten bereit ist. Insbesondere aktualisiert der Unterbefehl prepare_cluster
alle Überarbeitungen in Anthos Service Mesh 1.9+, damit sie für VM-Arbeitslasten bereit stehen.
Wenn Mesh CA mit Flotte in Ihrer Installation von Anthos Service Mesh 1.9+ nicht aktiviert ist, installieren Sie Anthos Service Mesh 1.9+ neu oder führen Sie ein Upgrade aus, indem Sie die Flags --option hub-meshca
und --option vm
in das Skript install_asm
einfügen.
./asm_vm prepare_cluster \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION
Mit den vorherigen Schritten haben Sie folgende Handlungen ausgeführt:
Automatische VM-Registrierung aktivieren: Dazu wird die Variable
PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION
auf „true“ gesetzt. Wenn diese Option aktiviert ist, werden neue VM-Instanzen bei denWorkloadGroup
-CRs registriert und neueWorkloadEntry
-CRs werden erstellt, um Traffic an die VMs weiterzuleiten. Alle Anthos Service Mesh 1.9+-Steuerebenen, die mitinstall_asm
installiert werden, enthalten dies standardmäßig.Installieren Sie ein Erweiterungsgateway: Dieses Gateway heißt
eastwest
-Gateway und ist im Anthos Service Mesh-Konfigurationspaket definiert. Dadurch wird auch die Steuerungsebene für die VMs verfügbar gemacht.Installieren Sie die CRD
IdentityProvider
und registrieren Sie die Google-CRIdentityProvider
, um VMs zur Authentifizierung bei der Anthos Service Mesh-Steuerungsebene zu aktivieren und mit dem Rest des Service Mesh sicher zu kommunizieren.Registrieren Sie den Cluster in einer Flotte und aktivieren Sie die Arbeitslastidentität, wenn Sie
--enable_all
oder--enable_registration
im Skriptinstall_asm
verwenden.Aktivieren Sie das Feature
Service Mesh
in der Flotte. Dieses Feature verwaltet die erforderlichen Richtlinien, damit VMs sicher mit dem Mesh-Netzwerk kommunizieren können.
VMs hinzufügen
In diesem Abschnitt fügen Sie Ihrem Mesh Compute Engine-Instanzen basierend auf der Instanzvorlage hinzu, die Sie mit dem Skript asm_vm
erstellt haben. Das Skript generiert nur die erforderliche Konfiguration für den Dienstproxy-Agent. Wenn Sie der Instanzvorlage weitere Konfigurationen hinzufügen möchten, erstellen Sie eine Quellinstanzvorlage und fügen Sie sie dem Skript hinzu.
Führen Sie die folgenden Schritte aus, um Ihrem Mesh VMs hinzuzufügen:
Legen Sie die folgenden Umgebungsvariablen für die Verwendung in späteren Schritten fest. Legen Sie diese Variablen für jede VM-Arbeitslast fest:
- WORKLOAD_NAME ist der Name der Arbeitslast, zu der die VM gehört. Dabei muss es sich um eine DNS-1123-konforme Subdomain handeln, die aus aus alphanumerischen Zeichen in Kleinbuchstaben besteht.
- WORKLOAD_VERSION ist die Version der Arbeitslast, zu der die VM gehört. Optional.
- WORKLOAD_SERVICE_ACCOUNT ist das GCP-Dienstkonto, als das die VM ausgeführt wird.
- WORKLOAD_NAMESPACE ist der Namespace für die Arbeitslast.
- ASM_INSTANCE_TEMPLATE ist der Name der Instanzvorlage, die erstellt werden soll. Der Name der Compute Engine-Instanzvorlage lässt keine Unterstriche zu.
- SOURCE_INSTANCE_TEMPLATE ist der Vorlagenname, auf dem die generierte Vorlage basieren soll. Optional.
Erstellen Sie den Namespace für die VM-Arbeitslasten, falls noch nicht vorhanden:
kubectl create ns WORKLOAD_NAMESPACE
Versehen Sie den Namespace mit dem Label der Überarbeitung der Steuerungsebene. Ein Beispiel dafür, wie Sie die Überarbeitung der Steuerungsebene im folgenden Beispiel als REVISION ermitteln, finden Sie unter Arbeitslasten bereitstellen und wieder bereitstellen.
kubectl label ns WORKLOAD_NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Erstellen Sie die
WorkloadGroup
für die zu registrierenden VMs:kubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: WORKLOAD_NAME namespace: WORKLOAD_NAMESPACE spec: metadata: labels: app.kubernetes.io/name: WORKLOAD_NAME app.kubernetes.io/version: WORKLOAD_VERSION annotations: security.cloud.google.com/IdentityProvider: google template: serviceAccount: WORKLOAD_SERVICE_ACCOUNT EOF
Feld Beschreibung name
Der Name der Arbeitslast, zu der die VM gehört. namespace
Der Namespace, zu dem die Arbeitslast gehört. app.kubernetes.io/name
Die empfohlenen Labels für Kubernetes-Anwendungen. Sie können für Ihre VM-Arbeitslasten eigene Labels verwenden. app.kubernetes.io/version
Die empfohlenen Labels für Kubernetes-Anwendungen. Sie können für Ihre VM-Arbeitslasten eigene Labels verwenden. serviceAccount
Die von der VM und dem Projekt verwendete Dienstkontoidentität, die als Teil der Identität der Arbeitslast im SPIFFE-Format verwendet wird. Weitere Informationen finden Sie unter Dienstkonten. security.cloud.google.com/IdentityProvider
Der Identitätsanbieter, der von der VM verwendet wird und bereits in Ihrem Cluster registriert sein sollte. Für Compute Engine-VMs sollte google
festgelegt sein. Der "IdentityProvider" teilt der Steuerungsebene mit, wie die Anmeldedaten der VM authentifiziert werden und wohin das Dienstkonto der VM extrahiert werden soll.Führen Sie das Skript
asm_vm
mit den folgenden Optionen und Flags aus, um eine Instanzvorlage für Ihre Anthos Service Mesh-Compute Engine-Instanzen zu erstellen.Das Skript prüft die Voraussetzungen für Cluster, fügt VM-Labels für Anthos Service Mesh hinzu, generiert die benutzerdefinierte Metadatenkonfiguration für den Dienst-Proxy-Agent und erstellt eine neue Instanzvorlage.
Wenn Sie eine Instanzvorlage haben, auf der das Skript basieren soll, können Sie die Option
--source_instance_template
angeben. Wenn Sie Ihrem Anthos Service Mesh nicht standardmäßige VMs hinzufügen möchten, erstellen Sie eine Instanzvorlage mit der gewünschten Betriebssystemverteilung und verwenden Sie diese Vorlage als Wert für das Flag--source_instance_template
inasm_vm
. Wenn die vorhandene Instanzvorlage ein Startskript enthält, das eine Netzwerkverbindung erfordert, sollte das Skript auch bei vorübergehenden Netzwerkverbindungsproblemen stabil sein. In der Demoanwendung finden Sie ein Beispiel dafür, wie Sie Ausfallsicherheit bei temporären Netzwerkunterbrechungen hinzufügen../asm_vm create_gce_instance_template \ ASM_INSTANCE_TEMPLATE \ --project_id PROJECT_ID \ --cluster_location CLUSTER_LOCATION \ --cluster_name CLUSTER_NAME \ --workload_name WORKLOAD_NAME \ --workload_namespace WORKLOAD_NAMESPACE \ --source_instance_template SOURCE_INSTANCE_TEMPLATE
Optionen
Option Beschreibung -p|--project_id PROJECT_ID
Die Projekt-ID des Projekts, in dem der Cluster erstellt wurde. -n|--cluster_name CLUSTER_NAME
Der Name des Clusters. -l|--cluster_location CLUSTER_LOCATION
Entweder die Zone (bei Einzelzonenclustern) oder die Region (bei regionalen Clustern), in der der Cluster erstellt wurde. -w|--workload_name WORKLOAD_NAME
Der Name der Arbeitslast, die die Compute Engine-Instanzen darstellen. --workload_namespace WORKLOAD_NAMESPACE
Optional. Der Namespace der Arbeitslast. Der Standardwert ist "default". -s|--source_instance_template SOURCE_INSTANCE_TEMPLATE_NAME
Optional. Eine vorhandene Instanzvorlage, die als Basis für die Anthos Service Mesh-Compute Engine-Instanzvorlage verwendet werden soll. Wenn keine Angabe erfolgt, wird eine Instanzvorlage mit Standardwerten erstellt. Flags
Flag Beschreibung -v|--verbose
Befehle vor und nach der Ausführung ausgeben. --dry_run
Befehle ausgeben, aber nicht ausführen. --only_validate
Validierung ausführen, aber keine neue Compute Engine-Instanzvorlage erstellen. -h|--help
Zeigt eine Hilfemeldung an, in der die Optionen und Flags beschrieben werden und der Vorgang beendet wird. Legen Sie für jede von Ihnen erstellte MIG die folgenden Umgebungsvariablen fest:
- INSTANCE_GROUP_NAME ist der Name der zu erstellenden Compute Engine-Instanzgruppe.
- ASM_INSTANCE_TEMPLATE ist der Name der Instanzvorlage, die erstellt werden soll. Der Name der Compute Engine-Instanzvorlage lässt keine Unterstriche zu.
- INSTANCE_GROUP_ZONE ist die Zone der zu erstellenden Compute Engine-Instanzgruppe.
- PROJECT_ID ist die Projekt-ID des Projekts, in dem der Cluster erstellt wurde.
- SIZE ist die Größe der Instanzgruppe, die erstellt werden soll. Nachdem die Instanzgruppe erstellt wurde, kann sie geändert werden.
- WORKLOAD_NAME ist der Name der Arbeitslast, zu der die VM gehört.
- WORKLOAD_NAMESPACE ist der Namespace für die Arbeitslast.
Erstellen Sie mit den in den vorherigen Schritten erstellten Variablen eine verwaltete Instanzgruppe für die VM-Arbeitslasten:
gcloud compute instance-groups managed create \ INSTANCE_GROUP_NAME \ --template ASM_INSTANCE_TEMPLATE \ --zone=INSTANCE_GROUP_ZONE \ --project=PROJECT_ID \ --size=SIZE
Informationen zum Hoch- oder Herunterskalieren der Anzahl von Arbeitslasten in Compute Engine-Instanzen ab einer zonalen oder regionalen MIG-Größe von null finden Sie unter Autoscaling von Instanzgruppen. Weitere Informationen zum Erstellen von Gruppen finden Sie unter gcloud compute instance-groups managed create.
Beim Starten der Instanz wird sie automatisch mit der Anthos Service Mesh-Steuerungsebene im Cluster authentifiziert. Die Steuerungsebene registriert dann jede VM als
WorkloadEntry
.Wenn die VM-Instanz in der MIG den Startvorgang abgeschlossen hat, können Sie die registrierten VMs mit dem folgenden Befehl im Namespace der Arbeitslast anzeigen lassen:
kubectl get workloadentry -n WORKLOAD_NAMESPACE
Fügen Sie einen Kubernetes-Dienst hinzu, um die oben hinzugefügten VM-Arbeitslasten verfügbar zu machen. Achten Sie darauf, dass der Dienst das entsprechende Label auf der VM
WorkloadGroup
auswählt, die oben registriert ist, um das richtige Trafficrouting zu konfigurieren.Im folgenden Beispiel wird ein Kubernetes-Dienst mit dem Namen WORKLOAD_NAME im Namespace WORKLOAD_NAMESPACE erstellt, der VM-Arbeitslasten mit dem Label
app.kubernetes.io/name: WORKLOAD_NAME
unter HTTP-Port 80 verfügbar macht.kubectl apply -f - << EOF apiVersion: v1 kind: Service metadata: name: WORKLOAD_NAME namespace: WORKLOAD_NAMESPACE labels: asm_resource_type: VM spec: ports: - port: 80 name: http selector: app.kubernetes.io/name: WORKLOAD_NAME EOF
Weitere Informationen zum Erstellen eines Kubernetes-Dienstes finden Sie unter https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service.
Informationen dazu, wie Sie eine Beispielanwendung auf Ihrer VM verwenden, finden Sie unter Beispielanwendung bereitstellen.
Upgrade der Anthos Service Mesh-Steuerungsebene
Aktualisieren Sie die Anthos Service Mesh-Steuerungsebene auf eine neue Version. Folgen Sie dazu der Anleitung unter Anthos Service Mesh auf die neueste Version aktualisieren. Nach der Installation einer neuen Version der Anthos Service Mesh-Steuerungsebene stellen Sie Ihre Kubernetes-Arbeitslasten neu bereit, wie unter Arbeitslasten bereitstellen und neu bereitstellen beschrieben.
Erstellen Sie für VM-Arbeitslasten eine neue Instanzvorlage und führen Sie ein Rolling Update für die VMs in Ihrer MIG durch:
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 des Befehls sieht in etwa so aus: Beachten Sie, dass sich die Ausgabe für Migrationen geringfügig von der Ausgabe für Upgrades unterscheidet. Die folgende Beispielausgabe stammt von einer Migration.
NAME READY STATUS RESTARTS AGE LABELS istiod-7744bc8dd7-qhlss 1/1 Running 0 49m app=istiod,istio.io/rev=default,istio=pilot,pod-template-hash=7744bc8dd7 istiod-asm-198-6-85d86774f7-flrt2 1/1 Running 0 26m app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=85d86774f7 istiod-asm-198-6-85d86774f7-tcwtn 1/1 Running 0 26m app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=85d86774f7
Notieren Sie sich aus der Ausgabe in der Spalte
LABELS
den Wert desistiod
-Überarbeitungslabels für die neue Version, der auf das Präfixistio.io/rev=
folgt. In diesem Beispiel lautet der Wertasm-198-6
.Notieren Sie sich außerdem den Wert im Überarbeitungslabel der alten
istiod
-Version. Diesen Wert benötigen Sie, um die alte Version vonistiod
zu löschen, wenn Sie die Arbeitslasten in die neue Version verschoben haben. In der Beispielausgabe lautet der Wert im Überarbeitungslabel für die alteistiod
-Versiondefault
.
Fügen Sie das Überarbeitungslabel einem Namespace hinzu und entfernen Sie das
istio-injection
-Label (falls vorhanden). Geben Sie im folgenden Befehl fürREVISION
den Wert an, der der neuen Überarbeitung vonistiod
entspricht.kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
Wenn in der Ausgabe
"istio-injection not found"
angezeigt wird, können Sie dies ignorieren. Das bedeutet, dass der Namespace bisher nicht das Labelistio-injection
hatte. Da die automatische Injektion fehlschlägt, wenn ein Namespace sowohl dasistio-injection
als auch das Überarbeitungslabel enthält, enthalten allekubectl label
-Befehle in der Anthos Service Mesh-Dokumentation das Labelistio-injection
.Erstellen Sie mit dem Skript
asm_vm
eine neue Instanzvorlage. Achten Sie darauf, einen neuen Instanzvorlagennamen zu verwenden und dieselbe Quellinstanzvorlage anzugeben, wenn Sie eine für dieselbe Arbeitslast haben../asm_vm create_gce_instance_template \ NEW_ASM_INSTANCE_TEMPLATE \ --project_id PROJECT_ID \ --cluster_location CLUSTER_LOCATION \ --cluster_name CLUSTER_NAME \ --workload_name WORKLOAD_NAME \ --workload_namespace WORKLOAD_NAMESPACE \ --source_instance_template SOURCE_INSTANCE_TEMPLATE
Führen Sie ein Rolling Update für die vorhandene MIG für die Arbeitslast durch.
Weitere Informationen finden Sie unter Grundlegendes Rolling Update starten.
gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \ --version=template=NEW_ASM_INSTANCE_TEMPLATE \ --zone=INSTANCE_GROUP_ZONE
Testen Sie die VM-Arbeitslast, um zu prüfen, ob sie wie erwartet funktioniert.
Upgrade für VM-Anwendungen ausführen
Wenn Änderungen an der Anwendung vorgenommen wurden, einschließlich Änderungen an der WorkloadGroup
und/oder Änderungen an der Quellinstanzvorlage, ist eine neue Instanzvorlage erforderlich, um die MIG Ihrer VM-Arbeitslasten zu aktualisieren.
Wenn die Änderung WorkloadGroup
angewendet und/oder die neue Quellinstanzvorlage erstellt wurde, erstellen Sie eine neue Instanzvorlage für Anthos Service Mesh und führen Sie ein Rolling Update für die VMs in Ihrer MIG aus.
Erstellen Sie mit dem Skript
asm_vm
eine neue Instanzvorlage. Achten Sie darauf, einen neuen Instanzvorlagennamen zu verwenden und die neue Quellinstanzvorlage anzugeben, wenn Sie eine für Ihre Anwendungsaktualisierung erstellt haben../asm_vm create_gce_instance_template \ NEW_ASM_INSTANCE_TEMPLATE \ --project_id PROJECT_ID \ --cluster_location CLUSTER_LOCATION \ --cluster_name CLUSTER_NAME \ --workload_name WORKLOAD_NAME \ --workload_namespace WORKLOAD_NAMESPACE \ --source_instance_template NEW_SOURCE_INSTANCE_TEMPLATE
Führen Sie ein Rolling Update für die vorhandene MIG für die Arbeitslast durch. Weitere Informationen zur Verwendung des MIG-Rolling Update finden Sie unter Einfaches Rolling Update starten.
gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \ --version=template=NEW_ASM_INSTANCE_TEMPLATE \ --zone=INSTANCE_GROUP_ZONE
Testen Sie die VM-Arbeitslast, um zu prüfen, ob sie wie erwartet funktioniert.
Beispielanwendung bereitstellen
Installieren Sie die Beispielanwendung für BookInfo, um zu zeigen, dass Ihre neue Mesh-Konfiguration ordnungsgemäß funktioniert. In diesem Beispiel wird eine MySQL-Datenbank auf der VM ausgeführt und der Bewertungsdienst liest die Bewertungswerte aus der Datenbank.
BookInfo auf dem Cluster installieren
Führen Sie die folgenden Schritte aus, um die Dienste der BookInfo-Anwendung mit den in jedem Dienst eingefügten Sidecar-Proxys bereitzustellen. Die BookInfo-Anwendung wird im Namespace default
bereitgestellt.
Wechseln Sie in der Befehlszeile des Computers, auf dem Sie Anthos Service Mesh installiert haben, zum Stammverzeichnis des Anthos Service Mesh-Installationsverzeichnisses, das Sie im Schritt Skript herunterladen erstellt haben.
Verwenden Sie den folgenden Befehl, um das automatische Sidecar-Injektion zu aktivieren und das Label auf
istiod
zu finden. Dieses enthält den Wert des Überarbeitungslabels, der in späteren Schritten verwendet werden soll.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-198-6-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586 istiod-asm-198-6-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-198-6,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-198-6
.Wenden Sie das Überarbeitungslabel auf den
default
-Namespace an. Im folgenden Befehl istREVISION
der Wert des Überarbeitungslabelsistiod
, den Sie im vorherigen Schritt notiert haben.kubectl label namespace default 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 Injektion fehlschlägt, wenn ein Namespace sowohl dasistio-injection
als auch das Überarbeitungslabel enthält, enthalten allekubectl label
-Befehle in der Anthos Service Mesh-Dokumentation das Labelistio-injection
.Stellen Sie die Anwendung mit
kubectl
im Standard-Namespace bereit:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Führen Sie die folgenden Befehle aus, um zu bestätigen, dass die Anwendung fehlerfrei bereitgestellt wurde:
kubectl get services
Erwartete Ausgabe:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m
und
kubectl get pod
Erwartete Ausgabe:
NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
Definieren Sie abschließend das Ingress-Gateway-Routing für die Anwendung:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Erwartete Ausgabe:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
Prüfen Sie, ob die Produktseite zugänglich ist.
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') export GATEWAY_URL="${INGRESS_HOST}:${INGRESS_PORT}" curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"
Erwartete Ausgabe:
<title>Simple Bookstore App</title>
Compute Engine-Instanzen erstellen und MySQL installieren
In diesem Schritt erstellen Sie eine Compute Engine-Instanzvorlage für die auf der VM ausgeführte MySQL-Instanz. Weitere Informationen finden Sie unter Bookinfo mit einer virtuellen Maschine.
Erstellen Sie eine Compute Engine-Instanzvorlage, die ein Startskript enthält, um MySQL zu installieren und beim Start eine Bewertungsdatenbank hinzuzufügen. Beachten Sie, dass es bei Verwendung von CentOS bis zu 10 Minuten dauern kann, bis der Mariadb-Server bereit ist.
Debian
cat << "EOF" > init-mysql #!/bin/bash # Wait until Envoy is ready before installing mysql while true; do rt=$(curl -s 127.0.0.1:15000/ready) if [[ $? -eq 0 ]] && [[ "${rt}" -eq "LIVE" ]]; then echo "envoy is ready" break fi sleep 1 done sudo apt-get update && sudo apt-get install -y mariadb-server sudo sed -i '/bind-address/c\bind-address = 0.0.0.0' /etc/mysql/mariadb.conf.d/50-server.cnf cat <<EOD | sudo mysql # Grant access to root GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; # Grant root access to other IPs CREATE USER 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; quit EOD sudo systemctl restart mysql curl -LO https://raw.githubusercontent.com/istio/istio/release-1.9/samples/bookinfo/src/mysql/mysqldb-init.sql mysql -u root -ppassword < mysqldb-init.sql EOF gcloud compute \ --project=PROJECT_ID \ instance-templates create mysql-instance-template \ --machine-type=e2-medium \ --metadata-from-file=startup-script=init-mysql \ --image=debian-10-buster-v20201014 \ --image-project=debian-cloud \ --boot-disk-size=10GB
CentOS
cat << "EOF" > init-mysql #!/bin/bash # Wait until Envoy is ready before installing mysql while true; do rt=$(curl -s 127.0.0.1:15000/ready) if [[ $? -eq 0 ]] && [[ "${rt}" -eq "LIVE" ]]; then echo "envoy is ready" break fi sleep 1 done sudo yum update -y && sudo yum install -y mariadb-server # Wait until mysql is ready while true; do rt=$(which mysql) if [[ ! -z "${rt}" ]]; then echo "mysql is ready" break fi sleep 1 done sudo sed -i '/bind-address/c\bind-address = 0.0.0.0' /etc/my.cnf.d/mariadb-server.cnf sudo systemctl restart mariadb cat > grantaccess.sql << EOD GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; CREATE USER 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; EOD until sudo mysql < grantaccess.sql; do sleep 1 done sudo systemctl restart mariadb curl -LO https://raw.githubusercontent.com/istio/istio/release-1.9/samples/bookinfo/src/mysql/mysqldb-init.sql mysql -u root -ppassword < mysqldb-init.sql EOF gcloud compute \ --project=PROJECT_ID \ instance-templates create mysql-instance-template \ --machine-type=e2-medium \ --metadata-from-file=startup-script=init-mysql \ --image-project=centos-cloud \ --image-family=centos-8 \ --boot-disk-size=30GB
Erstellen Sie eine
WorkloadGroup
für die MySQL-Arbeitslastkubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: mysql namespace: default spec: metadata: labels: app.kubernetes.io/name: mysql annotations: security.cloud.google.com/IdentityProvider: google template: serviceAccount: WORKLOAD_SERVICE_ACCOUNT EOF
Erstellen Sie mit dem obigen VM-Skript eine neue Instanzvorlage, um die Instanzen für Ihr Mesh-Netzwerk vorzubereiten.
./asm_vm create_gce_instance_template \ asm-mysql-instance-template \ --project_id PROJECT_ID \ --cluster_location CLUSTER_LOCATION \ --cluster_name CLUSTER_NAME \ --workload_name mysql \ --source_instance_template mysql-instance-template
Erstellen Sie eine Compute Engine-MIG mit der neu erstellten Instanzvorlage.
gcloud compute instance-groups managed create mysql-instance \ --template asm-mysql-instance-template \ --zone=us-central1-c \ --project=PROJECT_ID \ --size=1
Dienste erstellen
Erstellen Sie einen Kubernetes-Dienst für den MySQL-Dienst.
Erstellen Sie mit dem folgenden Befehl einen Kubernetes-Dienst:
kubectl apply -f - << EOF apiVersion: v1 kind: Service metadata: name: mysql namespace: default labels: asm_resource_type: VM spec: ports: - name: mysql port: 3306 protocol: TCP targetPort: 3306 selector: app.kubernetes.io/name: mysql EOF
Verwenden Sie Anthos-UI-Dashboard
Klicken Sie in der Navigationsleiste links oben auf Anthos > Service Mesh, um den neu erstellten VM-basierten Dienst aufzurufen. Es wird eine Tabelle der Dienste angezeigt, die in Ihrem Mesh ausgeführt werden. Der hinzugefügte Dienst sollte in der Tabelle mit einem Type
-Wert von VM
und einigen allgemeinen Messwerten angezeigt werden. Klicken Sie auf den Dienstnamen, um die Telemetrie Ihres VM-basierten Dienstes aufzurufen. Daraufhin wird das Dashboard auf Dienstebene angezeigt.
Weitere Informationen zur Verwendung des Anthos-UI-Dashboards finden Sie unter Anthos Service Mesh in der Cloud Console kennenlernen.
Traffic zu den VM-Arbeitslasten verwalten
Sie können die Netzwerkregeln ändern, um den ein- und ausgehenden Traffic der VM(s) zu steuern.
Traffic zu einem neuen Bewertungsdienst steuern (Pod zu VM)
Erstellen Sie einen weiteren Bewertungsdienst in BookInfo, der die oben erstellte MySQL-Instanz als Datenquelle verwendet, und geben Sie eine Routingregel an, die den Rezensionsdienst zur Verwendung des neuen Bewertungsdienstes zwingt.
Erstellen Sie einen neuen Bewertungsdienst für die MySQL-Instanz.
kubectl apply -f - << EOF apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v2-mysql-vm labels: app: ratings version: v2-mysql-vm spec: replicas: 1 selector: matchLabels: app: ratings version: v2-mysql-vm template: metadata: labels: app: ratings version: v2-mysql-vm spec: serviceAccountName: bookinfo-ratings containers: - name: ratings image: docker.io/istio/examples-bookinfo-ratings-v2:1.16.2 imagePullPolicy: IfNotPresent env: - name: DB_TYPE value: "mysql" - name: MYSQL_DB_HOST value: mysql.default.svc.cluster.local - name: MYSQL_DB_PORT value: "3306" - name: MYSQL_DB_USER value: root - name: MYSQL_DB_PASSWORD value: password ports: - containerPort: 9080 EOF
Erstellen Sie eine Routingregel.
kubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v3 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - route: - destination: host: ratings subset: v2-mysql-vm EOF
Wenden Sie die Zielregeln für die erstellten Dienste an.
kubectl apply -f - << EOF apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: reviews spec: host: reviews subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v3 labels: version: v3 --- apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: ratings spec: host: ratings subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v2-mysql labels: version: v2-mysql - name: v2-mysql-vm labels: version: v2-mysql-vm EOF
Anwendungsbereitstellung validieren
Zum Prüfen, ob die BookInfo-Anwendung funktioniert, müssen Sie Traffic an das Ingress-Gateway senden.
Wenn Sie Anthos Service Mesh in GKE installiert haben, rufen Sie die externe IP-Adresse des Ingress-Gateways ab, die Sie in den vorherigen Schritten erstellt haben:
kubectl get svc istio-ingressgateway -n istio-system
Ausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
In diesem Beispiel lautet die IP-Adresse des Ingress-Dienstes
35.239.7.64
.
Anwendung testen
Prüfen Sie, ob die BookInfo-Anwendung mit
curl
ausgeführt wird:curl -I http://EXTERNAL_IP/productpage
Wenn in der Antwort
200
angezeigt wird, bedeutet dies, dass die Anwendung fehlerfrei mit Anthos Service Mesh funktioniert.Geben Sie die folgende Adresse in Ihren Browser ein, um die BookInfo-Webseite aufzurufen:
http://EXTERNAL_IP/productpage
Prüfen Sie auf der Startseite der BookInfo-Anwendung, dass fünf Sterne von
Reviewer1
und vier Sternen vonReviewer2
angezeigt werden.
Sicherheit auf VM-Arbeitslasten erzwingen
Das Erzwingen der Sicherheit auf den VM-Arbeitslasten ist das gleiche, wie das Erzwingen der Sicherheit auf den Kubernetes-Arbeitslasten. Weitere Informationen finden Sie unter Istio-Sicherheit.
Nachdem Sie die vorherigen Schritte abgeschlossen haben, verfügt Ihre Compute Engine-VM über ein von Google ausgestelltes Arbeitslastzertifikat. Der Wert SubjectAlternativeName
im Zertifikat zeigt die Anthos Workload Identity der VM im Format spiffe://<workload_identity_pool>/ns/WORKLOAD_NAMESPACE/sa/WORKLOAD_SERVICE_ACCOUNT
an.
Weitere Informationen finden Sie unter Workload Identity-Pool.
Strikten mTLS-Modus für das Mesh-Netzwerk aktivieren
Wenden Sie die folgende YAML-Datei an, um im gesamten Mesh-Netzwerk den strikten mTLS-Modus zu erzwingen.
kubectl apply -f - << EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
EOF
Autorisierung für Dienst-zu-Dienst-Traffic
Verwenden Sie AuthorizationPolicy, um den Zugriff zwischen den Anwendungen auf Ihrer Compute Engine-VM und anderen Mesh-Arbeitslasten (z. B. im GKE-Cluster) zu steuern.
Beispiel: Kubernetes-Arbeitslasten den Zugriff auf Compute Engine-VMs verweigern
Mit der folgenden Autorisierungsrichtlinie wird einer Kubernetes-Arbeitslast ratings
verweigert, um auf Compute Engine-VM-Arbeitslasten zuzugreifen, die den MySQL-Server ratings
verarbeiten.
kubectl apply -f - << EOF
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: mysql-deny
namespace: default
spec:
selector:
matchLabels:
app.kubernetes.io/name: mysql
action: DENY
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/bookinfo-ratings"]
EOF
Nachdem Sie das Beispiel AuthorizationPolicy
angewendet haben, sollte auf der Produktseite im Bereich "Buchrezensionen" die Fehlermeldung Ratings service
is currently unavailable
angezeigt werden.
Cloud Monitoring-Agent installieren
Sie können den Cloud Monitoring-Agent installieren, um System- und Anwendungsmesswerte aus Ihren VM-Instanzen zu erfassen und zu überwachen. So können Sie wichtige Messwerte überwachen, z. B. die CPU- und Speicherauslastung des Agents.
Weitere Informationen finden Sie in der Dokumentation zum Cloud Monitoring-Agent.
Fehlerbehebung
Tipps zur Fehlerbehebung finden Sie unter Fehlerbehebung beim VM-Support.