Eine Übersetzung des Artikels wurde speziell für Studenten des Kurses Kubernetes Based Infrastructure Platform erstellt .

Das Einrichten eines grundlegenden Mikrodienstes in Kubernetes ist täuschend einfach. In einem kürzlich erschienenen Artikel haben wir darüber gesprochen, wie einfach es ist, mit Containern zu arbeiten. Wir haben ein einfaches Docker-Image zusammengestellt, es mit Kubernetes implementiert und die Anwendungsanforderung ausgeführt. Es war nicht schwierig, aber im Leben sind Cloud-Architekturen normalerweise komplizierter. Sie umfassen Dutzende und sogar Hunderte von Diensten mit Datenbanken, Authentifizierung und anderen Elementen, die in der Realität erforderlich sind.
Sie zu verabreichen ist manchmal ein andauernder Kopfschmerz. In diesem Artikel geht es um Istio, ein Tool für das Service-Mesh (wir haben uns diese Architektur bereits früher angesehen ), mit dem die Verwaltung großer Cloud-Bereitstellungen auf die nächste Ebene gebracht werden kann.
Mit Microservices erhalten Sie eine hervorragende Skalierbarkeit, und das Service-Mesh ergänzt diese durch die für monolithische Umgebungen typischen Vorteile der Zentralisierung (wie Protokolle und Versionskontrolle). Wir haben in einem früheren Artikel in dieser Serie mehr über die Funktionen und Vorteile von Service Mesh geschrieben.
Die gleiche Publikation befasst sich mit den Möglichkeiten von Istio, ein Cloud-Architekturmuster mithilfe von Mesh-Netzwerken zu implementieren. Wir werden lernen, wie Sie die Steuerebene konfigurieren, die Stärken von Istio berücksichtigen und schließlich den Kubernetes-Dienst, mit dem wir das letzte Mal gearbeitet haben, verwenden, um ihm einen Sidecar-Proxy hinzuzufügen und ihn mit der neu erstellten Steuerebene zu verknüpfen.
Vorstellung der Datenebene und des Sidecar-Proxy
Die beiden wichtigsten Architekturbegriffe in Istio sind die Datenebene und die Steuerebene. Die Datenebene arbeitet mit Daten, die in der Anwendung verschoben, an verschiedene Dienstinstanzen übertragen und von den Diensten selbst verarbeitet werden. Für die Implementierung werden hauptsächlich Sidecar-Proxys verwendet. Auf der Verwaltungsebene werden die Reihenfolge der Dienstinstanziierung, der Ort der Telemetriedaten und die Dienstinformationen bestimmt. Die Hauptelemente der Steuerebene sind Pilot und Mixer. Mal sehen, wie das alles funktioniert.
Der Sidecar-Proxy wird zusammen mit dem Herd ausgeführt, der Ihren Dienst in Kubernetes definiert. Es wird zu den Hauptkomponenten des Dienstes hinzugefügt und verarbeitet den Datenverkehr, der zu diesem Dienst geleitet wird. Sie können der vorhandenen Service-Definition im Herd einen Sidecar-Proxy hinzufügen: Nur die Zeilen, die den Sidecar-Proxy definieren, werden dem Service hinzugefügt, und er beginnt zu funktionieren.

