Diese Anleitung richtet sich an Kubernetes-Nutzer und -Administratoren, die mit dem Istio Service Mesh Kubernetes-Dienste sicher bereitstellen und gegenseitige TLS-Kommunikation (mTLS) ermöglichen möchten.
Istio und Cloud Service Mesh
Istio ist kein unterstütztes Google-Produkt. Wir empfehlen, stattdessen verwaltetes Cloud Service Mesh auszuführen. Weitere Informationen finden Sie unter Cloud Service Mesh auf einem GKE Autopilot-Cluster bereitstellen.
Cloud Service Mesh bietet die folgenden Vorteile:
- Sie können verwaltetes Cloud Service Mesh mit der Fleet API ohne clientseitige Tools wie
istioctl
bereitstellen. - Cloud Service Mesh fügt automatisch Sidecar-Proxys in Arbeitslasten ein, ohne erhöhte Berechtigungen für Ihre Container zu gewähren.
- Sie können umfangreiche Dashboards für Ihr Mesh-Netzwerk und Ihre Dienste ohne zusätzliche Konfiguration aufrufen und diese Messwerte dann verwenden, um Service Level Objectives (SLOs) und Benachrichtigungen zu konfigurieren und den Zustand Ihrer Anwendungen zu überwachen.
- Die verwaltete Cloud Service Mesh-Steuerungsebene wird automatisch aktualisiert, damit Sie die neuesten Sicherheitspatches und Features erhalten.
- Die von Cloud Service Mesh verwaltete Datenebene aktualisiert die Sidecar-Proxys in Ihren Arbeitslasten automatisch, sodass Sie Dienste nicht selbst neu starten müssen, wenn Proxy-Upgrades und Sicherheitspatches verfügbar sind.
- Cloud Service Mesh ist ein unterstütztes Produkt und kann mit standardmäßigen Open-Source-Istio-APIs konfiguriert werden. Weitere Informationen finden Sie unter Unterstützte Funktionen.
Lernziele
Diese Anleitung umfasst die folgenden Schritte:
- Erstellen Sie einen GKE Autopilot-Cluster.
- Installieren Sie Istio mit dem
istioctl
-Befehlszeilentool. - Stellen Sie eine Beispielanwendung bereit, um die gegenseitige TLS-Authentifizierung (mTLS) zu testen.
- Istio für die Verwendung der mTLS-Authentifizierung für die Dienst-zu-Dienst-Kommunikation mithilfe einer benutzerdefinierten
PeerAuthentication
-Ressource konfigurieren - Prüfen Sie die mTLS-Authentifizierung mit dem Kiali-Dashboard.
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
Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert, einschließlich kubectl
, gcloud CLI und Terraform.
Wenn Sie Cloud Shell nicht verwenden, müssen Sie die gcloud CLI installieren.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.clusterAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Umgebung vorbereiten
So richten Sie Ihre Umgebung ein:
Legen Sie Umgebungsvariablen fest:
export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1
Ersetzen Sie
PROJECT_ID
durch Ihre Google Cloud-Projekt-ID.Klonen Sie das GitHub-Repository:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Wechseln Sie in das Arbeitsverzeichnis:
cd kubernetes-engine-samples/service-mesh/istio-tutorial
GKE-Cluster erstellen
Aktivieren Sie die Linux-Funktionen, die Istio benötigt: NET_RAW
und NET_ADMIN
.
GKE Autopilot lässt NET_ADMIN
nicht standardmäßig zu, aber Sie können NET_ADMIN
mit dem Befehl --workload-policies=allow-net-admin
in GKE-Versionen 1.27 und höher aktivieren:
gcloud container clusters create-auto istio-cluster \
--location="us-central1" \
--workload-policies="allow-net-admin"
Weitere Informationen zur Sicherheit von GKE Autopilot finden Sie unter Integrierte Sicherheitskonfigurationen.
Istio installieren
Sie können Istio mithilfe von Istioctl in einem GKE-Cluster installieren.
In dieser Anleitung installieren Sie Istio mit dem Standardkonfigurationsprofil, das für Produktionsbereitstellungen empfohlen wird.
Installieren Sie Istio:
export ISTIO_VERSION=1.20.2 curl -L https://istio.io/downloadIstio | TARGET_ARCH=$(uname -m) sh -
Fügen Sie das
istioctl
-Befehlszeilentool zum PATH hinzu:cd istio-${ISTIO_VERSION} export PATH=$PWD/bin:$PATH
Installieren Sie Istio im Cluster:
istioctl install --set profile="default" -y
Dieser Schritt kann einige Minuten dauern.
Warten Sie, bis die Istio-Pods bereit sind:
watch kubectl get pods -n istio-system
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-5c47bff876-wjm96 1/1 Running 0 2m54s istiod-5fc7cb65cd-k8cp4 1/1 Running 0 2m57s
Wenn die Istio-Pods
Running
sind, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.
Beispielanwendung bereitstellen
In diesem Abschnitt erstellen Sie mit der Beispielanwendung Bank of Cloud ein Service Mesh mit mTLS-Authentifizierung.
Fügen Sie ein Namespace-Label hinzu, das Istio anweist, die automatische Einfügung von Envoy-Sidecar-Proxys zu aktivieren:
kubectl label namespace default istio-injection=enabled
Beispielanwendung bereitstellen:
cd .. git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -f bank-of-anthos/kubernetes-manifests/
Warten Sie, bis die Anwendung bereit ist:
watch kubectl get pods
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Wenn die Pods den Wert
Running
haben, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt die Istio-Gateway- und VirtualService-Ressourcen, die die Anwendung bereitstellen und Istio als Ingress-Controller verwenden.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f bank-of-anthos/extras/istio/frontend-ingress.yaml
mTLS konfigurieren
Die gegenseitige TLS-Authentifizierung (mTLS) ist in Istio standardmäßig aktiviert. Das bedeutet, dass Istio Serverarbeitslasten überwacht, die zu Istio-Proxys migriert wurden, und automatisch Clientproxys konfiguriert, um mTLS-Verbindungen mit diesen Arbeitslasten herzustellen. Istio konfiguriert auch Clientproxys, die mTLS nicht verwenden, wenn eine Verbindung zu Arbeitslasten ohne Sidecar-Proxys hergestellt wird.
Istio kann mTLS für die Funktionsweise in drei Modi konfigurieren:
PERMISSIVE
: Arbeitslasten akzeptieren sowohl mTLS- als auch Nur-Text-Traffic.STRICT
: Arbeitslasten akzeptieren nur mTLS-Traffic.DISABLE
: mTLS ist deaktiviert. Verwenden Sie diesen Modus, wenn Sie Ihre eigene Sicherheitslösung verwenden möchten.
Sie können die mTLS-Konfiguration global, pro Namespace oder pro Arbeitslast anwenden. In dieser Anleitung wenden Sie die Konfiguration mit dem mTLS-Modus STRICT
pro Namespace an.
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt eine benutzerdefinierte Istio-Ressource für die Peer-Authentifizierung.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f peer-authentication.yaml
Weitere Informationen zu mTLS in Istio finden Sie unter Gegenseitige TLS-Authentifizierung.
Prüfen, ob mTLS aktiviert ist
Kiali ist ein webbasiertes Dashboard zur Beobachtbarkeit für das Service Mesh von Istio, das eine grafische Ansicht Ihrer Mikrodienstumgebung bietet, sodass Sie Ihre Anwendungen überwachen und Fehler beheben können. Mit Kiali können Sie prüfen, ob die mTLS-Authentifizierung im Istio Service Mesh aktiviert ist und ordnungsgemäß funktioniert. Kiali benötigt Prometheus als Telemetriedatenquelle. In dieser Anleitung wird Google Cloud Managed Service for Prometheus verwendet.
Abfrageschnittstelle installieren
Erstellen Sie ein IAM-Dienstkonto mit der
roles/monitoring.viewer
, damit die Abfrageschnittstelle auf Messwerte zugreifen kann:gcloud iam service-accounts create monitoring \ --display-name="Service account for query interface" gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:monitoring@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/monitoring.viewer gcloud iam service-accounts add-iam-policy-binding \ monitoring@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[monitoring/default]"
Erstellen Sie einen Kubernetes-Namespace:
kubectl create namespace monitoring
Annotieren Sie das Kubernetes-Standarddienstkonto im Namespace, um die Workload Identity-Föderation für GKE zu konfigurieren:
kubectl annotate serviceaccount -n monitoring default \ iam.gke.io/gcp-service-account=monitoring@PROJECT_ID.iam.gserviceaccount.com --overwrite
Stellen Sie die Arbeitslast der Abfrageschnittstelle bereit:
kubectl -n monitoring apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.7.1/examples/frontend.yaml
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt eine
PodMonitoring
-Ressource, die Istio- und Envoy-Proxy-Messwerte erfasst.Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f pod-monitorings.yaml
Rufen Sie einen Link zur Beispielanwendung ab:
INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
Öffnen Sie den Link, um die Beispielanwendung zu sehen. Melden Sie sich mit dem Standardnutzernamen und -passwort an, um Traffic zwischen den Mikrodiensten zu generieren.
Kiali installieren
Wir empfehlen die Installation von Kiali mit dem Kiali-Operator.
Installieren Sie den Kiali-Operator:
helm repo add kiali https://kiali.org/helm-charts helm repo update helm install \ --namespace kiali-operator \ --create-namespace \ kiali-operator \ kiali/kiali-operator
Prüfen Sie das folgende Manifest:
Dieses Manifest beschreibt eine benutzerdefinierte Operator-Ressource, die den Kili-Server definiert.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f kiali.yaml
Warten Sie, bis der Kiali-Server bereit ist:
watch kubectl get pods -n istio-system
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-6845466857-92zp8 1/1 Running 0 9m11s istiod-6b47d84cf-4cqlt 1/1 Running 0 12m
Wenn die Pods den Wert
Running
haben, kehren Sie zur Befehlszeile zurück. Drücken Sie dazuCtrl+C
.Richten Sie die Portweiterleitung im Kiali-Serverdienst ein, um auf das Dashboard zuzugreifen:
kubectl -n istio-system port-forward svc/kiali 8080:20001
Öffnen Sie die Webvorschau. Wechseln Sie in Kiali zum Abschnitt Graph und wählen Sie im Drop-down-Menü Display die Option Security aus. In dieser Ansicht wird der Sicherheitsstatus jedes Knotens im Diagramm angezeigt. Knoten mit dem Logo mTLS aktiviert geben an, dass mTLS für diesen Dienst aktiviert ist. Knoten ohne das Logo geben an, dass mTLS nicht aktiviert ist.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Einzelne Ressourcen löschen
Wenn Sie ein vorhandenes Projekt verwendet haben und es nicht löschen möchten, können Sie die einzelnen Ressourcen löschen.
Löschen Sie Kiali:
kubectl -n istio-system delete kiali kiali helm uninstall --namespace kiali-operator kiali-operator
Löschen Sie die Monitoring-Ressourcen:
kubectl -n monitoring delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.7.1/examples/frontend.yaml
Löschen Sie die Beispielanwendung:
kubectl delete -f bank-of-anthos/extras/istio/frontend-ingress.yaml kubectl delete -f bank-of-anthos/kubernetes-manifests
Deinstallieren Sie Istio:
istioctl uninstall --purge -y
Löschen Sie den GKE-Cluster:
gcloud container clusters delete --region us-central1 istio-cluster --quiet
Nächste Schritte
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center