Voraussetzungen für GKE-Cluster in Google Cloud

Wenn Sie einen GKE-Cluster in Google Cloud registrieren, müssen Sie je nach ausgewählter Registrierungsoption möglicherweise einen oder mehrere der folgenden Schritte ausführen, bevor Sie den Cluster registrieren. In diesem Leitfaden wird davon ausgegangen, dass Sie die allgemeinen Voraussetzungen für die Clusterregistrierung bereits ausgeführt haben.

Identitätsföderation von Arbeitslasten für GKE aktivieren

Wir empfehlen die Registrierung Ihrer GKE-Cluster mit aktivierter Identitätsförderung von Arbeitslasten für Flotten, wodurch eine konsistente Möglichkeit für Anwendungen auf den Clustern geschaffen wird, sich bei Google Cloud APIs und -Diensten zu authentifizieren. Weitere Informationen zu den Vorteilen der Aktivierung der Identitätsförderung von Arbeitslasten für Flotten finden Sie unter Identitätsförderung von Arbeitslasten für Flotten verwenden.

Damit Sie dieses Feature verwenden können, muss die Identitätsförderung von Arbeitslasten für GKE vor der Registrierung für den Cluster aktiviert sein. Die Registrierung eines GKE-Clusters mit der Identitätsförderung von Arbeitslasten für Flotten ohne Aktivierung der Identitätsförderung von Arbeitslasten für GKE im Cluster kann zu Inkonsistenzen bei der Bestätigung der Identität durch Arbeitslasten im Cluster führen. Diese Konfiguration wird nicht unterstützt. Für Autopilot-Cluster ist die Identitätsförderung von Arbeitslasten für GKE standardmäßig aktiviert.

gcloud

Um zu prüfen, ob die Identitätsförderung von Arbeitslasten für GKE für Ihren Cluster aktiviert ist, führen Sie folgenden Befehl aus, der den Workload Identity-Pool des Clusters auflistet: Wenn Sie noch keine Standardzone oder -region für gcloud angegeben haben, müssen Sie beim Ausführen dieses Befehls das Flag --region oder --zone angeben.

gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"

Ersetzen Sie Folgendes:

  • CLUSTER_NAME ist der name des GKE-Clusters.

Wenn ein Ergebnis ähnlich dem folgenden angezeigt wird, ist die Identitätsförderung von Arbeitslasten für GKE bereits auf Ihrem Cluster aktiviert:

GKE_PROJECT_ID.svc.id.goog

Wenn keine Ergebnisse vorhanden sind, ist die Identitätsförderung von Arbeitslasten für GKE nicht aktiviert. Folgen Sie der Anleitung unter Identitätsförderung von Arbeitslasten für GKE aktivieren.

Console

So prüfen Sie, ob die Identitätsförderung von Arbeitslasten für GKE für Ihren Cluster aktiviert ist:

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen Ihres Clusters.

  3. Prüfen Sie auf der Seite mit den Clusterdetails im Abschnitt Sicherheit, ob Workload Identity als Aktiviert aufgeführt ist.

Wenn Workload Identity deaktiviert ist und Sie dieses Feature aktivieren möchten, gehen Sie so vor:

  1. Klicken Sie auf der Seite mit den Clusterdetails auf Workload Identity bearbeiten.
  2. Klicken Sie im Dialogfeld Workload Identity bearbeiten das Kästchen Workload Identity aktivieren an.
  3. Klicken Sie auf Änderungen speichern.

Berechtigungen zum Registrieren eines Clusters in einem anderen Projekt erteilen

Für die Registrierung eines GKE-Clusters in der Flotte in seinem eigenen Projekt sind keine speziellen Berechtigungen erforderlich, außer denen, die unter Zugriffsberechtigungen erteilen beschrieben sind. Wenn Sie einen GKE-Cluster des zugehörigen Projekts (GKE_PROJECT) bei einer Flotte in einem anderen Projekt (FLEET_HOST_PROJECT) registrieren möchten, muss das FLEET_HOST_PROJECT Dienst-Agent-Konto gcp-sa-gkehub die Rolle gkehub.serviceAgent im Projekt GKE_PROJECT haben. Diese Rolle gewährt dem Dienstkonto die Berechtigungen zum Verwalten von Clusterressourcen in diesem Projekt.

Mit der gcloud CLI oder der Google Cloud Console können Sie prüfen, ob das Dienstkonto gcp-sa-gkehub des Hostprojekts der Flotte die erforderliche Rolle im Projekt des Clusters hat.

gcloud

Führen Sie dazu diesen Befehl aus:

gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub

Dabei gilt: GKE_PROJECT_ID ist die ID des Projekts Ihres Clusters.

Wenn das Flotten-Hostprojekt gcp-sa-gkehub die erforderlichen Rollen im Projekt Ihres Clusters hat, sollte dies in der Ausgabe im Format service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com angezeigt werden. Beispiel:

- members:
  - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
  role: roles/gkehub.serviceAgent