Im Gegenzug erhalten Sie eine Liste der Vorteile, die dem Istio-Cloud-Mesh-Netzwerk zugrunde liegen. Der Sidecar-Proxy fängt den Datenverkehr ab, der in den Dienst eintritt, und ermöglicht intelligentes Routing. Wir sprechen von einfachen Aufgaben wie dem Lastenausgleich oder der Verarbeitung von TLS-Interrupts, die die Arbeit erheblich beschleunigen, und von komplexeren Prozessen wie der Versionskontrolle, der schrittweisen Bereitstellung einer neuen Version eines Dienstes und dem Sammeln von Indikatoren für die Ressourcennutzung. Mit Sidecar-Proxy können Sie alle diese Funktionen zur vorhandenen Architektur von Microservices hinzufügen, ohne das gesamte System neu zu organisieren .
Wenn der ursprüngliche Zweck des Sidecar-Proxys klar wird, werden die Vorteile von Istio und des gesamten Cloud-Service-Netzes deutlich. Tatsächlich leiten alle Sidecar-Proxy-Architekturen in ihrer Gesamtheit, die als einheitliche Verbindungselemente zwischen Service-Pods fungieren, den gesamten Datenverkehr durch die Anwendung. Dies bedeutet, dass sie zur Stärkung des Schutzes bei Bedarf als ein einziger Ort fungieren, an dem Sie Authentifizierungsprozesse und das HTTPS-Protokoll zwischen Diensten hinzufügen, ein Ereignisprotokoll zur Überprüfung auf Anomalien führen und Tools zur Verkehrssteuerung und Filterung für die Authentifizierung bereitstellen können.
Da Sidecar-Proxys als zentrale Endpunkte für die Kommunikation zwischen Diensten fungieren, erhöhen sie außerdem die Fehlertoleranz der Anwendung und erhöhen die Skalierbarkeit. Einer der Nachteile von Microservices ist, dass alle Server-Pods isoliert sind. Wenn mit dem Microservice etwas nicht stimmt, können Anforderungen langsam verarbeitet oder vollständig zurückgesetzt werden. Dank Sidecar-Proxys können Sie Timeouts zentral hinzufügen, den intelligenten Lastausgleich konfigurieren und die Überwachungsfunktionen erweitern.
Zentralisierung: die Kontrollebene
Istio enthält neben der Datenebene eine Steuerebene. Sie fungiert als Controller für alle in der Anwendung ausgeführten Sidecar-Proxys und als zentrales Repository für alle Informationen (wie Protokolleinträge und Versionsinformationen), die von den Diensten im Netzwerk als eine einzige Quelle zuverlässiger Daten wahrgenommen werden.

