Auf dieser Seite erfahren Sie, wie Sie das Connect-Gateway verwenden, um eine Verbindung zu einem registrierten Cluster herzustellen. Machen Sie sich vor dem Lesen dieser Seite mit den Konzepten in unserer Übersicht vertraut. In dieser Anleitung wird davon ausgegangen, dass Ihr Projektadministrator das Gateway bereits eingerichtet und Ihnen die erforderlichen Rollen und Berechtigungen zugewiesen hat.
Hinweis
Prüfen Sie, ob die folgenden Befehlszeilentools installiert sind:
- Die neueste Version von Google Cloud CLI, dem Befehlszeilentool für die Interaktion mit Google Cloud.
kubectl
Wenn Sie Cloud Shell als Shell-Umgebung für die Interaktion mit Google Cloudverwenden, sind diese Tools für Sie installiert.
Achten Sie darauf, dass die gcloud CLI für die Verwendung mit Ihrem Projekt initialisiert wurde.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Clusterprojekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zur Verwendung des Connect-Gateways zum Herstellen einer Verbindung zu Clustern und zum Ausführen von Befehlen benötigen:
-
Kubeconfig-Datei für den Cluster abrufen:
Connect Gateway-Leser (
roles/gkehub.gatewayReader) -
kubectl-CLI-Befehle ausführen: Connect Gateway-Administrator (roles/gkehub.gatewayAdmin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Die Rolle „Connect Gateway-Administrator“ (roles/gkehub.gatewayAdmin) ist die einzige vordefinierte Rolle, die die Berechtigung gkehub.gateway.stream enthält. Diese ist erforderlich, um kubectl-CLI-Befehle wie attach, exec, port-forward und cp auszuführen.
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
In Ihrem Google Cloud Konto anmelden
Sie können Ihr eigenes Google Cloud Konto oder ein Google Cloud Dienstkonto verwenden, um über die Gateway API mit verbundenen Clustern zu interagieren.
Folgen Sie der Anleitung unter Google Cloud CLI-Tools autorisieren, um sich in Ihrem Nutzerkonto anzumelden. Das Connect-Gateway unterstützt Identitätsübernahme des Dienstkontos. Wenn Sie also in Ihrem eigenen Nutzerkonto angemeldet sind, können Sie ein Dienstkonto verwenden, um mit Clustern zu interagieren, wie in den folgenden Abschnitten gezeigt.
Registrierten Cluster auswählen
Wenn Sie den Namen des Clusters, auf den Sie zugreifen möchten, nicht kennen, können Sie mit dem folgenden Befehl alle aktuell registrierten Cluster in der Flotte aufrufen:
gcloud container fleet memberships list
Hier werden alle Cluster aus Ihrer Flotte aufgelistet, einschließlich der Mitgliedschaftsnamen und externen IDs. Jeder Cluster in einer Flotte hat einen eindeutigen Mitgliedschaftsnamen. Bei GKE-Clustern stimmt der Name der Mitgliedschaft in der Regel mit dem Namen überein, den Sie beim Erstellen des Clusters vergeben haben, sofern der Name des Clusters bei der Registrierung nicht eindeutig war.
kubeconfig des Cluster-Gateways abrufen
Verwenden Sie den folgenden Befehl, um die kubeconfig abzurufen, die Sie zum Interagieren mit dem angegebenen Cluster benötigen:
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
Ersetzen Sie MEMBERSHIP_NAME durch den Mitgliedschaftsnamen der Flotte für Ihren Cluster.
Dieser Befehl gibt eine spezielle Connect-Gateway-spezifische kubeconfig zurück, mit der
Sie über das Connect-Gateway eine Verbindung zum Cluster herstellen können.
Wenn Sie ein Dienstkonto anstelle Ihres eigenen Google Cloud Kontos verwenden möchten,
legen Sie mit gcloud config die E-Mail-Adresse des Dienst
kontos auf auth/impersonate_service_account fest.
Führen Sie die folgenden Befehle aus, um die Clusteranmeldedaten abzurufen, die für die Interaktion mit dem Connect-Gateway über ein Dienstkonto verwendet werden. Beachten Sie Folgendes:
- Google Distributed Cloud-Cluster (nur Software) auf Bare-Metal-Servern und VMware: Der Mitgliedschaftsname ist derselbe wie der Clustername.
GKE on AWS: Verwenden Sie
gcloud container aws clusters get-credentials.GKE on Azure: Verwenden Sie
gcloud container azure clusters get-credentials.
Weitere Informationen dazu, wie Sie Nutzern erlauben, die Identität eines Dienstkontos zu übernehmen, finden Sie unter Zugriff auf Dienstkonten verwalten.
gcloud config set auth/impersonate_service_account SA_EMAIL_ADDRESS
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
Ersetzen Sie SA_EMAIL_ADDRESS durch die E-Mail-Adresse des Dienstkontos. Weitere Informationen dazu, wie Sie Nutzern erlauben, die Identität eines Dienstkontos zu übernehmen, finden Sie unter Zugriff auf Dienstkonten verwalten.
Befehle für den Cluster ausführen
Sobald Sie die erforderlichen Anmeldedaten haben, können Sie mitkubectl odergo-client wie bei jedem Kubernetes-Cluster Befehle ausführen. Ihre Ausgabe sollte in etwa so aussehen:
# Get namespaces in the Cluster.
kubectl get namespaces
NAME STATUS AGE
default Active 59d
gke-connect Active 4d
`kubectl exec/cp/attach/port-forward`-Befehle
Die folgenden kubectl-Befehle sind Streamingbefehle und haben zusätzliche Anforderungen:
attachcpexecport-forward
Um diese Befehle auszuführen, müssen die folgenden Anforderungen erfüllt sein:
Cluster müssen für die Befehle
attach,cpundexecVersion 1.30 oder höher und für den Befehlport-forwardVersion 1.31 oder höher haben.Der
kubectl-Client muss Version 1.31 oder höher haben. Die Clientversion finden Sie in der Ausgabe des Befehlskubectl version. Informationen zum Installieren einer neueren Version vonkubectl, finden Sie unter Tools installieren.Nutzer und Dienstkonten müssen über IAM oder RBAC den folgenden zusätzlichen Zugriff auf die Kubernetes API haben:
- IAM: Weisen Sie eine Rolle zu, die die
gkehub.gateway.streamBerechtigung enthält. Die vordefinierte Rolleroles/gkehub.gatewayAdminenthält diese Berechtigung. Sie können diese Berechtigung auch einer benutzerdefinierten Rolle zuweisen. RBAC: Weisen Sie eine Rolle oder ClusterRole zu, die
getZugriff auf diepods/exec,pods/portforwardundpods/attachAPI-Unterressourcen enthält, wie im folgenden Beispiel für Rolle und RoleBinding:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: stream-role namespace: NAMESPACE # Specify the namespace rules: - apiGroups: ["*"] resources: ["pods/exec", "pods/attach", "pods/portforward"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: stream-rolebinding namespace: NAMESPACE # Specify the namespace roleRef: apiGroup: "rbac.authorization.k8s.io" kind: Role name: stream-role subjects: - kind: Group name: EMAIL # Specify the group that should have stream accessErsetzen Sie Folgendes:
NAMESPACE: Der Namespace für die Rolle und RoleBinding.EMAIL: Die E-Mail-Adresse der Gruppe , die Streamingzugriff haben soll, wenn der Cluster RBAC mit Gruppenunterstützt.
Die Standard-ClusterRole
cluster-adminenthält ebenfalls diese Berechtigungen.
- IAM: Weisen Sie eine Rolle zu, die die
Fehlerbehebung
Wenn Sie Probleme haben, über das Gateway eine Verbindung zu einem Cluster herzustellen, können Sie oder Ihr Administrator nach den folgenden häufigen Problemen suchen.
- Der Server hat keinen Ressourcentyp: Diese Fehlermeldung wird möglicherweise angezeigt, wenn der Befehl
kubectl get nsfehlschlägt. Für diesen Fehler gibt es mehrere mögliche Gründe. Führen Sie IhrekubectlBefehle im detaillierten Modus aus, um weitere Details zu sehen, z. B.kubectl get ns -v 10. - Es können keine aktiven Verbindungen für Cluster gefunden werden(Projekt: 12345, Mitgliedschaft: my-cluster): Dieser Fehler wird möglicherweise angezeigt, wenn der Connect-Agent die Verbindung verliert oder nicht ordnungsgemäß installiert ist (nur bei Clustern außerhalb Google Cloud ). Um dieses Problem zu beheben, müssen Sie prüfen, ob der Namespace
gke-connectauf dem Cluster vorhanden ist. Wenn der Namespacegke-connectauf dem Cluster vorhanden ist, lesen Sie den Abschnitt Fehlerbehebung bei der Verbindung, um die Verbindungsprobleme zu beheben. - Die angeforderte URL wurde auf diesem Server nicht gefunden: Dieser Fehler kann auftreten, wenn
kubeconfigeine falsche Serveradresse enthält. Achten Sie darauf, dass die verwendete Version von Google Cloud CLI die neueste Version ist, und versuchen Sie noch einmal, das Gatewaykubeconfigzu generieren. Bearbeiten Sie diekubeconfig-Datei nicht manuell, da dies zu unerwarteten Fehlern führen kann. - Die Nutzeridentität reicht nicht aus, um die Gateway API zu verwenden: Sie benötigen die Rolle
roles/gkehub.gatewayAdmin,roles/gkehub.gatewayReaderoderroles/gkehub.gatewayEditor, um die API verwenden zu können. Weitere Informationen finden Sie im Leitfaden zur Einrichtung des Gateways unter Nutzern IAM-Rollen zuweisen. - Der Connect-Agent ist nicht berechtigt, Nutzeranfragen zu senden: Der Connect-Agent muss Anfragen in Ihrem Namen weiterleiten, die mithilfe einer Identitätsrichtlinie im Cluster angegeben wurden. Unter RBAC-Autorisierung konfigurieren im Leitfaden zur Einrichtung von Gateways finden Sie ein Beispiel zum Hinzufügen eines Nutzers zur Rolle
gateway-impersonate. - Die Nutzeridentität verfügt nicht über ausreichende RBAC-Berechtigungen zum Ausführen des Vorgangs: Sie benötigen die entsprechenden Berechtigungen für den Cluster, um die ausgewählten Vorgänge auszuführen. Im Artikel RBAC-Autorisierung konfigurieren in der Gateway-Einrichtungsanleitung finden Sie ein Beispiel zum Hinzufügen eines Nutzers zum entsprechenden
ClusterRole. - Die Nutzeridentität verfügt nicht über ausreichende Berechtigungen zum Ausführen des Vorgangs bei Verwendung von Google Groups oder Drittanbieter-Support: Eine Anleitung zum Prüfen von Logs mit Identitätsinformationen finden Sie unter GKE Identity Service-Logs erfassen.
- Connect-Agent ist fehlerhaft: Sehen Sie auf der Seite zur Fehlerbehebung bei Verbindungsproblemen nach, ob Ihr Cluster verbunden ist.
- Ausführbare Datei gke-gcloud-auth-plugin nicht gefunden oder Kein Auth-Anbieter für Name GCP gefunden: In kubectl-Versionen ab 1.26 wird dieser Fehler möglicherweise aufgrund von Änderungen an der kubectl-Authentifizierung ab GKE v1.26 angezeigt. Installieren Sie
gke-gcloud-auth-pluginund führen Siegcloud container fleet memberships get-credentials MEMBERSHIP_NAMEmit der neuesten Version von Google Cloud CLI noch einmal aus. - Verbindungen zum Gateway schlagen mit älteren Versionen der Google Cloud CLI fehl: Bei GKE-Clustern ist der Connect-Agent nicht mehr erforderlich, damit das Gateway funktioniert. Er wird daher bei der Registrierung der Mitgliedschaft nicht standardmäßig installiert. Bei früheren Versionen der Google Cloud CLI (399.0.0 und niedriger) wird davon ausgegangen, dass der Connect-Agent im Cluster vorhanden ist. Der Versuch, das Gateway mit diesen früheren Versionen zu verwenden, kann bei Clustern fehlschlagen, die mit einer neueren Version der Google Cloud CLI registriert werden. Aktualisieren Sie zur Behebung dieses Problems entweder Ihren Google Cloud CLI-Client auf eine neuere Version oder führen Sie den Befehl zur Registrierung der Mitgliedschaft mit dem Flag
--install-connect-agentnoch einmal aus. - Die Größe der unter der Gruppe
gke-security-groupszurückgegebenen Gruppen überschreitet das Limit von 8 KB für die HTTP-Headergröße. Organisieren Sie die Gruppenhierarchie neu und versuchen Sie es noch einmal: Die Anzahl der Gruppen ist zwar nicht begrenzt, aber lange Gruppennamen können dazu führen, dass die Anfrage das Limit von 8 KB für die HTTP-Headergröße überschreitet und Fehler auftreten, die eine Umstrukturierung der Gruppenhierarchie erforderlich machen.
Fehlerbehebung für `kubectl exec/cp/attach/port-forward`
Der Fehler, der bei der Ausführung des Befehls zurückgegeben wird, ist oft ein allgemeiner 400 Bad Request-Fehler, der nicht aussagekräftig genug ist, um das Problem zu beheben. Wenn Sie detailliertere
Fehlermeldungen zurückgeben möchten, verwenden Sie den kubectl Client Version 1.32 oder höher, um den Befehl
mit einer Ausführlichkeit von Stufe 4 oder höher auszuführen, z. B.:
kubectl exec -v 4 ....
Suchen Sie in den zurückgegebenen Logs nach dem Log, das die folgenden Antworten enthält:
- Für den Befehl
kubectl exec/cp/attach:RemoteCommand fallback: - Für den Befehl
kubectl port-forward:fallback to secondary dialer from primary dialer err:
Informationen zur Fehlerbehebung bei einigen der häufigsten Fehlermeldungen, die Sie vom Befehl kubectl exec -v 4 ... erhalten können, finden Sie im folgenden Abschnitt.
Fehlende IAM-Berechtigungen
Wenn die Fehlermeldung generic::permission_denied: Permission'gkehub.gateway.stream' denied on resource,
enthält, haben Sie möglicherweise nicht die erforderlichen IAM
Berechtigungen zum Ausführen des Befehls. Für dieses Feature benötigen Nutzer die IAM-Berechtigung gkehub.gateway.stream, die standardmäßig in der Rolle roles/gkehub.gatewayAdmin enthalten ist. Eine Anleitung finden Sie im
Abschnitt IAM-Berechtigungen.
Fehlende erforderliche RBAC-Berechtigungen
Wenn die Fehlermeldung ...generic::failed_precondition: failed to connect to the cluster's API Server with response (status=403 Forbidden... enthält, fehlen Ihnen RBAC-Berechtigungen. Sie benötigen eine Reihe von RBAC-Berechtigungen im Cluster, um diese kubectl-Befehle auszuführen.
Weitere Informationen zum Einrichten der erforderlichen RBAC-Berechtigungen finden Sie unter
Bei Bedarf zusätzliche RBAC-Richtlinien erstellen und anwenden.
Fehlermeldung „generic::resource_exhausted: Gateway's active_streams quota exhausted“
Es gilt ein Kontingentlimit von 10 aktiven Streams pro Flotten-Hostprojekt. Dieses Limit ist im Kontingent connectgateway.googleapis.com/active_streams definiert. Eine Anleitung zum Verwalten
Ihrer Kontingente finden Sie unter
Kontingente aufrufen und verwalten.
Fehlermeldung „generic::failed_precondition: error encountered within the cluster“
Wenn Sie den Fehler generic::failed_precondition: error encountered within
the cluster erhalten, prüfen Sie die Connect-Agent-Logs im Cluster, um die
Ursache zu ermitteln:
kubectl logs -n gke-connect -l app=gke-connect-agent --tail -1
Suchen Sie im Connect-Agent-Log nach failed to create the websocket connection....
Fehlermeldung „generic::failed_precondition: connection to Agent failed/terminated“
Wenn dieser Fehler sofort beim Ausführen des Befehls auftritt, liegt ein Problem mit der Verbindung des Clusters zu Google vor. Weitere Informationen finden Sie im allgemeinen Leitfaden zur Fehlerbehebung.
Wenn dieser Fehler auftritt, nachdem die Sitzung etwa 20 bis 30 Minuten aktiv war, ist dies aus Sicherheitsgründen eine erwartete Einschränkung. Die Verbindung muss wiederhergestellt werden.
Fehlerbehebung für kubectl --raw
Die Verwendung eines gekürzten Endpunkts (z. B. kubectl get --raw /version) kann zu folgendem Fehler führen: Error from server (NotFound): the server could not find the requested resource. Sie müssen die vollständige Serveradresse angeben.
Rufen Sie den Endpunkt aus Ihrer kubeconfig ab:
# e.g. https://connectgateway.googleapis.com/v1/projects/1234567/locations/global/gkeMemberships/my-membership
FULL_GATEWAY_ENDPOINT=$(kubectl config view --minify -o jsonpath='{.clusters[*].cluster.server}')
echo $FULL_GATEWAY_ENDPOINT
Verwenden Sie dann den Endpunkt für Ihren Befehl, z. B. mit /version:
kubectl get --raw $FULL_GATEWAY_ENDPOINT/version
Nächste Schritte
- Ein Beispiel für die Verwendung des Connect-Gateways als Teil Ihrer DevOps-Automatisierung finden Sie in unserer Anleitung In Cloud Build einbinden.