Console

  1. Nachdem Sie das Projekt Ihres Clusters ausgewählt haben, rufen Sie die Seite IAM & Verwaltung in der Google Cloud Console auf.

    Zur Seite "IAM & Verwaltung"

  2. Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen, um die vollständige Zulassungsrichtlinie anzusehen, einschließlich Dienst-Agents.

Wenn das Dienstkonto des Flotten-Hostprojekts gcp-sa-gkehub die erforderlichen Rollen im Projekt Ihres Clusters hat, sollte dies in dieser Liste im Format service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com angezeigt werden.

Wenn der Dienst-Agent nicht in der IAM-Zulassungsrichtlinie des Projekts aufgeführt ist, gehen Sie so vor, um die erforderlichen Berechtigungen zu aktualisieren:

gcloud

  1. Um gcp-sa-gkehub die Rolle gkehub.serviceAgent zuzuweisen, müssen Sie zuerst prüfen, ob dieses Dienstkonto im Flotten-Hostprojekt vorhanden ist. Wenn Sie bereits Cluster in diesem Flottenprojekt registriert haben, sollte es dieses Dienstkonto geben. Sehen Sie sich dazu die IAM-Zulassungsrichtlinie für das Flottenhostprojekt an:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
    
  2. Wenn Sie das Dienstkonto gcp-sa-gkehub erstellen müssen, führen Sie den folgenden Befehl aus:

    gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
    

    Dieser Befehl sollte Folgendes ausgeben:

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. Führen Sie den folgenden Befehl aus, um dem Dienstkonto die Rolle roles/gkehub.serviceAgent in beiden Projekten und die roles/gkehub.crossProjectServiceAgent im Projekt des Clusters zuzuweisen:

    GKE_PROJECT_ID=GKE_PROJECT_ID
    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.crossProjectServiceAgent
    

    Dabei gilt:

    • GKE_PROJECT_ID ist die Google Cloud-Projekt-ID des GKE-Clusters.
    • FLEET_HOST_PROJECT_ID ist die ID des Google Cloud-Projekts, in dem Sie Cluster registrieren möchten. Informationen zum Ermitteln dieses Werts
  4. Führen Sie den folgenden Befehl noch einmal aus, um zu prüfen, ob die Rollenbindung erteilt wurde:

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    Wenn der Name des Dienstkontos zusammen mit den Rollen gkehub.serviceAgent und gkehub.crossProjectServiceAgent angezeigt wird, wurden die Rollenbindungen erteilt. Beispiel:

    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.serviceAgent
    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.crossProjectServiceAgent
    

Dienstkonto für Terraform konfigurieren

Wenn Sie mit Terraform einen Google Kubernetes Engine-Cluster registrieren möchten, müssen Sie ein Dienstkonto erstellen, mit dem Terraform auf die Fleet API zugreifen kann, um eine Mitgliedschaft zu erstellen.

gcloud

  1. So erstellen Sie ein Dienstkonto:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
    
  2. Binden Sie die IAM-Rolle gkehub.admin an das Dienstkonto, damit Terraform es mit der Fleet API verwenden kann:

    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.admin"
    

    Wenn Sie einen neuen Cluster mit Terraform erstellen und dann registrieren möchten, binden Sie auch die Rolle roles/container.admin an das Dienstkonto an, damit Terraform dieses Dienstkonto verwenden kann, um auf die GKE API zum Erstellen eines Clusters zuzugreifen.

    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/container.admin"
    

    Ersetzen Sie Folgendes:

    • 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.
  3. Laden Sie die JSON-Datei mit dem privaten Schlüssel des Dienstkontos herunter, wie unter Google Cloud-Dienstkonto mit gcloud erstellen beschrieben. Sie benötigen diese Datei, um Cluster mit Terraform zu erstellen und zu registrieren.

Dienstkonto für Config Connector konfigurieren

Wenn Sie zum Registrieren eines GKE-Clusters Config Connector verwenden möchten, gehen Sie so vor:

gcloud

  1. Prüfen Sie, ob das Config Connector-Add-on installiert ist. Sie sollten eine Version von Config Connector über 1.47.0 haben.

  2. Folgen Sie der Anleitung zu Config Connector, um ein Dienstkonto zu erstellen.

  3. Binden Sie die IAM-Rolle gkehub.admin an dieses Dienstkonto, damit Ihr Config Connector dieses Dienstkonto für den Zugriff auf die Fleet API verwenden kann:

    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.admin"
    

    Wenn Sie einen neuen Cluster mit Config Connector erstellen und dann registrieren möchten, müssen Sie auch die Rolle roles/container.admin an das Dienstkonto binden, damit der Config Connector-Controller mit diesem Dienstkonto auf die GKE API zugreifen kann, um einen Cluster zu erstellen.

    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/container.admin"
    

    Ersetzen Sie Folgendes:

    • 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.
  4. Folgen Sie der Config Connector-Anweisung, Ihren Config Connector mit diesem Dienstkonto zu konfigurieren.

Nächste Schritte

Folgen Sie der Anleitung zum Registrieren eines Clusters.