Auf dieser Seite wird gezeigt, wie Sie Multi-Cluster-Dienste (Multi-Cluster Services, MCS) aktivieren und anwenden. Weitere Informationen zur Funktionsweise von MCS und zu den damit verbundenen Vorteilen finden Sie unter Multi-Cluster-Dienste.
Das MCS-Feature von Google Kubernetes Engine (GKE) erweitert die Reichweite des Kubernetes-Dienstes über die Clustergrenze hinaus und ermöglicht es, Dienste in mehreren GKE-Clustern zu ermitteln und aufzurufen. Sie können damit eine Teilmenge der vorhandenen Dienste oder der neuen Dienste exportieren.
Wenn Sie einen Dienst mit MCS exportieren, ist dieser Dienst dann für alle Cluster in Ihrer Flotte verfügbar.
Von MCS verwaltete Google Cloud-Ressourcen
MCS verwaltet die folgenden Komponenten von Google Cloud:
Cloud DNS: MCS konfiguriert Cloud DNS-Zonen und -Einträge für jeden exportierten Dienst in Ihren Flottenclustern. Dadurch können Sie eine Verbindung zu Diensten herstellen, die in anderen Clustern ausgeführt werden. Diese Zonen und Einträge werden anhand der Dienste erstellt, gelesen, aktualisiert und gelöscht, die Sie für einen clusterübergreifenden Export ausgewählt haben.
Firewallregeln: MCS konfiguriert Firewallregeln, mit denen Pods innerhalb von Flotten clusterübergreifend miteinander kommunizieren können. Firewallregeln werden anhand der Cluster erstellt, gelesen, aktualisiert und gelöscht, die Sie in Ihre Flotte aufnehmen. Diese Regeln entsprechen den Regeln, die GKE für die Kommunikation zwischen Pods in einem GKE-Cluster erstellt.
Cloud Service Mesh: MCS verwendet Cloud Service Mesh als Steuerungsebene, um Endpunkte und deren Status clusterübergreifend zu verfolgen.
Voraussetzungen
Für MCS gilt Folgendes:
MCS unterstützt nur den Export von Diensten aus VPC-nativen GKE-Clustern in Google Cloud. Weitere Informationen finden Sie unter VPC-nativen Cluster erstellen. Sie können keine VPC-nativen GKE-Standardcluster verwenden.
Konnektivität ist zwischen Clustern möglich, die im selben VPC-Netzwerk, in Peering- oder freigegebenen VPC-Netzwerken ausgeführt werden. Andernfalls können die Aufrufe an externe Dienste die Netzwerkgrenze nicht überschreiten.
Eine Flotte kann sich über mehrere Google Cloud-Projekte und VPC-Netzwerke erstrecken. Ein einzelner Multi-Cluster-Dienst muss jedoch aus einem einzelnen Projekt und einem einzelnen VPC-Netzwerk exportiert werden.
MCS wird von Netzwerkrichtlinien nicht unterstützt.
Bei Clustern muss das Add-on
HttpLoadBalancing
aktiviert sein. Das Add-onHttpLoadBalancing
muss aktiviert sein. Das Add-onHttpLoadBalancing
ist standardmäßig aktiviert und sollte nicht deaktiviert werden.
Preise
Multi-Cluster-Dienste sind Teil der GKE-Clusterverwaltungsgebühr und verursachen keine zusätzlichen Nutzungskosten. Sie müssen die Traffic Director API aktivieren. Für MCS fallen jedoch keine Gebühren für Cloud Service Mesh-Endpunkte an. Für die Verwendung von MCS ist keine GKE Enterprise-Lizenzierung erforderlich.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
Installieren Sie das Google Cloud SDK.
Aktivieren Sie die Google Kubernetes Engine API:
Aktivieren Sie die Flotten-API (Hub) sowie die MCS, Resource Manager, Cloud Service Mesh und Cloud DNS APIs:
gcloud services enable \ multiclusterservicediscovery.googleapis.com \ gkehub.googleapis.com \ cloudresourcemanager.googleapis.com \ trafficdirector.googleapis.com \ dns.googleapis.com \ --project=PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID des Projekts, in dem Sie Ihre Cluster für eine Flotte registrieren möchten.
MCS in Ihrem Projekt aktivieren
MCS erfordert, dass teilnehmende GKE-Cluster in derselben Flotte registriert sind. Sobald das MCS-Feature für eine Flotte aktiviert ist, können alle Cluster Services zwischen Clustern in der Flotte exportieren.
Für MCS ist zwar die Registrierung bei einer Flotte erforderlich, aber Sie müssen die GKE Enterprise-Plattform nicht aktivieren.
GKE Enterprise
Wenn die GKE Enterprise API in Ihrem Flottenhostprojekt aktiviert ist, um andere GKE Enterprise-Komponenten zu verwenden, werden alle für die Flotte des Projekts registrierten Cluster gemäß den GKE Enterprise-Preisen abgerechnet. Mit diesem Preismodell können Sie alle GKE Enterprise-Features auf registrierten Clustern für eine einzelne Gebühr pro vCPU verwenden. Mit dem folgenden Befehl können Sie prüfen, ob die GKE Enterprise API aktiviert ist:
gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
Wenn die Ausgabe in etwa so aussieht, ist die vollständige GKE Enterprise-Plattform aktiviert und für alle bei der Flotte registrierten Cluster fallen GKE Enterprise-Gebühren an:
anthos.googleapis.com Anthos API
Wenn Sie dies nicht erwarten, wenden Sie sich an Ihren Projektadministrator.
Eine leere Ausgabe gibt an, dass GKE Enterprise nicht aktiviert ist.
MCS im GKE-Cluster aktivieren
Aktivieren Sie das MCS-Feature für die Flotte Ihres Projekts:
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID des Projekts, in dem Sie Ihre Cluster für eine Flotte registrieren möchten. Dies ist Ihr Flottenhostprojekt.Registrieren Sie die GKE-Cluster in einer Flotte. Wir empfehlen dringend, den Cluster bei aktivierter Workload Identity-Föderation für GKE zu registrieren. Wenn Sie die Workload Identity-Föderation für GKE nicht aktivieren, müssen Sie den Cluster zur Authentifizierung bei einem Google Cloud-Dienstkonto registrieren und die zusätzlichen Schritte unter Dienstkonten authentifizieren ausführen.
Führen Sie den folgenden Befehl aus, um Ihren Cluster bei Workload Identity-Föderation für GKE zu registrieren:
gcloud container fleet memberships register MEMBERSHIP_NAME \ --gke-cluster CLUSTER_LOCATION/CLUSTER_NAME \ --enable-workload-identity \ --project PROJECT_ID
Ersetzen Sie Folgendes:
MEMBERSHIP_NAME
: Der Mitgliedschaftsname, den Sie auswählen, um den Cluster in der Flotte eindeutig darzustellen. Normalerweise ist der Name der Flotte für einen Cluster der Name des Clusters. Sie müssen jedoch möglicherweise einen neuen Namen angeben, wenn ein anderer Cluster mit dem ursprünglichen Namen bereits in der Flotte vorhanden ist.CLUSTER_LOCATION
: Die Zone oder Region, in der sich der Cluster befindet.CLUSTER_NAME
ist der Name des Clusters.
Erteilen Sie die erforderlichen IAM-Berechtigungen (Identity and Access Management) für den MCS-Importeur:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer"
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID des Flottenhostprojekts.Jeder Cluster der Flotte muss einen Namespace haben, um darin Dienste freizugeben. Erstellen Sie bei Bedarf einen Namespace mit dem folgenden Befehl:
kubectl create ns NAMESPACE
Ersetzen Sie
NAMESPACE
durch einen Namen für den Namespace.Prüfen Sie mit dem folgenden Befehl, ob MCS aktiviert sind:
gcloud container fleet multi-cluster-services describe \ --project PROJECT_ID
Die Ausgabe sieht etwa so aus:
createTime: '2021-08-10T13:05:23.512044937Z' membershipStates: projects/PROJECT_ID/locations/global/memberships/MCS_NAME: state: code: OK description: Firewall successfully updated updateTime: '2021-08-10T13:14:45.173444870Z' name: projects/PROJECT_NAME/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {}
Wenn der Wert von
state
nichtACTIVE
ist, lesen Sie den Abschnitt Fehlerbehebung.
Dienstkonten authentifizieren
Wenn Sie Ihre GKE-Cluster über ein Dienstkonto für eine Flotte registriert haben, müssen Sie zur Authentifizierung des Dienstkontos zusätzliche Schritte ausführen.
MCS stellt eine Komponente namens gke-mcs-importer
bereit. Diese Komponente erhält Endpunktaktualisierungen von Cloud Service Mesh. Im Rahmen der Aktivierung von MCS müssen Sie deshalb Ihrem Dienstkonto die Berechtigung zum Lesen von Informationen von Cloud Service Mesh erteilen.
Wenn Sie ein Dienstkonto verwenden, können Sie das Compute Engine-Standarddienstkonto oder Ihr eigenes Knotendienstkonto nutzen:
Wenn Sie ein Compute Engine-Standarddienstkonto verwenden, aktivieren Sie die folgenden Bereiche:
https://www.googleapis.com/auth/compute.readonly
https://www.googleapis.com/auth/cloud-platform
Weitere Informationen zum Aktivieren von Bereichen finden Sie unter Dienstkonto und Zugriffsbereiche für eine Instanz ändern.
Wenn Sie ein eigenes Knotendienstkonto verwenden, weisen Sie Ihrem Dienstkonto die Rolle
roles/compute.networkViewer
zu.
MCS verwenden
In den folgenden Abschnitten wird gezeigt, wie Sie MCS anwenden. MCS verwendet die Kubernetes Multi-Cluster Services API.
Dienst für den Export registrieren
Führen Sie die folgenden Schritte aus, um einen Dienst für den Export in andere Cluster innerhalb Ihrer Flotte zu registrieren:
Erstellen Sie ein
ServiceExport
-Objekt mit dem Namenexport.yaml
:# export.yaml kind: ServiceExport apiVersion: net.gke.io/v1 metadata: namespace: NAMESPACE name: SERVICE_EXPORT_NAME
Ersetzen Sie Folgendes:
NAMESPACE
ist der Namespace desServiceExport
-Objekts. Dieser Namespace muss mit dem Namespace des Dienstes übereinstimmen, den Sie exportieren.SERVICE_EXPORT_NAME
ist der Name eines Dienstes in Ihrem Cluster, den Sie in andere Cluster in Ihrer Flotte exportieren möchten.
Erstellen Sie mit dem folgenden Befehl die Ressource
ServiceExport
:kubectl apply -f export.yaml
Der erste Export Ihres Dienstes dauert ungefähr fünf Minuten, in denen er mit den Clustern synchronisiert wird, die in Ihrer Flotte registriert sind. Nachdem ein Dienst exportiert wurde, werden nachfolgende Synchronisierungen von Endpunkten sofort ausgeführt.
Sie können denselben Service aus mehreren Clustern exportieren, um einen einzelnen hochverfügbaren Multi-Cluster-Dienstendpunkt mit Traffic-Verteilung über Cluster hinweg zu erstellen. Stellen Sie vor dem Export von Services mit demselben Namen und Namespace sicher, dass sie auf diese Weise gruppiert werden sollen. Wir empfehlen, Services in die Namespaces default
und kube-system
nicht zu exportieren, da es sonst mit hoher Wahrscheinlichkeit unbeabsichtigte Namenskonflikte und die daraus resultierende unbeabsichtigte Gruppierung gibt. Wenn Sie mehr als fünf Services mit demselben Namen und Namespace exportieren, ist die Traffic-Verteilung auf importierte Services möglicherweise auf fünf exportierte Services beschränkt.
Clusterübergreifende Dienste nutzen
MCS unterstützt nur ClusterSetIP und monitorlose Dienste. Es sind nur DNS-A-Einträge verfügbar.
Nachdem Sie ein ServiceExport
-Objekt erstellt haben, wird der folgende Domainname von einem beliebigen Pod in einem beliebigen Flotten-Cluster zu Ihrem exportierten Dienst aufgelöst:
SERVICE_EXPORT_NAME.NAMESPACE.svc.clusterset.local
Die Ausgabe enthält die folgenden Werte:
SERVICE_EXPORT_NAME
undNAMESPACE
: Die Werte, die Sie im ObjektServiceExport
definieren.
Für ClusterSetIP-Dienste wird die Domain nach ClusterSetIP
aufgelöst. Sie finden diesen Wert im ServiceImport
-Objekt in einem Cluster in dem Namespace, in dem das ServiceExport
-Objekt erstellt wurde. Das ServiceImport
-Objekt wird automatisch erstellt.
Beispiel:
kind: ServiceImport
apiVersion: net.gke.io/v1
metadata:
namespace: EXPORTED-SERVICE-NAMESPACE
name: external-svc-SERVICE-EXPORT-TARGET
status:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
ips: CLUSTER_SET_IP
MCS erstellt ein Endpoints
-Objekt im Rahmen des Imports eines Service
in einen Cluster. Durch Untersuchen dieses Objekts können Sie den Fortschritt eines Service-Imports überwachen. Suchen Sie zum Ermitteln des Namens des Endpoints
-Objekts nach dem Wert der Annotation net.gke.io/derived-service
in einem ServiceImport
-Objekt, das dem importierten Service entspricht. Beispiel:
kind: ServiceImport
apiVersion: net.gke.io/v1
annotations: net.gke.io/derived-service: DERIVED_SERVICE_NAME
metadata:
namespace: EXPORTED-SERVICE-NAMESPACE
name: external-svc-SERVICE-EXPORT-TARGET
Suchen Sie als Nächstes das Objekt Endpoints
, um zu prüfen, ob MCS die Endpunkte bereits an den Importcluster weitergegeben hat. Das Endpoints
-Objekt wird im selben Namespace erstellt wie das ServiceImport
-Objekt unter dem Namen, der in der Annotation net.gke.io/derived-service
gespeichert ist. Beispiel:
kubectl get endpoints DERIVED_SERVICE_NAME -n NAMESPACE
Ersetzen Sie Folgendes:
DERIVED_SERVICE_NAME
ist der Wert der Annotationnet.gke.io/derived-service
im ObjektServiceImport
.NAMESPACE
ist der Namespace desServiceExport
-Objekts.
Weitere Informationen zum Systemstatus der Endpunkte finden Sie im Cloud Service Mesh-Dashboard in der Google Cloud Console.
Bei monitorlosen Diensten wird die Domain in die Liste der IP-Adressen der Endpunkte in den Exportclustern aufgelöst. Jeder Backend-Pod mit einem Hostnamen kann auch unabhängig mit einem Domainnamen in folgendem Format adressiert werden:
HOSTNAME.MEMBERSHIP_NAME.LOCATION.SERVICE_EXPORT_NAME.NAMESPACE.svc.clusterset.local
Die Ausgabe enthält die folgenden Werte:
SERVICE_EXPORT_NAME
undNAMESPACE
: Die Werte, die Sie im ObjektServiceExport
definieren.MEMBERSHIP_NAME
ist die eindeutige Kennzeichnung in der Flotte für den Cluster, in dem sich der Pod befindet.LOCATION
: Standort der Mitgliedschaft. Mitgliedschaften sind entwederglobal
oder ihr Standort ist eine der Regionen oder Zonen, in denen sich der Pod befindet, z. B.us-central1
.HOSTNAME
: Der Hostname des Pods.
Sie können einen Backend-Pod auch mit einem Hostnamen adressieren, der aus einem mit einer globalen Mitgliedschaft registrierten Cluster exportiert wurde. Verwenden Sie dazu einen Domainnamen des folgenden Formats:
HOSTNAME.MEMBERSHIP_NAME.SERVICE_EXPORT_NAME.NAMESPACE.svc.clusterset.local
MCS deaktivieren
Um MCS zu deaktivieren, führen Sie die im Folgenden aufgeführten Schritte aus.
Löschen Sie für jeden Cluster in Ihrer Flotte alle ServiceExport-Objekte, die Sie erstellt haben:
kubectl delete serviceexport SERVICE_EXPORT_NAME \ -n NAMESPACE
Ersetzen Sie Folgendes:
SERVICE_EXPORT_NAME
ist der Name Ihres ServiceExport-Objekts.NAMESPACE
ist der Namespace desServiceExport
-Objekts.
Prüfen Sie, ob
ServiceExport
in 30 Minuten aus der Liste verschwindet.Heben Sie die Registrierung Ihrer Cluster für die Flotte auf, wenn sie nicht für einen anderen Zweck registriert werden müssen.
Deaktivieren Sie die Funktion
multiclusterservicediscovery
.gcloud container fleet multi-cluster-services disable \ --project PROJECT_ID
Ersetzen Sie dabei
PROJECT_ID
durch die Projekt-ID des Projekts, in dem Sie die Cluster registriert haben.Deaktivieren Sie die API für MCS:
gcloud services disable multiclusterservicediscovery.googleapis.com \ --project PROJECT_ID
Ersetzen Sie dabei
PROJECT_ID
durch die Projekt-ID des Projekts, in dem Sie die Cluster registriert haben.
Beschränkungen
Die im Folgenden aufgeführten Beschränkungen werden nicht erzwungen. In einigen Fällen können diese Beschränkungen je nach Auslastung in Ihren Clustern oder Projekten und der Endpunkt-Churn-Rate überschritten werden. Allerdings treten dann eventuell Leistungsprobleme auf.
Cluster exportieren: Ein einzelner Dienst mit einem Namespace-Namen, kann sicher von bis zu 5 Clustern gleichzeitig exportiert werden. Über dieses Limit hinaus kann es sein, dass sich nur eine Teilmenge der Endpunkte in die genutzten Cluster importieren lässt. Sie können verschiedene Dienste aus verschiedenen Teilmengen von Clustern exportieren.
Anzahl der Pods für einen einzelnen Dienst: Am sichersten ist es, wenn die Anzahl von 250 Pods für einen einzelnen Dienst nicht überschritten wird. Dies entspricht der Einschränkung für Single-Cluster-Dienste. Bei relativ statischen Arbeitslasten und einer kleinen Anzahl an Multi-Cluster-Diensten kann diese Anzahl für tausende von Endpunkten pro Dienst erheblich überschritten werden. Wie bei Single-Cluster-Diensten werden alle Endpunkte von
kube-proxy
auf jedem Knoten überwacht. Wird dieses Limit überschritten, sind unter Umständen größere Knoten erforderlich, insbesondere wenn Sie mehrere Cluster gleichzeitig exportieren möchten.Die Anzahl der Multi-Cluster-Dienste, die gleichzeitig exportiert werden: Wir empfehlen, nicht mehr als 250 eindeutige Service-Ports gleichzeitig zu exportieren, die durch den Namen des Dienstes und die deklarierten Ports identifiziert werden. Beispielsweise wird der Export eines Dienstes, der die Ports 80 und 443 verfügbar macht, mit 2 Ports auf das Limit von 250 eindeutigen Dienstports angerechnet. Dienste mit demselben Namespace-Namen, der aus mehreren Clustern exportiert wurde, zählen als ein einzelner eindeutiger Dienst. Der zuvor erwähnte 2-Port-Dienst wird nur dann auf 2 Ports angerechnet, wenn er aus fünf Clustern gleichzeitig exportiert wird. Jeder Multi-Cluster-Dienst wird auf das Kontingent für Backend-Dienste angerechnet und jeder Exportcluster oder jede Exportzone erstellt eine Netzwerk-Endpunktgruppe (NEG)
Diensttypen
MCS unterstützt nur ClusterSetIP und monitorlose Dienste. NodePort- und LoadBalancer-Dienste werden nicht unterstützt und können zu einem unerwarteten Verhalten führen.
IPmasq-Agent mit MCS verwenden
MCS funktioniert wie erwartet, wenn Sie einen Standard- oder anderen nicht maskierten Pod-IP-Bereich verwenden.
Wenn Sie einen benutzerdefinierten Pod-IP-Bereich oder eine benutzerdefinierte IPmasq-Agent-ConfigMap verwenden, kann der MCS-Traffic maskiert werden. MCS funktioniert dann nicht, da die Firewallregeln nur Traffic von Pod-IPs zulassen.
Zur Vermeidung dieses Problems sollten Sie entweder den Standard-Pod-IP-Bereich verwenden oder alle Pod-IP-Bereiche im Feld nonMasqueradeCIDRs
der IPmasq-Agent-ConfigMap angeben.
Wenn Sie Autopilot oder einen nicht standardmäßigen Pod-IP-Bereich verwenden und nicht alle Pod-IP-Bereiche in der ConfigMap angeben können, verwenden Sie die NAT-Richtlinie für ausgehenden Traffic zur Konfiguration einer IP-Maskierung.
Portnummern innerhalb eines MCS-Dienstes wiederverwenden
Sie können dieselbe Portnummer nicht innerhalb eines MCS-Dienstes wiederverwenden, auch wenn die Protokolle unterschiedlich sind.
Dies gilt sowohl innerhalb eines Kubernetes-Dienstes als auch für alle Kubernetes-Dienste eines MCS-Dienstes.
MCS mit Clustern in mehreren Projekten
Sie können einen Dienst nicht exportieren, wenn dieser Dienst bereits von anderen Clustern in einem anderen Projekt in der Flotte mit demselben Namen und Namespace exportiert wird. Sie können in anderen Clustern in der Flotte in anderen Projekten auf den Dienst zugreifen, aber diese Cluster können nicht denselben Dienst in denselben Namespace exportieren.
Fehlerbehebung
Die folgenden Abschnitte enthalten Tipps zur Fehlerbehebung für MCS.
FeatureState aufrufen
Wenn Sie den Funktionszustand aufrufen, können Sie überprüfen, ob MCS erfolgreich konfiguriert wurde. Sie können den MCS-Funktionszustand aufrufen, indem Sie den folgenden Befehl eingeben:
gcloud container fleet multi-cluster-services describe
Die Ausgabe sieht etwa so aus:
createTime: '2021-08-10T13:05:23.512044937Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/MCS_NAME:
state:
code: OK
description: Firewall successfully updated
updateTime: '2021-08-10T13:14:45.173444870Z'
name: projects/PROJECT_NAME/locations/global/features/multiclusterservicediscovery
resourceState:
state: ACTIVE
spec: {}
Die hilfreichsten Felder für die Fehlerbehebung sind code
und description
.
Codes im featureState
Ein Code gibt den allgemeinen Status des Mitglieds in Bezug auf MCS an. Sie finden diese Felder im Feld state.code
. Es sind drei Codes möglich:
OK
: Die Mitgliedschaft wurde MCS hinzugefügt und kann verwendet werden.WARNING
: MCS wird gerade mit den Mitgliedschaftseinstellungen abgeglichen. Das Beschreibungsfeld kann weitere Informationen darüber enthalten, was diesen Code ausgelöst hat.FAILED
: Diese Mitgliedschaft wurde MCS nicht hinzugefügt. Andere Mitgliedschaften in der Flotte mit dem CodeOK
sind von dieserFAILED
-Mitgliedschaft nicht betroffen. Das Beschreibungsfeld kann weitere Informationen darüber enthalten, was diesen Code ausgelöst hat.ERROR
: In dieser Mitgliedschaft fehlen Ressourcen. Andere Mitgliedschaften in der Flotte mit dem CodeOK
sind von dieserERROR
-Mitgliedschaft nicht betroffen. Das Beschreibungsfeld kann weitere Informationen darüber enthalten, was diesen Code ausgelöst hat.
Beschreibungen im featureState
Eine Beschreibung enthält weitere Informationen zum Status der Mitgliedschaft in MCS. Im Feld state.description
können folgende Beschreibungen enthalten sein:
Firewall successfully created
: Diese Meldung gibt an, dass die Firewallregel des Mitglieds erfolgreich erstellt und aktualisiert wurde. Der Code der Mitgliedschaft lautetOK
.Firewall creation pending
: Diese Meldung gibt an, dass das Erstellen oder Aktualisieren der Firewallregel des Mitglieds aussteht. Der Code der Mitgliedschaft lautetWARNING
. Diese Mitgliedschaft kann Probleme beim Aktualisieren und Verbinden mit neuen Multi-Cluster-Diensten und Mitgliedschaften verursachen, wenn die Firewallregel noch ausstehend ist.GKE Cluster missing
: Diese Meldung gibt an, dass der registrierte GKE-Cluster nicht verfügbar ist und/oder gelöscht wurde. Der Code der Mitgliedschaft lautetERROR
. Diese Mitgliedschaft muss manuell von der Flotte abgemeldet werden, nachdem ein GKE-Cluster gelöscht wurde.Project that member lives in is missing required permissions and/or has not enabled all required APIs - additional setup steps are required
: Diese Meldung gibt an, dass interne StatusForbidden-Fehler (403) vorliegen und der Code der MitgliedschaftFAILED
lautet. Dieser Fehler tritt in folgenden Szenarien auf:Sie haben die erforderlichen APIs im Projekt des Mitglieds nicht aktiviert.
Wenn sich der Cluster des Mitglieds in einem anderen Projekt als die Flotte befindet, lesen Sie den Abschnitt Projektübergreifende Einrichtung, um sicherzustellen, dass Sie alle erforderlichen Schritte abgeschlossen haben. Wenn Sie alle Schritte durchgeführt haben, stellen Sie sicher, dass die folgenden APIs im Registrierungsprojekt mit den folgenden Befehlen aktiviert sind:
gcloud services enable multiclusterservicediscovery.googleapis.com --project PROJECT_ID gcloud services enable dns.googleapis.com --project PROJECT_ID gcloud services enable trafficdirector.googleapis.com --project PROJECT_ID gcloud services enable cloudresourcemanager.googleapis.com --project PROJECT_ID
Ersetzen Sie dabei
PROJECT_ID
durch die Projekt-ID des Projekts, in dem Sie die Cluster registriert haben.Für die Dienstkonten
mcsd
undgkehub
sind zusätzliche Berechtigungen im Projekt des Mitglieds erforderlich.Die Dienstkonten
mcsd
undgkehub
sollten im Flottenhostprojekt automatisch mit allen erforderlichen Berechtigungen erstellt worden sein. Prüfen Sie mit den folgenden Befehlen, ob die Dienstkonten vorhanden sind:gcloud projects get-iam-policy PROJECT_ID | grep gcp-sa-mcsd gcloud projects get-iam-policy PROJECT_ID | grep gcp-sa-gkehub
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID des Flottenhostprojekts.
Es sollten dann die vollständigen Namen der Dienstkonten
mcsd
undgkehub
angezeigt werden.Multiple VPCs detected in the hub - VPC must be peered with other VPCs for successful connectivity
: Diese Meldung wird angezeigt, wenn Cluster, die in verschiedenen VPCs gehostet werden, für dieselbe Flotte registriert sind. Der Status der Mitgliedschaft lautetOK
. Das VPC-Netzwerk eines Clusters wird durch sein NetworkConfig-Netzwerk definiert. Multi-Cluster-Dienste benötigen ein flaches Netzwerk. Diese VPCs müssen für Multi-Cluster-Dienste aktiv per Peering verbunden werden, damit eine Verbindung zu ihnen hergestellt werden kann. Weitere Informationen finden Sie unter Peering von zwei Netzwerken.Member does not exist in the same project as hub - additional setup steps are required, errors may occur if not completed.
: Diese Meldung weist darauf hin, dass für projektübergreifende Cluster weitere Einrichtungsschritte erforderlich sind. Der Status der Mitgliedschaft lautetOK
. Projektübergreifende Mitgliedschaften werden als Mitgliedscluster definiert, der sich nicht im selben Projekt wie die Flotte befinden. Weitere Informationen finden Sie unter Projektübergreifende Einrichtung.Non-GKE clusters are currently not supported
: Diese Meldung weist darauf hin, dass MCS nur GKE-Cluster unterstützt. Nicht-GKE-Cluster können nicht zu MCS hinzugefügt werden. Der Status der Mitgliedschaft lautetFAILED
.
Bekannte Probleme
MCS-Dienste mit mehreren Ports
Es gibt ein bekanntes Problem bei Multi-Cluster-Services mit mehreren (TCP/UDP)-Ports in GKE Dataplane V2, bei denen einige Endpunkte in der Datenebene nicht programmiert sind. Dieses Problem betrifft GKE-Versionen vor 1.26.3-gke.400.
Verwenden Sie als Problemumgehung in GKE Dataplane V2 mehrere MCS mit einem einzelnen Port anstelle eines MCS mit mehreren Ports.
Portnummer, die innerhalb eines MCS-Dienstes wiederverwendet wird
Sie können dieselbe Portnummer innerhalb eines MCS-Dienstes nicht wiederverwenden, auch wenn die Protokolle unterschiedlich sind.
Dies gilt sowohl innerhalb eines Kubernetes-Dienstes als auch für alle Kubernetes-Dienste eines MCS-Dienstes.
Dieses Verhalten wird in einer zukünftigen MCS-Version behoben.
MCS mit freigegebener VPC
Bei der aktuellen Implementierung von MCS werden Metadaten zwischen Flotten geteilt, wenn Sie mehr als eine Flotte in derselben freigegebenen VPC bereitstellen. Wenn ein Service in einer Flotte erstellt wird, werden Dienstmetadaten in alle anderen Flotten exportiert oder importiert, die Teil derselben freigegebenen VPC und für den Nutzer sichtbar sind.
Dieses Verhalten wird in einer zukünftigen MCS-Version behoben.
Systemdiagnose verwendet den Standardport anstelle von containerPort
Wenn Sie einen Dienst mit einem targetPort
-Feld bereitstellen, das auf einen benannten Port in einem Deployment verweist, konfiguriert MCS den Standardport für die Systemdiagnose anstelle des angegebenen containerPort
.
Verwenden Sie zur Vermeidung dieses Problems numerische Werte im Service-Feld ports.targetPort
und im Deployment-Feld readinessProbe.httpGet.port
anstelle von benannten Werten.
Dieses Verhalten wird in einer zukünftigen MCS-Version behoben.
Nächste Schritte
- Weitere Informationen zu Diensten.
- Anwendungen mit Diensten freigeben.
- Implementieren Sie ein einfaches Beispiel für Multi-Cluster-Dienste.