Bei der Arbeit mit Istio ist Kubernetes die wichtigste Möglichkeit, mit der Steuerebene zu interagieren. Nachdem Sie Istio-Pakete installiert und Definitionen hinzugefügt haben, können Sie mit den kubectl
Befehlen, die den Status des Systems steuern, auf die kubectl
zugreifen. Zum Beispiel beginnt das Aktualisieren eines Herds auf eine neue Version mit kubectl
mit dem Aktualisieren der Variablen der lokalen kubectl
.
Dies ist am einfachsten mit dem Befehl get-svc
in kubectl
- Sie erhalten eine Liste der Dienste, die sich auf eine bestimmte Bibliothek beziehen. Mit dem folgenden Befehl können Sie überprüfen, welche Istio-Komponenten ausgeführt werden:
kubectl get svc -n istio-system
Eine Liste der Hauptelemente der Istio-Steuerebene, die im Hintergrund ausgeführt werden, wird angezeigt. Möglicherweise sind Sie bereits mit einigen von ihnen vertraut, z. B. mit Citadel, einem Dienst, der den Schutz des Datenverkehrs zwischen Diensten verwaltet.
Installieren Sie Istio
Mal sehen, welche Funktionen Istio standardmäßig unterstützt. Wir werden die Istio-Steuerebene installieren, um die grundlegende HTTP-API zu verwalten, die im vorherigen Artikel beschrieben wurde . Dieser API-Service wurde in Kubernetes definiert und als einzelner unter Kubernetes mit einer darin ausgeführten API implementiert.
Befolgen Sie zur Installation von Istio die Schritte in der offiziellen Kurzanleitung. Laden Sie zunächst die neueste Version von Istio von der entsprechenden Seite herunter. Das Programm wird noch aktiv weiterentwickelt, sodass es mit den neuesten Versionen am besten funktioniert. Laden Sie einfach die Datei herunter und vergewissern Sie sich, dass sie im richtigen Verzeichnis verfügbar ist.
Fügen Sie dann Istio-Definitionen zu Kubernetes hinzu, damit Sie sie mit dem kubectl
. Fügen Sie die zuvor erhaltenen .yaml
Dateien mit dem kubectl apply
zum Installationsverzeichnis kubectl apply
:
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
Aktivieren Sie dann die Installation von Istio, indem Sie eine Authentifizierungsmethode auswählen. Ich verwende die standardmäßige gegenseitige HTTPS-Authentifizierung, die sich hervorragend für Demonstrationen und erste Schritte eignet. Um einem vorhandenen Projekt ein Servicenetz hinzuzufügen, müssen Sie einige weitere verfügbare Optionen herausfinden. In dieser Phase können Sie den folgenden Befehl ausführen:
kubectl apply -f install/kubernetes/istio-demo-auth.yaml
Danach können Sie fortfahren. Sie müssen den zuvor erstellten Pods die Istio-Struktur hinzufügen und für neue Pods Istio als Abhängigkeit hinzufügen.
Helloworld-Anwendungsbereitstellung
Wir werden die Testanwendung helloworld verwenden, die in unserer früheren Veröffentlichung beschrieben ist . Wird erstellt: eine Bereitstellung, ein Dienst, ein Gateway und ein virtueller Dienst. Aktualisieren Sie die Konfigurationsdatei wie folgt:
helloworld.yaml
apiVersion: v1 kind: Service metadata: name: helloworld spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: helloworld --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v1 spec: replicas: 1 selector: matchLabels: app: helloworld template: metadata: labels: app: helloworld version: v1 spec: containers: - name: helloworld-kubernetes - image: haseebm/helloworld-kubernetes ports: - containerPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: helloworld-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: helloworld spec: hosts: - "*" gateways: - helloworld-gateway http: route: - destination: host: helloworld port: number: 80
Manueller Istio Beiwagen Proxy
Istio verwendet das Sidecar-Proxy-Beispiel, um den Istio-Sidecar-Proxy-Container in einem Herd mit dem helloworld-Anwendungscontainer zu platzieren.
$ kubectl apply -f <(istioctl kube-inject -f helloworld.yaml) service/helloworld created deployment.extensions/helloworld-v1 created gateway.networking.istio.io/helloworld-gateway created virtualservice.networking.istio.io/helloworld created
Überprüfen Sie, ob die Pods und der Service ausgeführt werden:
$ kubectl get pod,svc | grep helloworld pod/helloworld-v1-1cbca3f8d5-achr2 2/2 Running service/helloworld ClusterIP 10.160.58.61
Überprüfen Sie nun den Datenverkehr für die helloworld-Anwendung:
$ curl a2******.ap-southeast-1.elb.amazonaws.com/api/hello
Hallo Welt v1
Nächste Schritte
Mit Istio können Sie Cloud-Technologie-Mesh-Netzwerke und das intelligente Management von Mikrodiensten im Allgemeinen kennenlernen. Ordnungsgemäß verwaltete Microservices haben, wie wir bereits mehrfach geschrieben haben, viele technische Vorteile, auch in Bezug auf die Skalierung. Um diese Vorteile nutzen zu können, müssen Sie jedoch vorhandene Technologien effektiv nutzen.
In Zukunft werden wir uns weitere Szenarien für die Verwendung von Istio und Cloud-Mesh-Netzwerken ansehen, um die Sicherheit und Verwaltbarkeit unserer Testarchitektur zu verbessern. Der nächste Artikel konzentriert sich daher auf das Bereitstellungsmanagement und die Versionsverwaltung in Istio, um Code-Updates effizient zu verteilen, ohne die Bereitstellung zu stören oder zu beschädigen.
Asad Faizi
Gründer und CEO, CloudPlex.io, Inc
asad@cloudplex.io
www.cloudplex.io