Dienstarchitektur

Last reviewed 2024-12-13 UTC

Ein Kubernetes-Dienst ist eine Abstraktion, mit der Sie eine Reihe von Pods als einzelne Entität verfügbar machen können. Dienste sind grundlegende Bausteine für die Bereitstellung und Verwaltung containerisierter Anwendungen in einem Kubernetes-Cluster. Die Dienste in diesem Blueprint sind standardisiert und berücksichtigen Namespaces, Identität, Dienstbereitstellung und Kommunikation zwischen Diensten.

Jeder Namespace hat eigene Ressourcen wie Pods, Dienste und Bereitstellungen. Mit Namespaces können Sie Ihre Anwendungen organisieren und voneinander isolieren. In der Vorlage werden Dienste anhand ihrer Zweckbestimmung in Namespaces gruppiert. Sie können beispielsweise einen Namespace für alle Frontend-Dienste und einen Namespace für Ihre Back-End-Dienste erstellen. So können Sie Ihre Dienste leichter verwalten und den Zugriff darauf steuern.

Sichtbarkeit des Dienstes

Ein Dienst wird über den GKE Gateway Controller im Internet freigegeben. Der GKE-Gateway-Controller erstellt einen Load Balancer mit Cloud Load Balancing in einer Multi-Cluster-Konfiguration für mehrere Regionen. Cloud Load Balancing verwendet die Netzwerkinfrastruktur von Google, um dem Dienst eine Anycast-IP-Adresse bereitzustellen, die einen Zugriff mit geringer Latenz auf den Dienst ermöglicht. Der Clientzugriff auf den Dienst erfolgt über HTTPS-Verbindungen und Client-HTTP-Anfragen werden an HTTPS weitergeleitet. Der Load Balancer verwendet den Zertifikatsmanager, um öffentliche Zertifikate zu verwalten. Die Dienste werden zusätzlich durch Cloud Armor und Cloud CDN geschützt. Das folgende Diagramm zeigt, wie Dienste dem Internet zugänglich gemacht werden.

Blueprint-Dienste, die für das Internet verfügbar sind.

Cloud Service Mesh

Der Blueprint verwendet Cloud Service Mesh für die gegenseitige Authentifizierung und Autorisierung aller Kommunikationen zwischen Diensten. Bei dieser Bereitstellung verwendet das Cloud Service Mesh den CA-Dienst zum Ausstellen von TLS-Zertifikaten, um Peers zu authentifizieren und sicherzustellen, dass nur autorisierte Clients auf einen Dienst zugreifen können. Durch die Verwendung von mTLS (mutual TLS) für die Authentifizierung wird außerdem sichergestellt, dass alle TCP-Kommunikationen zwischen Diensten bei der Übertragung verschlüsselt werden. Für den Dienst-Ingress-Traffic in das Service Mesh verwendet der Blueprint den GKE-Gateway-Controller.

Verteilte Dienste

Ein verteilter Dienst ist eine Abstraktion eines Kubernetes-Dienstes, der im selben Namespace in mehreren Clustern ausgeführt wird. Ein verteilter Dienst bleibt auch dann verfügbar, wenn einer oder mehrere GKE-Cluster ausgefallen sind, solange die fehlerfreien Cluster die Last verarbeiten können. Zum Erstellen eines verteilten Dienstes auf Clustern bietet Cloud Service Mesh die L4- und L7-Konnektivität zwischen den Diensten einer Anwendung in allen Clustern der Umgebung. Durch diese Konnektivität können die Kubernetes-Dienste in mehreren Clustern als einzelner logischer Dienst fungieren. Traffic zwischen Clustern wird nur an eine andere Region weitergeleitet, wenn aufgrund eines regionalen Ausfalls kein Traffic innerhalb der Region möglich ist.

Dienstidentität

Dienste, die in GKE ausgeführt werden, haben zugewiesene Identitäten. Mit dem Blueprint wird die Workload Identity-Föderation für GKE so konfiguriert, dass ein Kubernetes-Dienstkonto als Google Cloud -Dienstkonto fungieren kann. Jede Instanz eines verteilten Dienstes innerhalb derselben Umgebung hat eine gemeinsame Identität, was die Berechtigungsverwaltung vereinfacht. Beim Zugriff auf Google Cloud APIs werden Dienste, die als Kubernetes-Dienstkonto ausgeführt werden, automatisch als Google Cloud -Dienstkonto authentifiziert. Jeder Dienst hat nur die minimalen Berechtigungen, die für den Betrieb des Dienstes erforderlich sind.

Wie geht es weiter?