Version 1.0 Diese Version wird nicht vollständig unterstützt.

Istio installieren

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 und konfigurieren und 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

  1. Sie benötigen kubectl-Anmeldedaten für den lokalen GKE On-Prem-Nutzercluster, auf 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.

  2. 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.7.

Befolgen Sie diese Schritte auf demselben Computer, auf dem Sie Ihre Cluster-Anmeldedaten haben: dies ist Ihr Cluster-Administratorcomputer.

  1. Laden Sie das Istio v1.1.7-Paket mit folgendem Befehl in Ihr aktuelles Verzeichnis herunter:

    curl -L https://github.com/istio/istio/releases/download/1.1.7/istio-1.1.7-linux.tar.gz | tar xz
    

    Das Installationsverzeichnis enthält Folgendes:

    • .yaml-Installationsdateien für Kubernetes in install/
    • Beispielanwendungen in samples/
    • Clientbinärdatei istioctl im Verzeichnis bin/; istioctl wird verwendet, wenn Envoy manuell als Sidecar-Proxy und zum Erstellen von Weiterleitungsregeln und -richtlinien hinzugefügt wird
    • Konfigurationsdatei istio.VERSION
  2. Wechseln Sie in das Installationsstammverzeichnis und fügen Sie istioctl zu PATH hinzu:

    cd  istio-1.1.7
    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 in 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.

  1. Achten Sie darauf, dass Sie sich im Stammverzeichnis der Istio-Installation befinden.

  2. Installieren Sie die benutzerdefinierten Ressourcendefinitionen (CRDs) von Istio:

    helm template install/kubernetes/helm/istio-init \
      --name istio-init --namespace istio-system | kubectl apply -f -
    
  3. Warten Sie einige Sekunden, bis die CRDs in den Kubernetes API-Server übertragen wurden.

  4. 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

  1. Stellen Sie sicher, dass die folgenden Kubernetes-Dienste bereitgestellt sind: istio-citadel, istio-pilot, istio-ingressgateway, istio-policy und istio-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
    ...
  2. Stellen Sie sicher, dass die entsprechenden Kubernetes-Pods bereitgestellt sind und alle Container aktiv sind: istio-pilot-*, istio-policy-*, istio-telemetry-*, istio-ingressgateway-* und istio-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 eine externe IP-Adresse automatisch für LoadBalancer Dienste zugewiesen wird. Dies gilt nicht für GKE On-Prem-Cluster. Aus diesem Grund müssen Sie der Istio Ingress Gateway-Ressource manuell eine IP-Adresse zuweisen. Führen Sie den folgenden Befehl aus, um eine statische externe IP-Adresse zuzuweisen:

kubectl edit svc -n istio-system istio-ingressgateway

Fügen Sie die Zeile hinzu:

loadBalancerIP: <your static external IP address>

wie im folgenden Beispiel in den Abschnitt spec::

spec:
  loadBalancerIP: 1.2.3.4

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.

  1. Achten Sie darauf, dass Sie sich noch im Stammverzeichnis der Istio-Installation auf dem Cluster-Administratorcomputer befinden.

  2. Stellen Sie die Anwendung mit kubectl apply und istioctl kube-inject bereit. Mit dem Befehl kube-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)
    
  3. 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
  4. 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 1.2.3.4 für Ihre externe IP-Adresse verwendet haben:

export GATEWAY_URL=1.2.3.4

Anwendung testen

  1. 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.

  2. 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

  1. 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 -
    
  2. 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.