Auf dieser Seite wird gezeigt, wie Sie Istio in Ihrem GKE On-Prem-Cluster installieren.
Übersicht
Istio ist ein Open-Source-Framework zum Verbinden, Beobachten und Sichern von Mikrodiensten, einschließlich Diensten, die auf GKE On-Prem ausgeführt werden. Sie können damit ein Netzwerk aus bereitgestellten Diensten mit Lastenausgleich, Dienst-zu-Dienst-Authentifizierung, Monitoring und weiteren Funktionen erstellen, ohne Änderungen am Dienstcode vorzunehmen. Wenn Sie Diensten Unterstützung für Istio hinzufügen möchten, stellen Sie für jeden Pod einer Anwendung einen speziellen Envoy-Sidecar-Proxy bereit. Der Envoy-Proxy fängt die gesamte Netzwerkkommunikation zwischen Mikrodiensten ab und wird über die Funktionen der Steuerungsebene von Istio konfiguriert und verwaltet.
In dieser Anleitung erfahren Sie, wie Sie Istio auf GKE On-Prem installieren sowie konfigurieren und wie Sie eine Istio-fähige Demoanwendung mit mehreren Diensten bereitstellen.
Hinweis
Prüfen Sie, ob das Cloud SDK installiert ist.
Helm installieren
Für die Installation von Istio empfehlen wir die Verwendung von Helm mit einem der konfigurierbaren Profile von Istio.
Wenn Sie Helm nicht bereits installiert haben, folgen Sie der Anleitung in der Helm-README-Datei, um die helm
-Binärdatei auf dem Computer zu installieren, auf dem sich Ihre Clusteranmeldedaten befinden.
Berechtigungen und Anmeldedaten
Sie benötigen
kubectl
-Anmeldedaten für den GKE On-Prem-Nutzercluster, in dem Sie Istio installieren möchten. Beachten Sie, dass Istio nur auf einem GKE On-Prem-Nutzercluster und nicht auf einem Administratorcluster installiert werden kann.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 Istio zu erstellen:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
Sie können die Demo-App zwar ausführen, ohne die Berechtigungen für den Clusteradministrator zu erteilen. Die Berechtigungen sind jedoch erforderlich, wenn Sie auf Telemetriedaten und andere Istio-Funktionen zugreifen möchten.
Laden Sie Istio herunter
Für GKE On-Prem empfehlen wir die Verwendung der Istio-Version 1.1.13.
Folgen Sie diesen Schritten auf dem Computer, auf dem sich Ihre Clusteranmeldedaten befinden. Dies ist der Clusteradministratorcomputer.
Laden Sie das Istio-Paket 1.1.13 mit folgendem Befehl in Ihr aktuelles Verzeichnis herunter und erweitern Sie es dort:
curl -L https://github.com/istio/istio/releases/download/1.1.13/istio-1.1.13-linux.tar.gz | tar xz
Im Installationsverzeichnis ist Folgendes enthalten:
.yaml
-Installationsdateien für Kubernetes ininstall/
- Beispielanwendungen in
samples/
- Clientbinärdatei
istioctl
im Verzeichnisbin/
;istioctl
wird verwendet, wenn Envoy manuell als Sidecar-Proxy und zum Erstellen von Weiterleitungsregeln und -richtlinien hinzugefügt wird - Konfigurationsdatei
istio.VERSION
Wechseln Sie in das Installationsstammverzeichnis und fügen Sie
istioctl
zuPATH
hinzu:cd istio-1.1.13 export PATH=$PATH:${PWD}/bin
Namespace und Zertifikat einrichten
Führen Sie auf dem Clusteradministratorcomputer die folgenden Schritte aus, um den Namespace istio-system
für die Komponenten der Steuerungsebene einzurichten:
kubectl create namespace istio-system
Kopieren Sie dann das erforderliche Root-Zertifikat nach istio-system
für Citadel.
Dies ist für GKE On-Prem-Cluster erforderlich:
kubectl get secret istio-ca-secret --namespace=kube-system --export -o yaml | kubectl apply --validate=false --namespace=istio-system -f -
Installieren Sie Istio
Jetzt können Sie Istio installieren. Istio wird im soeben erstellten Namespace istio-system
installiert und kann Mikrodienste aus allen anderen Namespaces verwalten. Die Installation umfasst Kernkomponenten, Tools und Beispielanwendungen.
Achten Sie darauf, dass Sie sich im Stammverzeichnis der Istio-Installation befinden.
Installieren Sie die benutzerdefinierten Ressourcendefinitionen (CRDs) von Istio:
helm template install/kubernetes/helm/istio-init \ --name istio-init --namespace istio-system | kubectl apply -f -
Warten Sie einige Sekunden, bis die CRDs in den Kubernetes API-Server übertragen wurden.
Installieren Sie Istio mit dem standardmäßigen Profil. Obwohl Sie ein anderes Profil auswählen können, empfehlen wir für Produktionsbereitstellungen das Standardprofil.
helm template install/kubernetes/helm/istio \ --name istio --namespace istio-system | kubectl apply -f -
Hierdurch werden die Kernkomponenten von Istio bereitgestellt:
- Istio-Pilot: Zuständig für die Diensterkennung und die Konfiguration der Envoy-Sidecar-Proxys in einem Istio-Dienst-Mesh.
- Mixer-Komponenten "Istio-Policy" und "Istio-Telemetry": Setzen Nutzungsrichtlinien durch und erfassen Telemetriedaten im ganzen Dienst-Mesh.
- Istio-Ingressgateway: Stellt einen Eingangspunkt für Traffic von außerhalb des Clusters bereit.
- Istio-Citadel: Automatisiert die Schlüssel- und Zertifikatsverwaltung für Istio.
Prüfen Sie die Istio-Installation
Stellen Sie sicher, dass die folgenden Kubernetes-Dienste bereitgestellt sind:
istio-citadel
,istio-pilot
,istio-ingressgateway
,istio-policy
undistio-telemetry
. Sie sehen auch die anderen bereitgestellten Dienste:kubectl get service -n istio-system
Ausgabe:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... istio-citadel ClusterIP 10.19.253.95
8060/TCP,9093/TCP 37s istio-galley ClusterIP 10.19.245.2 443/TCP,15014/TCP,9901/TCP 37s istio-ingressgateway LoadBalancer 10.19.247.233 80:31380/TCP,443:31390/TCP,31400:31400/TCP 40s istio-pilot ClusterIP 10.19.243.14 15003/TCP,15005/TCP,15007/TCP,15010/TCP,15011/TCP,8080/TCP,9093/TCP 38s istio-policy ClusterIP 10.19.254.117 9091/TCP,15004/TCP,9093/TCP 39s istio-sidecar-injector ClusterIP 10.19.248.228 443/TCP 37s istio-statsd-prom-bridge ClusterIP 10.19.252.35 9102/TCP,9125/UDP 39s istio-telemetry ClusterIP 10.19.250.11 9091/TCP,15004/TCP,9093/TCP,42422/TCP 39s ... Stellen Sie sicher, dass die entsprechenden Kubernetes-Pods bereitgestellt sind und alle Container aktiv sind:
istio-pilot-*
,istio-policy-*
,istio-telemetry-*
,istio-ingressgateway-*
undistio-citadel-*
.kubectl get pods -n istio-system
Ausgabe:NAME READY STATUS RESTARTS AGE istio-citadel-54f4678f86-4549b 1/1 Running 0 12m istio-cleanup-secrets-5pl77 0/1 Completed 0 12m istio-galley-7bd8b5f88f-nhwlc 1/1 Running 0 12m istio-ingressgateway-665699c874-l62rg 1/1 Running 0 12m istio-pilot-68cbbcd65d-l5298 2/2 Running 0 12m istio-policy-7c5b5bb744-k6vm9 2/2 Running 0 12m istio-security-post-install-g9l9p 0/1 Completed 3 12m istio-sidecar-injector-85ccf84984-2hpfm 1/1 Running 0 12m istio-telemetry-5b6c57fffc-9j4dc 2/2 Running 0 12m istio-tracing-77f9f94b98-jv8vh 1/1 Running 0 12m prometheus-7456f56c96-7hrk5 1/1 Running 0 12m ...
Externe IP-Adresse konfigurieren
Bei der standardmäßigen Istio-Installation wird davon ausgegangen, dass automatisch eine externe IP-Adresse für LoadBalancer
-Dienste zugewiesen wird. Dies gilt aber nicht für GKE On-Prem-Cluster. Aus diesem Grund müssen Sie der Istio-Eingangsgateway-Ressource manuell eine IP-Adresse zuweisen.
Folgen Sie zum Konfigurieren einer externen IP-Adresse einem der folgenden Abschnitte je nach Load-Balancing-Modus des Clusters:
Integrierter Load-Balancing-Modus
Öffnen Sie die Konfiguration des
istio-ingressgateway
-Dienstes:kubectl edit svc -n istio-system istio-ingressgateway
Die Konfiguration für den Dienst
istio-ingressgateway
wird im Standardtexteditor der Shell aufgerufen.Fügen Sie der Datei die folgende Zeile unter dem Spezifikationsblock (
spec
) hinzu:loadBalancerIP: <your static external IP address>
Beispiel:
spec: loadBalancerIP: 203.0.113.1
Speichern Sie die Datei.
Manueller Load-Balancing-Modus
Um einen Dienst vom Typ NodePort mit einer VIP auf dem ausgewählten Load-Balancer verfügbar zu machen, müssen Sie zuerst die nodePort
-Werte ermitteln:
Rufen Sie die Konfiguration des Dienstes
istio-ingressgateway
in Ihrer Shell auf:kubectl get svc -n istio-system istio-ingressgateway -o yaml
Es wird jeder Port für die Istio-Gateways angezeigt. Die Befehlsausgabe sieht in etwa so aus:
... ports:
- name: status-port nodePort: 30391 port: 15020 protocol: TCP targetPort: 15020
- name: http2 nodePort: 31380 port: 80 protocol: TCP targetPort: 80
- name: https nodePort: 31390 port: 443 protocol: TCP targetPort: 443
- name: tcp nodePort: 31400 port: 31400 protocol: TCP targetPort: 31400
- name: https-kiali nodePort: 31073 port: 15029 protocol: TCP targetPort: 15029
- name: https-prometheus nodePort: 30253 port: 15030 protocol: TCP targetPort: 15030
- name: https-grafana nodePort: 30050 port: 15031 protocol: TCP targetPort: 15031
- name: https-tracing nodePort: 31204 port: 15032 protocol: TCP targetPort: 15032
- name: tls nodePort: 30158 port: 15443 protocol: TCP targetPort: 15443 ...
Machen Sie diese Ports über Ihren Load-Balancer verfügbar.
Der Dienstport
http2
hat beispielsweiseport
80 undnodePort
31380. Angenommen, die Knotenadressen für Ihren Nutzercluster lauten192.168.0.10
,192.168.0.11
und192.168.0.12
und die VIP Ihres Load-Balancers ist203.0.113.1
.Konfigurieren Sie dann Ihren Load-Balancer so, dass der an
203.0.113.1:80
gesendete Traffic an192.168.0.10:31380
,192.168.0.11:31380
oder192.168.0.12:31380
weitergeleitet wird. Sie können die Dienstports auswählen, die Sie für diese VIP freigeben möchten.
Beispielanwendung bereitstellen
Wenn Istio installiert ist und alle zugehörigen Komponenten ausgeführt werden, können Sie eine der Beispielanwendungen bereitstellen, die bei der Installation enthalten sind. In dieser Anleitung installieren wir BookInfo. Hierbei handelt es sich um eine einfache Nachbildung einer Buchhandlung, die aus vier Diensten besteht, die eine Webproduktseite, Buchdetails, Rezensionen mit mehreren Versionen des Überprüfungsdienstes sowie Bewertungen bieten. Alle werden mit Istio verwaltet. Den Quellcode und alle anderen Dateien, die in diesem Beispiel genutzt werden, finden Sie im Istio-Installationsverzeichnis samples/bookinfo.
Wenn Sie diese Schritte ausführen, werden die Dienste der BookInfo-Anwendung in einer Istio-fähigen Umgebung bereitgestellt. Dabei werden für jeden Dienst Envoy-Sidecar-Proxys eingefügt, um Istio-Funktionalität zu bieten.
Achten Sie darauf, dass Sie sich noch im Stammverzeichnis der Istio-Installation auf dem Cluster-Administratorcomputer befinden.
Stellen Sie die Anwendung mit
kubectl apply
undistioctl kube-inject
bereit. Mit dem Befehlkube-inject
wird die Bereitstellung von BookInfo aktualisiert, sodass in jedem Anwendungs-Pod zusammen mit dem Dienst ein Sidecar bereitgestellt wird.kubectl apply -f <(istioctl kube-inject -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
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 pods
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
Anwendungs-Deployment validieren
Jetzt möchten wir die bereitgestellte BookInfo-Anwendung testen. Sie kennen die externe IP-Adresse für das Eingangsgateway bereits, da Sie es zuvor konfiguriert haben. Wenn Sie beispielsweise 203.0.113.1
für Ihre externe IP-Adresse verwendet haben:
export GATEWAY_URL=203.0.113.1
Anwendung testen
Prüfen Sie, ob die BookInfo-App mit
curl
ausgeführt wird:curl -I http://${GATEWAY_URL}/productpage
Wenn in der Antwort
200
angezeigt wird, bedeutet dies, dass die Anwendung fehlerfrei mit Istio funktioniert.Zeigen Sie nun mit Ihrem Browser auf
http://$GATEWAY_URL/productpage
, um die BookInfo-Webseite anzuzeigen. Wenn Sie die Seite mehrmals aktualisieren, sollten auf der Produktseite verschiedene Versionen von Rezensionen in zufälliger Reihenfolge angezeigt werden (rote Sterne, schwarze Sterne, keine Sterne), da wir die Versionssteuerung noch nicht mit Istio festgelegt haben.
Eigene Anwendungen bereitstellen
Wenn Sie versuchen möchten, eine eigene Anwendung bereitzustellen, nutzen Sie einfach dasselbe Verfahren mit Ihrer eigenen YAML-Bereitstellung: Istio erfordert keine Änderungen an der Anwendung selbst. Beachten Sie, dass die Anwendung das HTTP/1.1- oder HTTP/2.0-Protokoll für den gesamten HTTP-Traffic nutzen muss, da der Envoy-Proxy kein HTTP/1.0 unterstützt: er benötigt Header zur Weiterleitung, die in HTTP/1.0 nicht vorhanden sind.
Sie können entweder kube-inject
verwenden, um die Sidecars beim Bereitstellen der Anwendung hinzuzufügen, wie in unserem Beispiel, oder die automatische Sidecar-Einfügung von Istio für den Namespace aktivieren, in dem Ihre Anwendung ausgeführt wird.
Deinstallation
Verwenden Sie den folgenden Befehl, um die Istio-Komponenten zu deinstallieren:
helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl delete -f -
Löschen Sie anschließend den Namespace
istio-system
:kubectl delete namespace istio-system
Nächste Schritte
Weitere Informationen zu Istio finden Sie auf der Istio-Website und in der Istio-Dokumentation der Google Cloud Platform.