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

Anthos Service Mesh

Der Blueprint verwendet Anthos Service Mesh für die gegenseitige Authentifizierung und Autorisierung für die gesamte Kommunikation zwischen Diensten. In dieser Bereitstellung verwendet Anthos Service Mesh CA Service zur Ausstellung von TLS-Zertifikaten zur Authentifizierung von Peers und um 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 die gesamte TCP-Kommunikation zwischen Diensten bei der Übertragung verschlüsselt wird. 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 der verbleibende fehlerfreie Cluster die Last verarbeiten kann. Zum Erstellen eines verteilten Dienstes auf Clustern bietet Anthos Service Mesh Ebene-4- und Ebene-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 einzelner 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?