Für die Registrierung eines Kubernetes-Clusters außerhalb von Google Cloud sind zusätzlich zu den allgemeinen Voraussetzungen die folgenden Schritte erforderlich.
Netzwerkverbindung sicherstellen
Um den Cluster registrieren zu können, müssen die folgenden Domains über Ihren Kubernetes-Cluster erreichbar sein.
cloudresourcemanager.googleapis.com
zum Auflösen von Metadaten in Bezug auf das Google Cloud-Projekt, mit dem der Cluster verbunden ist.oauth2.googleapis.com
zum Abrufen kurzlebiger OAuth-Tokens für Agent-Vorgänge in Bezug aufgkeconnect.googleapis.com
.gkeconnect.googleapis.com
zur Einrichtung des Kanals, der zum Empfangen von Anfragen von Google Cloud und für die Ausgabe von Antworten verwendet wird.gkehub.googleapis.com
zum Erstellen von Ressourcen für die Google Cloud-seitige Flotten-Mitgliedschaft, die dem Cluster entsprechen, den Sie mit Google Cloud verbinden.www.googleapis.com
zum Authentifizieren von Dienst-Tokens aus eingehenden Google Cloud-Dienstanfragen.gcr.io
undstorage.googleapis.com
zum Abrufen des GKE Connect-Agent-Images.
Wenn Sie den Cluster mit Workload Identity für Flotten registrieren möchten, müssen auch die folgenden Domains erreichbar sein:
securetoken.googleapis.com
iamcredentials.googleapis.com
sts.googleapis.com
Wenn Sie einen Proxy für Connect verwenden, müssen Sie auch die Zulassungsliste des Proxys mit den relevanten Domains aktualisieren.
Wenn Sie gcloud zur Registrierung Ihres Kubernetes-Clusters nutzen, müssen diese Domains auch in der Umgebung erreichbar sein, in der Sie die gcloud-Befehle ausführen.
VPC Service Controls verwenden
Wenn Sie VPC Service Controls für zusätzliche Datensicherheit in Ihrer Anwendung verwenden möchten, müssen Sie darauf achten, dass die folgenden Dienste in Ihrem Dienstperimeter enthalten sind:
- Resource Manager API (
cloudresourcemanager.googleapis.com
) - GKE Connect API (
gkeconnect.googleapis.com
) - Fleet API (
gkehub.googleapis.com
)
Wenn Sie Ihren Cluster bei aktivierter Workload Identity der Flotte registrieren möchten, benötigen Sie außerdem die folgenden Dienste:
- IAM Service Account Credentials API (
iamcredentials.googleapis.com
) - Security Token Service API (
sts.googleapis.com
)
Außerdem müssen Sie eine private Verbindung für den Zugriff auf die erforderlichen APIs einrichten. Informationen dazu finden Sie unter Private Verbindung einrichten.
Identität einrichten
Für alle manuellen Clusterregistrierungsoptionen außerhalb von Google Cloud müssen Sie die Authentifizierung bei Google konfigurieren. Dies kann entweder sein:
- Workload Identity für Flotten (empfohlen, sofern verfügbar). Weitere Informationen zu den Vorteilen der Aktivierung von Workload Identity für Flotten finden Sie unter Workload Identity für Flotten verwenden.
- Ein Google Cloud-Dienstkonto
Angehängte Cluster können mit aktivierter Workload Identity der Flotte aktiviert werden, wenn der Cluster die unten beschriebenen Voraussetzungen für angehängte Cluster erfüllt. Registrieren Sie andernfalls angehängte Cluster bei einem Google Cloud-Dienstkonto, um sich zu authentifizieren. Im nächsten Abschnitt erfahren Sie, wie Sie ein Dienstkonto erstellen.
Google Cloud-Dienstkonto mit gcloud
erstellen
Wenn Sie einen Cluster manuell mit einem Google Cloud-Dienstkonto registrieren möchten, benötigen Sie eine JSON-Datei mit den Anmeldedaten des Dienstkontos. Um das Prinzip der geringsten Berechtigung anzuwenden, empfehlen wir, dass Sie für jeden registrierten Kubernetes-Cluster ein eigenes Dienstkonto erstellen und nur IAM-Rollen für den entsprechenden Cluster daran binden.
Um diese Datei zu erstellen, führen Sie die folgenden Schritte aus:
gcloud
Erstellen Sie ein Dienstkonto mit dem folgenden Befehl:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
Um alle Dienstkonten eines Projekts aufzulisten, führen Sie folgenden Befehl aus:
gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID
Wenn Sie für jeden registrierten Kubernetes-Cluster ein eigenes Dienstkonto erstellen, binden Sie die IAM-Rolle „gkehub.connect“ an das Dienstkonto des entsprechenden Clusters mit einer IAM-Bedingung für den Namen der Mitgliedschaft des Clusters:
MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect" \
--condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"
Alternativ können Sie die Rolle an das Dienstkonto für alle Cluster im Projekt ohne die Bedingung binden.
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect"
Laden Sie die JSON-Datei mit dem privaten Schlüssel des Dienstkontos herunter. Sie verwenden diese Datei beim Registrieren eines Clusters:
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
--iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
--project=${FLEET_HOST_PROJECT_ID}
Dabei gilt:
- FLEET_HOST_PROJECT_ID ist die ID des Google Cloud-Projekts, in dem Sie Cluster registrieren möchten. Informationen zum Ermitteln dieses Werts
- SERVICE_ACCOUNT_NAME der Anzeigename ist, den Sie für das [Dienstkonto] auswählen.
- MEMBERSHIP_NAME ist der Name der Mitgliedschaft, den Sie zur eindeutigen Identifizierung des Clusters bei der Registrierung auswählen.
- LOCAL_KEY_PATH ist ein lokaler Dateipfad, unter dem Sie den privaten Schlüssel des Dienstkontos, eine JSON-Datei, speichern. Es wird empfohlen, die Datei nach dem Namen des Dienstkontos und Ihrer Projekt-ID zu benennen. Beispiel:
/tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json
.
Voraussetzungen für angehängten Cluster
Abhängig vom Typ des Kubernetes-Clusters eines Drittanbieters, den Sie als angehängten Cluster registrieren möchten, müssen Sie möglicherweise einige zusätzliche Anforderungen erfüllen, um den Connect-Agent zu installieren und/oder Workload Identity der Flotte zu verwenden.
Sicherheitskontextbeschränkungen (Security Context Constraints, SCC) (OpenShift-Cluster) konfigurieren
Auf den Clustern OpenShift OKE und OKD können Administratoren SCCs verwenden, um Berechtigungen für Pods zu steuern. Damit die Installation von Connect Agent im Cluster möglich ist, müssen Sie einen benutzerdefinierten SCC erstellen.
Die folgende SCC-Definition gibt eine Reihe von Bedingungen an, mit denen der Connect Agent ausgeführt werden muss, um in den Cluster aufgenommen zu werden:
# Connect Agent SCC apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: gke-connect-scc allowPrivilegeEscalation: false # This is redundant with non-root + disallow privilege escalation, # but we provide it for defense in depth. requiredDropCapabilities: - ALL runAsUser: type: MustRunAsNonRoot seLinuxContext: type: RunAsAny supplementalGroups: type: MustRunAs ranges: - min: 1 max: 65535 fsGroup: type: MustRunAs ranges: - min: 1 max: 65535 volumes: - secret - projected readOnlyRootFilesystem: true seccompProfiles: - docker/default users: groups: # Grants all service accounts in the gke-connect namespace access to this SCC - system:serviceaccounts:gke-connect
Wenn Sie Ihre SCC-Definition gespeichert haben, gke-connect-scc.yaml
, verwenden Sie das OpenShiftoc
-Befehlszeilentool zum Erstellen desgke-connect-scc
SCC für den Cluster:
$ oc create -f gke-connect-scc.yaml
Prüfen Sie mit dem folgenden oc
-Befehl, ob der benutzerdefinierte SCC erstellt wurde:
$ oc get scc | grep gke-connect-scc
Anforderungen für Workload Identity der Flotte
Sie können angehängte Cluster bei aktivierter Flotte-Workload Identity registrieren, wenn Ihre Plattform einen öffentlichen OIDC-Endpunkt für Ihren Cluster erstellt (oder Sie einen erstellen können) oder wenn Sie Kubernetes-Erkennung des Dienstkontoausstellers für den Cluster aktiviert haben. Wenn Sie diese Anforderungen nicht erfüllen, müssen Sie angehängte Cluster zur Authentifizierung bei einem Google Cloud-Dienstkonto registrieren.
Informationen zu bestimmten Clustertypen finden Sie hier:
- OpenShift-Cluster: Können bei aktivierter Workload Identity der Flotte registriert werden, nachdem Sie wie oben beschrieben Ihre benutzerdefinierte SCC konfiguriert haben.
- Artcluster: Damit die Flotten-Workload Identity verwendet werden kann, muss die Erkennung des Dienstkontoausstellers aktiviert sein. Sie ist ab Kubernetes Version 1.20 standardmäßig aktiviert. Wenn Sie dieses Feature aktivieren müssen, folgen Sie der Anleitung unter Projektion des Volumes für das Dienstkonto-Token. Die Erkennung des Dienstkontoausstellers wird automatisch aktiviert, wenn das Volume-Projekt für das Dienstkonto-Token aktiviert ist.
Nächste Schritte
Folgen Sie der Anleitung zum Registrieren eines Clusters.