Dienstarchitektur

Last reviewed 2024-04-19 UTC

Ein Kubernetes-Dienst ist eine Abstraktion, mit der Sie eine Reihe von Pods als eine einzige Entität verfügbar machen können. Dienste sind grundlegende Bausteine für das Freigeben und Verwalten von Containeranwendungen in einem Kubernetes-Cluster. Dienste in diesem Blueprint sind in Bezug auf Namespaces, Identität, Dienstfreigabe und Dienst-zu-Dienst-Kommunikation standardisiert konzipiert.

Namespaces

Jeder Namespace hat eigene Ressourcen wie Pods, Dienste und Deployments. Mit Namespaces können Sie Ihre Anwendungen organisieren und voneinander isolieren. Der Blueprint verwendet Namespaces, um Dienste nach ihrem Zweck zu gruppieren. Sie können beispielsweise einen Namespace für alle Frontend-Dienste und einen Namespace für Ihre Backend-Dienste erstellen. Diese Gruppierung vereinfacht die Verwaltung Ihrer Dienste und die Steuerung des Zugriffs darauf.

Dienstsichtbarkeit

Ein Dienst ist über den GKE-Gateway-Controller im Internet verfügbar. GKE Gateway Controller erstellt mithilfe von Cloud Load Balancing einen Load-Balancer in einer Multi-Cluster-Konfiguration mit mehreren Regionen. Cloud Load Balancing verwendet die Netzwerkinfrastruktur von Google, um dem Dienst eine Anycast-IP-Adresse bereitzustellen, die den Zugriff auf den Dienst mit niedriger Latenz 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. Dienste werden zusätzlich durch Cloud Armour und Cloud CDN geschützt. Das folgende Diagramm zeigt, wie Dienste im Internet verfügbar sind.

Blueprint-Dienste, die im Internet verfügbar sind.

Cloud Service Mesh

Der Blueprint verwendet Cloud Service Mesh für die gegenseitige Authentifizierung und Autorisierung für die gesamte Kommunikation 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 eingehenden Diensttraffic 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 ein oder mehrere GKE-Cluster nicht verfügbar sind, solange alle verbleibenden fehlerfreien Cluster die Last verarbeiten können. Zum Erstellen eines verteilten Dienstes auf Clustern bietet Cloud Service Mesh die Layer-4- und Layer-7-Verbindungen zwischen den Diensten einer Anwendung in allen Clustern der Umgebung. Durch diese Verbindung können die Kubernetes-Dienste auf mehreren Clustern als ein logischer Dienst fungieren. Der Traffic zwischen Clustern wird nur dann an eine andere Region weitergeleitet, wenn intraregionaler Traffic aufgrund eines regionalen Ausfalls nicht erfolgen kann.

Dienstidentität

In GKE ausgeführte Dienste haben Identitäten, die mit ihnen verknüpft sind. Der Blueprint konfiguriert Workload Identity, damit ein Kubernetes-Dienstkonto als Google Cloud-Dienstkonto fungieren kann. Jede Instanz eines verteilten Dienstes innerhalb derselben Umgebung hat eine gemeinsame Identität, die 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 seinen Betrieb erforderlich sind.

Wie geht es weiter?