In dieser Anleitung wird beschrieben, wie Sie Identity-Aware Proxy (IAP) in Anthos Service Mesh einbinden. Mit der IAP-Einbindung in Anthos Service Mesh können Sie sicher auf Dienste zugreifen, die auf den BeyondCorp-Prinzipien von Google beruhen. IAP überprüft die Nutzeridentität und den Kontext der Anfrage, um festzustellen, ob ein Nutzer Zugriff auf eine Anwendung oder eine Ressource erhält. Die IAP-Integration in Anthos Service Mesh bietet folgende Vorteile:
Vollständige Steuerung des kontextsensitiven Zugriffs auf die Arbeitslasten, die in Anthos Service Mesh ausgeführt werden. Sie können detaillierte Zugriffsrichtlinien anhand von Attributen der ursprünglichen Anfrage festlegen, z. B. Nutzeridentität, IP-Adresse und Gerätetyp. Sie können Ihre Zugriffsrichtlinien mit Einschränkungen kombinieren, die auf dem Hostnamen und Pfad einer Anfrage-URL beruhen.
Aktivieren Sie die Unterstützung für kontextsensitive Anforderungen in der Anthos Service Mesh-Autorisierung.
Skalierbarer, sicherer und hochverfügbarer Zugriff auf Ihre Anwendung über einen Google Cloud-Load-Balancer. Das leistungsfähige Load-Balancing bietet einen integrierten Schutz vor DDoS-Angriffen (Distributed Denial-of-Service) und Unterstützung für eine globale Anycast-IP-Adressierung.
Lernziele
- Richten Sie das Gerät ein:
- Richten Sie Ihr Google Cloud-Projekt ein, um die Berechtigungen zu gewähren und die für IAP erforderlichen Google APIs zu aktivieren.
- Reservieren Sie eine externe statische IP-Adresse und konfigurieren Sie einen Domainnamen für die Verwendung der IP-Adresse, die der Load-Balancer benötigt.
- Richten Sie einen neuen GKE-Cluster (Google Kubernetes Engine) mit den für die Einbindung von IAP in Anthos Service Mesh erforderlichen Optionen ein.
- Installieren Sie Anthos Service Mesh mit den für die Einbindung erforderlichen Optionen.
- Beispielanwendung bereitstellen
- Stellen Sie den Load-Balancer bereit:
Aktivieren Sie IAP.
RCToken-Unterstützung im Service Mesh aktivieren
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
Voraussetzungen
Sie benötigen eine Anthos-Testlizenz oder ein Anthos-Abo. Weitere Informationen finden Sie in der Preisübersicht zu Anthos.
Ihr GKE-Cluster muss die folgenden Anforderungen erfüllen:
- Mindestens vier Knoten.
- Der minimale Maschinentyp ist
e2-standard-4
und enthält vier vCPUs. - Verwenden Sie eine Release-Version anstelle einer statischen Version von GKE.
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.Wenn Sie Anthos Service Mesh auf einem privaten Cluster installieren, müssen Sie eine Firewallregel zum Öffnen von Port 15017 hinzufügen, um die automatische Sidecar-Injektion zu verwenden. Wenn Sie die Firewallregel nicht hinzufügen und die automatische Sidecar-Injektion aktiviert ist, erhalten Sie beim Bereitstellen von Arbeitslasten eine Fehlermeldung. Weitere Informationen zum Hinzufügen einer Firewallregel finden Sie unter Firewallregeln für bestimmte Anwendungsfälle hinzufügen.
Wenn Sie in Ihrer Organisation einen Dienstperimeter erstellt haben, müssen Sie möglicherweise den Mesh CA-Dienst dem Perimeter hinzufügen. Weitere Informationen finden Sie unter Mesh CA einem Dienstperimeter hinzufügen.
Umgebung einrichten
Bei Installationen in Google Kubernetes Engine können Sie den Installationsanleitungen mit Cloud Shell, einer browserinternen Befehlszeile zu Ihren Google Cloud-Ressourcen oder auf Ihrem Computer mit Linux oder macOS folgen.
Option A: Cloud Shell verwenden
Cloud Shell stellt eine g1-small Compute Engine-VM bereit, auf der ein Debian-basiertes Linux-Betriebssystem ausgeführt wird. Cloud Shell bietet folgende Vorteile:
Cloud Shell enthält die benötigten Befehlszeilentools
gcloud
,kubectl
undhelm
.Ihr $HOME-Verzeichnis in Cloud Shell verfügt über 5 GB nichtflüchtigen Speicher.
Es stehen verschiedene Texteditoren zur Auswahl:
Code-Editor, auf den Sie zugreifen, indem Sie oben im Cloud Shell-Fenster auf klicken.
Emacs, Vim oder Nano, auf die Sie in Cloud Shell über die Befehlszeile zugreifen.
So verwenden Sie Cloud Shell:
- Öffnen Sie die Google Cloud Console.
- Wählen Sie Ihr Google Cloud-Projekt aus.
Klicken Sie im oberen Bereich des Google Cloud Console-Fensters auf Cloud Shell aktivieren.
Im unteren Bereich der Google Cloud Console wird ein neues Feld mit einer Cloud Shell-Sitzung und einer Befehlszeilen-Eingabeaufforderung geöffnet.
Aktualisieren Sie die Komponenten:
gcloud components update
Der Befehl meldet eine Ausgabe, die in etwa so aussieht:
ERROR: (gcloud.components.update) You cannot perform this action because the gcloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation: sudo apt-get update && sudo apt-get --only-upgrade install ...
Kopieren Sie den langen Befehl und fügen Sie ihn ein, um die Komponenten zu aktualisieren.
Installieren Sie
kubectl
:sudo apt-get install kubectl
Installieren Sie
kpt
:sudo apt-get install google-cloud-sdk-kpt
Option B: Befehlszeilentools lokal verwenden
Installieren und initialisieren Sie die gcloud CLI auf Ihrem lokalen Rechner.
Authentifizieren Sie sich mit Google Cloud-CLI:
gcloud auth login
Aktualisieren Sie die Komponenten:
gcloud components update
Installieren Sie
kubectl
:gcloud components install kubectl
Installieren Sie
kpt
:gcloud components install kpt
Projekt einrichten
-
Rufen Sie die Projekt-ID des Projekts ab, in dem der Cluster erstellt wird:
gcloud
gcloud projects list
Console
- Rufen Sie in der Google Cloud Console die Seite Dashboard auf:
-
Klicken Sie oben auf der Seite auf die Drop-down-Liste Auswählen aus. Wählen Sie im angezeigten Fenster Auswählen aus Ihr Projekt aus.
Die Projekt-ID wird auf der Dashboard-Karte Projektinformationen des Projekts angezeigt.
- Erstellen Sie eine Umgebungsvariable für die Projekt-ID:
export PROJECT_ID=YOUR_PROJECT_ID
-
Legen Sie die Standardprojekt-ID für das
gcloud
-Befehlszeilentool fest:gcloud config set project ${PROJECT_ID}
- Erstellen Sie eine Umgebungsvariable für die Projektnummer:
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
-
Legen Sie die erforderlichen IAM-Rollen (Identitäts- und Zugriffsverwaltung) fest. Wenn Sie ein Projektinhaber sind, haben Sie alle erforderlichen Berechtigungen, um die Installation abzuschließen und Ihren Cluster in Ihrer Umgebung zu registrieren.
Wenn Sie kein Projektinhaber sind, benötigen Sie jemanden, der Ihnen die folgenden spezifischen IAM-Rollen zuweisen kann. Ändern Sie im folgenden Befehl
GCP_EMAIL_ADDRESS
in das Konto, mit dem Sie sich bei Google Cloud anmelden.gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member user:GCP_EMAIL_ADDRESS \ --role=roles/editor \ --role=roles/compute.admin \ --role=roles/container.admin \ --role=roles/resourcemanager.projectIamAdmin \ --role=roles/iam.serviceAccountAdmin \ --role=roles/iam.serviceAccountKeyAdmin \ --role=roles/gkehub.admin
Weitere Informationen zum Zuweisen von IAM-Rollen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen. Eine Beschreibung dieser Rollen finden Sie unter Erforderliche Berechtigungen für die Installation von Anthos Service Mesh.
- Aktivieren Sie folgende APIs:
gcloud services enable \ container.googleapis.com \ compute.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ cloudtrace.googleapis.com \ meshca.googleapis.com \ meshtelemetry.googleapis.com \ meshconfig.googleapis.com \ iamcredentials.googleapis.com \ anthos.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ cloudresourcemanager.googleapis.com \ iap.googleapis.com
Die Aktivierung der APIs kann einige Minuten dauern. Wenn die APIs aktiviert sind, sieht die Ausgabe in etwa so aus:
Operation "operations/acf.601db672-88e6-4f98-8ceb-aa3b5725533c" finished successfully.
Statische IP-Adresse reservieren und DNS konfigurieren
Für die Integration von Identity-Aware Proxy in Anthos Service Mesh müssen Sie einen Google Cloud HTTP(S)-Load-Balancer einrichten. Dafür ist ein Domainname erforderlich, der auf eine statische IP-Adresse verweist. Sie können eine statische externe IP-Adresse reservieren, die Ihrem Projekt die Adresse unbegrenzt zuweist, bis Sie sie explizit freigeben.
Reservieren Sie eine statische externe IP-Adresse:
gcloud compute addresses create example-static-ip --global
Rufen Sie die statische IP-Adresse ab:
gcloud compute addresses describe example-static-ip --global
Konfigurieren Sie in Ihrem Domainnamenregistrator einen voll qualifizierten Domainnamen (FQDN) mit der statischen IP-Adresse. In der Regel fügen Sie den DNS-Einstellungen den Eintrag
A
hinzu. Die Konfigurationsschritte und die Terminologie zum Hinzufügen einesA
-Eintrags für einen FQDN variieren je nach Domainnamenregistrator.Legen Sie den Domainnamen in einer Umgebungsvariablen fest:
export DOMAIN_NAME=YOUR_DOMAIN_NAME
Es kann 24 bis 48 Stunden dauern, bis die DNS-Einstellung weitergeleitet wird. Sie können weiterhin alles in dieser Anleitung einrichten, aber Sie können die Einrichtung erst testen, wenn die DNS-Einstellungen weitergeleitet wurden.
Neuen GKE-Cluster einrichten
So richten Sie einen neuen Cluster ein:
Wählen Sie eine Zone, einen Maschinentyp und eine Release-Version für den neuen Cluster aus. Der von Anthos Service Mesh benötigte Maschinentyp ist mindestens n1-standard-4. Sie können eine beliebige Option für die Release-Version verwenden.
So rufen Sie eine Liste der verfügbaren GCP-Zonen ab:
gcloud compute zones list
So rufen Sie eine Liste der Maschinentypen ab:
gcloud compute machine-types list | more
Erstellen Sie die folgenden Umgebungsvariablen:
Legen Sie den Clusternamen fest:
export CLUSTER_NAME=YOUR_CLUSTER_NAME
Der Clustername darf nur kleingeschriebene, alphanumerische Zeichen und "-" enthalten und muss mit einem Buchstaben beginnen und mit einem alphanumerischen Zeichen enden. Er darf nicht länger als 40 Zeichen sein.
Legen Sie
CLUSTER_LOCATION
auf Ihre Clusterzone fest:export CLUSTER_LOCATION=YOUR_ZONE
Legen Sie den Arbeitslastpool fest:
export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
Legen Sie die Mesh-ID fest:
export MESH_ID="proj-${PROJECT_NUMBER}"
Erstellen Sie den Cluster mit den von Anthos Service Mesh benötigten Optionen. Mit dem folgenden Befehl wird ein Cluster mit vier Knoten des Maschinentyps n1-standard-4 erstellt, der vier vCPUs hat. Dies sind der minimale Maschinentyp und die Anzahl der Knoten, die für Anthos Service Mesh erforderlich sind. Sie können einen anderen Maschinentyp angeben, solange er mindestens 4 vCPUs hat. Die Anzahl der Knoten kann entsprechend Ihren Systemanforderungen erhöht werden.
gcloud beta container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --zone=${CLUSTER_LOCATION} \ --machine-type=n1-standard-4 \ --num-nodes=4 \ --workload-pool=${WORKLOAD_POOL} \ --enable-stackdriver-kubernetes \ --subnetwork=default \ --labels mesh_id=${MESH_ID} \ --addons=HttpLoadBalancing \ --release-channel=regular
Der Befehl
clusters create
umfasst Folgendes:workload-pool=${WORKLOAD_POOL}
: Aktiviert Workload Identity. Dies ist die empfohlene Methode für den sicheren Zugriff auf Google Cloud-Dienste aus GKE-Anwendungen.enable-stackdriver-kubernetes
: Aktiviert Cloud Monitoring und Cloud Logging in GKE.subnetwork=default
: Erstellt ein standardmäßiges Subnetzwerk.labels mesh_id=${MESH_ID}
: Legt das Labelmesh_id
auf dem Cluster fest. Dies ist erforderlich, damit Messwerte auf dem Anthos Service Mesh-Dashboard in der Google Cloud Console angezeigt werden.Das
HttpLoadBalancing
-Add-on aktiviert einen HTTP (L7)-Load-Balancing-Controller für den Cluster.release-channel regular
: Meldet den Cluster in der Release-Versionregular
an. Sie können jedochstable
auswählen, wenn Sie eine höhere Stabilität benötigen, oderrapid
, wenn Sie neue (nicht unterstützte) GKE-Features testen möchten.
Anmeldedaten und Berechtigungen festlegen
- Initialisieren Sie Ihr Projekt, um es für die Installation vorzubereiten. Mit diesem Befehl wird unter anderem ein Dienstkonto erstellt, mit dem Istio-Komponenten wie der Sidecar-Proxy sicher auf die Daten und Ressourcen Ihres Projekts zugreifen können:
curl --request POST \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --data '' \ https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize
Der Befehl gibt ein Paar leere geschweifte Klammern zurück:
{}
Wenn Sie in Zukunft eine neue Version von Anthos Service Mesh auf diesem Cluster installieren, müssen Sie den Befehl nicht noch einmal ausführen. Die weitere Ausführung des Befehls hat jedoch keine Auswirkungen auf die Installation.
-
Rufen Sie
Anmeldedaten für die Authentifizierung ab, um mit dem Cluster zu interagieren:
gcloud container clusters get-credentials ${CLUSTER_NAME}
-
Gewähren Sie dem aktuellen Nutzer Cluster-Administratorberechtigungen. 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="$(gcloud config get-value core/account)"
Wenn der Fehler
"cluster-admin-binding" already exists
angezeigt wird, können Sie ihn ignorieren und mit der vorhandenen Cluster-Administratorbindung fortfahren.
Cluster registrieren
Sie müssen den Cluster in der Flotte des Projekts registrieren, um Zugriff auf die einheitliche Benutzeroberfläche in der Google Cloud Console zu erhalten. Eine Flotte ermöglicht die einheitliche Anzeige und Verwaltung der Cluster und ihrer Arbeitslasten, einschließlich Clustern außerhalb von Google Cloud.
Google Cloud-Dienstkonto und -Schlüsseldatei erstellen
Zum Registrieren eines Clusters ist eine JSON-Datei mit den Dienstkonto-Anmeldedaten erforderlich. Um das Prinzip der geringsten Berechtigung anzuwenden, empfehlen wir, dass Sie für jeden registrierten Cluster ein eigenes Dienstkonto erstellen.
So erstellen Sie ein Dienstkonto und eine Schlüsseldatei:
Wählen Sie einen Namen für das Dienstkonto aus und erstellen Sie eine Umgebungsvariable dafür:
export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
Listen Sie alle Dienstkonten eines Projekts auf, um zu prüfen, ob das Dienstkonto erstellt wurde:
gcloud iam service-accounts list
Weisen Sie dem Dienstkonto die IAM-Rolle „gkehub.connect“ zu:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/gkehub.connect"
Erstellen Sie eine Umgebungsvariable für den lokalen Dateipfad, unter dem Sie die JSON-Datei speichern möchten. Es empfiehlt sich, die Datei nach dem Namen des Dienstkontos und Ihrer Projekt-ID zu benennen. Beispiel:
/tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json
.export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
Laden Sie die JSON-Datei des Dienstkontos mit dem privaten Schlüssel herunter:
gcloud iam service-accounts keys create ${SERVICE_ACCOUNT_KEY_PATH} \ --iam-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Cluster registrieren
Ersetzen Sie im folgenden Befehl MEMBERSHIP_NAME
durch einen Namen, der sich eindeutig auf den im Hub registrierten Cluster bezieht.
gcloud container hub memberships register MEMBERSHIP_NAME \ --gke-cluster=${CLUSTER_LOCATION}/${CLUSTER_NAME} \ --service-account-key-file=${SERVICE_ACCOUNT_KEY_PATH}
Der Befehl meldet eine Ausgabe, die in etwa so aussieht:
kubeconfig entry generated for CLUSTER_NAME. Waiting for membership to be created...done. Created a new membership [projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME] for the cluster [MEMBERSHIP_NAME] Generating the Connect Agent manifest... Deploying the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]... Deployed the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]. Finished registering the cluster [MEMBERSHIP_NAME] with the Hub.
Dieser Dienstkontoschlüssel wird als Secret mit dem Namen creds-gcp
im Namespace gke-connect
gespeichert.
Weitere Informationen zur Clusterregistrierung finden Sie unter Cluster registrieren in der Connect-Dokumentation.
Installationsdatei herunterladen
Bevor Sie fortfahren, prüfen Sie, ob das ASM Mesh Data Plane-Dienstkonto Mitglied des Projekts ist:
gcloud projects get-iam-policy ${PROJECT_ID} | grep -B 1 'roles/meshdataplane.serviceAgent'
Wenn mit dem vorherigen Befehl nichts ausgegeben wird, kehren Sie zum Abschnitt Anmeldedaten und Berechtigungen festlegen zurück und führen Sie den Befehl curl
aus.
-
Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.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.5.10-asm.2-linux.tar.gz.1.sig openssl dgst -verify - -signature istio-1.5.10-asm.2-linux.tar.gz.1.sig istio-1.5.10-asm.2-linux.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.5.10-asm.2-linux.tar.gz
Mit dem Befehl wird ein Installationsverzeichnis im aktuellen Arbeitsverzeichnis
istio-1.5.10-asm.2
erstellt, das Folgendes enthält:- Beispielanwendungen in
samples
- Die folgenden Tools im Verzeichnis
bin
:istioctl
: Sie verwendenistioctl
, um Anthos Service Mesh zu installieren.asmctl
: Sie verwendenasmctl
, um Ihre Sicherheitskonfiguration nach der Installation von Anthos Service Mesh zu validieren. (asmctl
wird derzeit nicht in Anthos-Cluster auf VMware unterstützt.)
- Beispielanwendungen in
-
Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-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.5.10-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.5.10-asm.2-osx.tar.gz.1.sig istio-1.5.10-asm.2-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.5.10-asm.2-osx.tar.gz
Mit dem Befehl wird ein Installationsverzeichnis im aktuellen Arbeitsverzeichnis
istio-1.5.10-asm.2
erstellt, das Folgendes enthält:- Beispielanwendungen in
samples
- Die folgenden Tools im Verzeichnis
bin
:istioctl
: Sie verwendenistioctl
, um Anthos Service Mesh zu installieren.asmctl
: Sie verwendenasmctl
, um Ihre Sicherheitskonfiguration nach der Installation von Anthos Service Mesh zu validieren. (asmctl
wird derzeit nicht in Anthos-Cluster auf VMware unterstützt.)
- Beispielanwendungen in
-
Laden Sie die Anthos Service Mesh-Installationsdatei in Ihr aktuelles Arbeitsverzeichnis herunter:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-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.5.10-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.5.10-asm.2-win.zip.1.sig istio-1.5.10-asm.2-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.5.10-asm.2-win.zip
Mit dem Befehl wird ein Installationsverzeichnis im aktuellen Arbeitsverzeichnis
istio-1.5.10-asm.2
erstellt, das Folgendes enthält:- Beispielanwendungen in
samples
- Die folgenden Tools im Verzeichnis
bin
:istioctl
: Sie verwendenistioctl
, um Anthos Service Mesh zu installieren.asmctl
: Sie verwendenasmctl
, um Ihre Sicherheitskonfiguration nach der Installation von Anthos Service Mesh zu validieren. (asmctl
wird derzeit nicht auf Anthos-Cluster in VMware unterstützt.)
- Beispielanwendungen in
-
Prüfen Sie, ob Sie sich im Stammverzeichnis der Anthos Service Mesh-Installation befinden.
cd istio-1.5.10-asm.2
-
Fügen Sie die Tools der Einfachheit halber im Verzeichnis
/bin
Ihrem PATH hinzu.export PATH=$PWD/bin:$PATH
Linux
macOS
Windows
Ressourcenkonfigurationsdateien vorbereiten
Wenn Sie den istioctl apply command
ausführen, um Anthos Service Mesh zu installieren, geben Sie -f istio-operator.yaml
in der Befehlszeile an. Diese Datei enthält Informationen zu Ihrem Projekt und Cluster, die zum Aktivieren der Mesh-Telemetrie- und Mesh-Sicherheitsfunktionen erforderlich sind. Laden Sie die Datei istio-operator.yaml
und andere Ressourcenkonfigurationsdateien herunter und legen Sie die Projekt- und Clusterinformationen fest.
So bereiten Sie die Ressourcenkonfigurationsdateien vor:
Installieren Sie
kpt
, falls noch nicht geschehen:gcloud components install kpt
Erstellen Sie optional ein neues Verzeichnis für die Ressourcenkonfigurationsdateien des Anthos Service Mesh-Pakets. Wenn Sie mehrere Cluster einrichten möchten, ist es möglicherweise sinnvoll, den Clusternamen als Verzeichnisnamen zu verwenden.
Wechseln Sie zu dem Verzeichnis, in das Sie das Anthos Service Mesh-Paket herunterladen möchten.
Laden Sie das Anthos Service Mesh-Paket in das aktuelle Arbeitsverzeichnis herunter:
kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm .
Legen Sie den Clusternamen fest:
kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
Optional können Sie die Ressourcenkonfigurationsdateien mithilfe der
kpt
-Setter anpassen. Diese Setter verwenden standardmäßig die Standardwerte fürgcloud config
. Wenn Sie die Standardwerte fürgcloud config
festlegen oder die Werte ändern möchten, führen Sie die folgenden Setter aus:Legen Sie die Projekt-ID fest:
kpt cfg set asm gcloud.core.project ${PROJECT_ID}
Legen Sie die Standardzone oder -region fest:
kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
Optional können Sie die Ressourcenkonfigurationsdateien in Ihr eigenes Versionsverwaltungssystem wie Cloud Source Repositories einchecken, damit Sie Änderungen an den Dateien verfolgen können.
Anthos Service Mesh installieren
Installieren Sie Anthos Service Mesh und legen Sie die Optionen zur Einbindung von Anthos Service Mesh in IAP fest.
PERMISSIVE-mTLS
istioctl manifest apply --set profile=asm \ -f asm/cluster/istio-operator.yaml \ --set values.gateways.istio-ingressgateway.type=NodePort
STRICT-mTLS
istioctl manifest apply --set profile=asm \ -f asm/cluster/istio-operator.yaml \ --set values.gateways.istio-ingressgateway.type=NodePort \ --set values.global.mtls.enabled=true
Sie geben NodePort
für istio-ingressgateway
an, wodurch {[mesh_name]} konfiguriert wird, um einen bestimmten Port im Service Mesh zu öffnen. Dadurch können Sie einen Load-Balancer einrichten, der den an Ihren Domainnamen gesendeten Traffic an diesen Port weiterleitet. Mit den anderen Optionen wird die Anthos Service Mesh-Zertifizierungsstelle (Mesh CA) aktiviert.
Installation prüfen
Wir empfehlen die Verwendung des Analysetools asmctl
, um die grundlegende Konfiguration Ihres Projekts, Ihres Clusters und Ihrer Arbeitslasten zu prüfen. Wenn ein asmctl
-Test fehlschlägt, empfiehlt asmctl
Lösungen, sofern möglich. Mit dem Befehl asmctl validate
werden einfache Tests durchgeführt, mit denen Folgendes geprüft wird:
- Die von Anthos Service Mesh benötigten APIs sind für das Projekt aktiviert.
- Das Istio-Ingress-Gateway ist ordnungsgemäß für den Aufruf von Mesh CA konfiguriert.
- Der allgemeine Zustand von Istiod und Istio-Ingressgateway.
Wenn Sie den Befehl asmctl validate
mit dem optionalen Flag --with-testing-workloads
zusätzlich zu den grundlegenden Tests ausführen, führt asmctl
die Sicherheitstests aus, die Folgendes prüfen:
- Die gegenseitige TLS-Kommunikation (mTLS) ist richtig konfiguriert.
- Die Mesh CA kann Zertifikate ausstellen.
Zum Ausführen der Sicherheitstests stellt asmctl
Arbeitslasten in Ihrem Cluster in einem Test-Namespace bereit, führt die mTLS-Kommunikationstests aus, gibt die Ergebnisse aus und löscht den Test-Namespace.
So führen Sie asmctl
aus:
Achten Sie darauf, dass gcloud-Standardanmeldedaten für Anwendungen festgelegt ist:
gcloud auth application-default login
Rufen Sie, falls noch nicht geschehen, Authentifizierungsdaten für die Interaktion mit dem Cluster ab:
gcloud container clusters get-credentials ${CLUSTER_NAME}
So führen Sie sowohl die grundlegenden als auch die Sicherheitstests durch (sofern die
istio-1.5.10-asm.2/bin
) imPATH
enthalten ist):asmctl validate --with-testing-workloads
Bei Erfolg meldet der Befehl eine Ausgabe, die in etwa so aussieht:
[asmctl version 0.3.0] Using Kubernetes context: example-project_us-central1-example-cluster To change the context, use the --context flag Validating enabled APIs OK Validating ingressgateway configuration OK Validating istio system OK Validating sample traffic Launching example services... Sent traffic to example service http code: 200 verified mTLS configuration OK Validating issued certs OK
Beispielanwendung bereitstellen
Bevor Sie IAP aktivieren, müssen Sie eine Anwendung in Ihrem GKE-Cluster ausführen, damit Sie prüfen können, ob alle Anfragen eine Identität haben. In dieser Anleitung wird anhand des Bookinfo-Beispiels gezeigt, wie Sie den HTTP(S)-Load-Balancer einrichten und IAP aktivieren.
Anwendungsdienste starten
Wechseln Sie in das Stammverzeichnis der Anthos Service Mesh-Installation.
Kennzeichnen Sie den Namespace
default
zur Verwendung der automatischen Sidecar-Injektion:kubectl label namespace default istio-injection=enabled
Stellen Sie die Anwendung bereit:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Prüfen Sie, ob alle
bookinfo
-Dienste ausgeführt werden:kubectl get services
Die erwartete Ausgabe sieht in etwa so aus:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31
9080/TCP 6m kubernetes 10.0.0.1 443/TCP 7d productpage 10.0.0.120 9080/TCP 6m ratings 10.0.0.15 9080/TCP 6m reviews 10.0.0.170 9080/TCP 6m Prüfen Sie, ob alle Pods ausgeführt werden:
kubectl get pods
Die erwartete Ausgabe sieht in etwa so aus:
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
Prüfen Sie, ob die Anwendung „Bookinfo“ ausgeführt wird:
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
Erwartete Ausgabe:
<title>Simple Bookstore App</title>
Definieren Sie das Ingress-Gateway und den virtuellen Dienst für die Anwendung:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Prüfen Sie, ob das Gateway erstellt wurde:
kubectl get gateway
Die erwartete Ausgabe sieht in etwa so aus:
NAME AGE bookinfo-gateway 32s
Externe Anfragen
Die Gateway-Ressource von Bookinfo (definiert in samples/bookinfo/networking/bookinfo-gateway.yaml
) verwendet das vorkonfigurierte istio-ingressgateway
.
Denken Sie daran, dass Sie bei der Bereitstellung von Anthos Service Mesh NodePort
für das istio-ingressgateway
angegeben haben, wodurch ein bestimmter Port im Service Mesh geöffnet wird. Die Bookinfo-Anwendung ist nur außerhalb Ihres GKE-Clusters (z. B. über einen Browser) zugänglich, bis Sie den Load-Balancer eingerichtet haben. Obwohl die Knoten in Ihrem Cluster externe IP-Adressen haben, werden Anfragen von außerhalb des Clusters durch Google Cloud-Firewallregeln blockiert. Mit IAP erfolgt die ordnungsgemäße Bereitstellung dieser Anwendung im öffentlichen Internet über einen Load-Balancer. Stellen Sie die Knotenadressen nicht mit Firewallregeln bereit. Dies würde IAP umgehen.
Zum Weiterleiten von Anfragen an Bookinfo richten Sie in Ihrem Google Cloud-Projekt einen HTTP(S)-Load-Balancer ein. Da der Load-Balancer in Ihrem Projekt ist, befindet er sich innerhalb der Firewall und kann auf die Knoten in Ihrem Cluster zugreifen. Nachdem Sie den Load-Balancer mit der statischen IP-Adresse und Ihrem Domainnamen konfiguriert haben, können Sie Anfragen an den Domainnamen senden. Der Load-Balancer leitet dann die Anfragen an die Knoten im Cluster weiter.
Load-Balancer bereitstellen
Sie können eine Ingress-Ressource verwenden, um einen HTTP(S)-Load-Balancer mit automatisch konfigurierten SSL-Zertifikaten zu erstellen. Von Google verwaltete SSL-Zertifikate werden für Ihre Domain bereitgestellt, verlängert und verwaltet.
Erstellen Sie eine ManagedCertificate-Ressource. Diese Ressource gibt die Domain für das SSL-Zertifikat an. Die Liste
spec.domains
darf nur eine Domain enthalten. Domains mit Platzhaltern werden nicht unterstützt.cat <<EOF | kubectl apply -f - apiVersion: networking.gke.io/v1beta1 kind: ManagedCertificate metadata: name: example-certificate namespace: istio-system spec: domains: - ${DOMAIN_NAME} EOF
Erstellen Sie den Load-Balancer, indem Sie die Ingress-Ressource definieren.
Geben Sie für die Annotation
networking.gke.io/managed-certificates
den Namen des im vorherigen Schritt erstellten Zertifikats an (example-certificate
).Geben Sie für die Annotation
kubernetes.io/ingress.global-static-ip-name
den Namen der von Ihnen reservierten statischen IP-Adresse an (example-static-ip
).Legen Sie den
serviceName
aufistio-ingressgateway
fest. Dieser wird in der Gateway-Ressource für das Bookinfo-Beispiel verwendet.
cat <<EOF | kubectl create -f - apiVersion: extensions/v1beta1 kind: Ingress metadata: name: example-ingress namespace: istio-system annotations: kubernetes.io/ingress.global-static-ip-name: example-static-ip networking.gke.io/managed-certificates: example-certificate spec: backend: serviceName: istio-ingressgateway servicePort: 80 EOF
Rufen Sie in der Cloud Console die Seite Kubernetes Engine > Dienste und Ingress auf:
Zur Seite "Dienste und Ingress"
In der Spalte Status sollte eine Meldung über die Erstellung von Ingress angezeigt werden. Warten Sie, bis GKE das Ingress vollständig bereitgestellt hat, bevor Sie fortfahren. Aktualisieren Sie die Seite alle paar Minuten, um den aktuellsten Status des Ingress zu erhalten. Nachdem der Ingress bereitgestellt wurde, wird möglicherweise der Status "OK" oder der Fehler "Back-End-Dienste arbeiten nicht fehlerfrei" angezeigt. Eine der von GKE bereitgestellten Ressourcen ist eine standardmäßige Systemdiagnose. Wenn die Fehlermeldung angezeigt wird, weist dies darauf hin, dass die Ingress-Ressource bereitgestellt und die standardmäßige Systemdiagnose ausgeführt wurde. Wenn entweder der Status "OK" oder der Fehler angezeigt werden, fahren Sie mit dem nächsten Abschnitt fort, um die Systemdiagnosen für den Load-Balancer zu konfigurieren.
Systemdiagnosen für Load-Balancer konfigurieren
Zum Konfigurieren der Systemdiagnosen müssen Sie die ID der vom Ingress erstellten standardmäßigen Systemdiagnose abrufen und dann die Systemdiagnose aktualisieren, um den Pfad und Port der Systemdiagnose des Istio-Ingress zu verwenden.
Rufen Sie neue Nutzeranmeldedaten für die Standardanmeldedaten für Anwendungen ab:
gcloud auth application-default login
Rufen Sie die ID der standardmäßigen Systemdiagnose ab, die von Ingress erstellt wurde:
Legen Sie die folgenden Umgebungsvariablen fest:
Back-End-Dienst: Brücket verschiedene Instanzgruppen über einen bestimmten Dienst-Portport.
BACKEND_SERVICE=$(gcloud compute url-maps list | grep example-ingress | awk '{print $2}' | cut -d'/' -f 2)
Systemdiagnose: Dies ist die Standard-Systemdiagnose, die automatisch erstellt wird, wenn der Ingress bereitgestellt wird.
HC=$(gcloud compute backend-services describe ${BACKEND_SERVICE} --global | grep healthChecks | cut -d'/' -f 10 | tail -n 1)
Eingehender Systemdiagnose-Port: Dies ist der Systemdiagnose-Port von Istio-Ingress.
export HC_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="status-port")].nodePort}')
Systemdiagnose-Ingress-Pfad: Dies ist der Systemdiagnosepfad von firebase-Ingress.
export HC_INGRESS_PATH=$(kubectl -n istio-system get deployments istio-ingressgateway -o jsonpath='{.spec.template.spec.containers[?(@.name=="istio-proxy")].readinessProbe.httpGet.path}')
- Health Check API: Dies ist die API, die Sie zum Konfigurieren der Systemdiagnose aufrufen.
export HC_API=https://compute.googleapis.com/compute/v1/projects/${PROJECT_ID}/global/healthChecks/${HC}
Rufen Sie die standardmäßige Systemdiagnose durch Aufrufen der
healthChecks
API in eine JSON-Datei ab:curl --request GET --header "Authorization: Bearer $(gcloud auth application-default print-access-token)" ${HC_API} > health_check.json
Aktualisieren Sie die Systemdiagnose, damit der Pfad und der Port von istio-ingress verwendet werden:
Aktualisieren Sie die Datei
health_check.json
so:- Setzen Sie
httpHealthCheck.port
auf den Wert${HC_INGRESS_PORT}
. - Setzen Sie
httpHealthCheck.requestPath
auf den Wert${HC_INGRESS_PATH}
. - Fügen Sie das folgende Attribut hinzu und legen Sie es auf einen leeren String fest:
httpHealthCheck.portSpecification=""
Die einfachste Methode hierfür ist die Verwendung von jq, das in Cloud Shell vorinstalliert ist:
jq ".httpHealthCheck.port=${HC_INGRESS_PORT} | .httpHealthCheck.requestPath=\"${HC_INGRESS_PATH}\" | .httpHealthCheck.portSpecification=\"\"" health_check.json > updated_health_check.json
Wenn Sie
cat
mit der resultierendenupdated_health_check.json
-Datei ausführen, sieht sie ungefähr so aus:{ "id": "5062913090021441698", "creationTimestamp": "2019-11-12T10:47:41.934-08:00", "name": "${HC}", "description": "Default kubernetes L7 Loadbalancing health check.", "checkIntervalSec": 60, "timeoutSec": 60, "unhealthyThreshold": 10, "healthyThreshold": 1, "type": "HTTP", "httpHealthCheck": { "port": 32394, "requestPath": "/healthz/ready", "proxyHeader": "NONE", "portSpecification": "" }, "selfLink": "https://www.googleapis.com/compute/v1/projects/${PROJECT_ID}/global/healthChecks/${HC}", "kind": "compute#healthCheck" }
Wenn Sie die JSON-Datei manuell bearbeitet haben, statt den Befehl
jq
zu verwenden, speichern Sie die Datei alsupdated_health_check.json
, damit sie im nächsten Befehl mit dem Dateinamen übereinstimmt.- Setzen Sie
Aktualisieren Sie die Systemdiagnose:
curl --request PATCH --header "Authorization: Bearer $(gcloud auth application-default print-access-token)" --header "Content-Type: application/json" --data @updated_health_check.json ${HC_API}
Es dauert einige Minuten, bis GKE die Systemdiagnose aktualisiert hat. Aktualisieren Sie in der Google Cloud Console etwa einmal pro Minute die Seite Kubernetes Engine > Dienste und Ingress, bis sich der Status von Ingress in "OK" ändert.
Testen Sie den Load-Balancer. Öffnen Sie in Ihrem Browser folgende Adresse:
http://YOUR_DOMAIN_NAME/productpage
Dabei ist
YOUR_DOMAIN_NAME
der Domainname, den Sie mit der externen statischen IP-Adresse konfiguriert haben.Sie sollten die
productpage
der Bookinfo-Anwendung sehen. Wenn Sie die Seite mehrmals aktualisieren, sollten verschiedene Versionen von Rezensionen in zufälliger Reihenfolge angezeigt werden: rote Sterne, schwarze Sterne, keine Sterne.Sie sollten auch den
https
-Zugriff auf Bookinfo testen.
IAP aktivieren
In den folgenden Schritten wird beschrieben, wie IAP aktiviert wird.
Zustimmungsbildschirm konfigurieren
Prüfen Sie mit dem Befehl list, ob bereits eine Marke vorhanden ist. Sie können nur eine Marke pro Projekt haben.
gcloud iap oauth-brands list
Hier sehen Sie ein Beispiel für eine gcloud-Antwort, wenn die Marke vorhanden ist:
name: projects/[PROJECT_NUMBER]/brands/[BRAND_ID] applicationTitle: [APPLICATION_TITLE] supportEmail: [SUPPORT_EMAIL] orgInternalOnly: true
Wenn keine Marke vorhanden ist, verwenden Sie den Befehl create:
gcloud iap oauth-brands create --application_title=APPLICATION_TITLE --support_email=SUPPORT_EMAIL
Die obigen Felder sind für den Aufruf dieser API erforderlich:
supportEmail
: Die Support-E-Mail-Adresse, die auf dem OAuth-Zustimmungsbildschirm angezeigt wird. Diese E-Mail-Adresse kann entweder die Adresse eines Nutzers oder ein Google Groups-Alias sein. Dienstkonten haben auch eine E-Mail-Adresse. Sie sind aber keine tatsächlich gültigen E-Mail-Adressen und können nicht beim Erstellen einer Marke verwendet werden. Ein Dienstkonto kann jedoch der Inhaber einer Google-Gruppe sein. Erstellen Sie entweder eine neue Google-Gruppe oder konfigurieren Sie eine vorhandene Gruppe und legen Sie das gewünschte Dienstkonto als Inhaber der Gruppe fest.applicationTitle
: Der Anwendungsname, der auf dem OAuth-Zustimmungsbildschirm angezeigt wird.
Die Antwort umfasst die folgenden Felder:
name: projects/[PROJECT_NUMBER]/brands/[BRAND_ID] applicationTitle: [APPLICATION_TITLE] supportEmail: [SUPPORT_EMAIL] orgInternalOnly: true
IAP-OAuth-Client erstellen
Verwenden Sie den Befehl "create", um einen Client zu erstellen. Verwenden Sie die Marke
name
aus dem vorherigen Schritt.gcloud iap oauth-clients create projects/PROJECT_NUMBER/brands/BRAND-ID --display_name=NAME
Die Antwort umfasst die folgenden Felder:
name: projects/[PROJECT_NUMBER]/brands/[BRAND_NAME]/identityAwareProxyClients/[CLIENT_ID] secret: [CLIENT_SECRET] displayName: [NAME]
IAP für Ihren Dienst aktivieren
Aktivieren Sie mit dem folgenden Befehl IAP für Ihren Dienst.
Ersetzen Sie CLIENT_ID
und CLIENT_SECRET
durch Ihre OAuth-Client-ID und den Clientschlüssel aus dem zuvor erstellten Client.
gcloud beta iap web enable \ --oauth2-client-id=CLIENT_ID \ --oauth2-client-secret=CLIENT_SECRET \ --resource-type=backend-services \ --service=${BACKEND_SERVICE}
IAP-Zugriffsliste konfigurieren
Fügen Sie der Zugriffsrichtlinie für IAP einen Nutzer hinzu:
gcloud beta iap web add-iam-policy-binding \ --member=user:EMAIL_ADDRESS \ --role=roles/iap.httpsResourceAccessor \ --resource-type=backend-services \ --service=$BACKEND_SERVICE
Dabei ist EMAIL_ADDRESS
die vollständige E-Mail-Adresse des Nutzers, z. B. alice@example.com
.
RCToken-Unterstützung im Service Mesh aktivieren
Standardmäßig generiert IAP ein JSON Web Token (JWT), das auf den OAuth-Client beschränkt ist. Für Anthos Service Mesh können Sie IAP so konfigurieren, dass ein RequestContextToken (RCToken) generiert wird. Dabei handelt es sich um ein JWT, aber mit einer konfigurierbaren Zielgruppe. Mit RCToken können Sie die Zielgruppe des JWT auf einen beliebigen String konfigurieren, der für eine differenzierte Autorisierung in den Anthos Service Mesh-Richtlinien verwendet werden kann.
So konfigurieren Sie das RCToken:
Erstellen Sie eine Umgebungsvariable für Ihre Projektnummer: Diese Nummer wurde automatisch generiert und Ihrem Projekt zugewiesen, als Sie es erstellt haben. (Diese ist nicht mit der Projekt-ID identisch.)
export PROJECT_NUMBER=YOUR_PROJECT_NUMBER
Erstellen Sie eine Umgebungsvariable für die RCToken-Zielgruppe. Dies kann ein beliebiger String sein.
export RCTOKEN_AUD="your-rctoken-aud"
Rufen Sie die vorhandenen IAP-Einstellungen ab:
gcloud beta iap settings get --format json \ --project=${PROJECT_NUMBER} --resource-type=compute \ --service=${BACKEND_SERVICE} > iapSettings.json
Aktualisieren Sie
IapSettings
mit der RCToken-Zielgruppe.cat iapSettings.json | jq --arg RCTOKEN_AUD_STR $RCTOKEN_AUD \ '. + {applicationSettings: {csmSettings: {rctokenAud: $RCTOKEN_AUD_STR}}}' \ > updatedIapSettings.json
gcloud beta iap settings set updatedIapSettings.json --format json \ --project=${PROJECT_NUMBER} --resource-type=compute --service=${BACKEND_SERVICE}
Aktivieren Sie die RCToken-Authentifizierung auf dem Istio-Ingress-Gateway.
cat <<EOF | kubectl apply -f - apiVersion: "authentication.istio.io/v1alpha1" kind: "Policy" metadata: name: "ingressgateway" namespace: istio-system spec: targets: - name: "istio-ingressgateway" origins: - jwt: issuer: "https://cloud.google.com/iap" jwksUri: "https://www.gstatic.com/iap/verify/public_key-jwk" audiences: - "$RCTOKEN_AUD" jwt_headers: - "ingress-authorization" trigger_rules: - excluded_paths: - exact: /healthz/ready principalBinding: USE_ORIGIN EOF
Stellen Sie sicher, dass Anfragen an die Bookinfo-
productpage
weiterhin erfolgreich sind:http://DOMAIN_NAME/productpage
So testen Sie die Richtlinie:
Erstellen Sie ein
IapSettings
-Anfrageobjekt und setzen SierctokenAud
auf einen anderen String:echo $(cat <<EOF { "name": "projects/${PROJECT_NUMBER}/iap_web/compute/services/${BACKEND_SERVICE}", "applicationSettings": { "csmSettings": { "rctokenAud": "some-other-arbitrary-string" } } } EOF ) > request.txt
Rufen Sie die
IapSettings
API auf, um die RCToken-Zielgruppe festzulegen.curl --request PATCH --header "Authorization: Bearer $(gcloud beta auth application-default print-access-token)" ${IAP_SETTINGS_API}
Stellen Sie eine Anfrage an die Bookinfo-
productpage
. Sie sollte fehlschlagen:http://DOMAIN_NAME/productpage
Bereinigen
Entfernen Sie nach Abschluss dieser Anleitung die folgenden Ressourcen, um unerwünschte Kosten für Ihr Konto zu vermeiden:
Löschen Sie das verwaltete Zertifikat:
kubectl delete managedcertificates example-certificate
Löschen Sie das Ingress, wodurch die Zuweisung der Load-Balancing-Ressourcen aufgehoben wird:
kubectl -n istio-system delete ingress example-ingress
Löschen Sie die statische IP-Adresse:
gcloud compute addresses delete example-static-ip --global
Löschen Sie in diesem Fall die IP-Adresse aus Ihrem Domain-Registrator.
Löschen Sie den Cluster. Dadurch werden die Ressourcen gelöscht, die das Cluster bilden, z. B. die Compute-Instanzen, Laufwerke und Netzwerkressourcen:
gcloud container clusters delete ${CLUSTER_NAME}