Prérequis pour les clusters GKE sur Google Cloud

Si vous enregistrez un cluster GKE sur Google Cloud, vous devrez peut-être effectuer l'une ou plusieurs des opérations suivantes avant d'enregistrer le cluster, selon l'option d'enregistrement choisie. Dans ce guide, nous partons du principe que vous avez déjà rempli les conditions préalables générales relatives à l'enregistrement de cluster.

Activer la fédération d'identité de charge de travail pour GKE

Nous vous recommandons d'enregistrer vos clusters GKE avec Workload Identity Federation pour parc activé, ce qui fournit aux applications des clusters un mode d'authentification homogène auprès des API et services Google Cloud. Pour en savoir plus sur les avantages d'activer Workload Identity Federation pour parc, consultez la section Utiliser Workload Identity Federation pour parc.

Pour utiliser cette fonctionnalité, vous devez vous assurer que la fédération d'identité de charge de travail pour GKE est activée sur le cluster avant l'enregistrement. Si vous enregistrez un cluster GKE avec Workload Identity Federation pour parc sans activer Workload Identity Federation pour GKE, cela peut entraîner des incohérences sur la manière dont l'identité est déclarée par les charges de travail du cluster. Cette configuration n'est par ailleurs pas disponible. La fédération d'identité de charge de travail pour GKE est activée par défaut sur les clusters Autopilot.

gcloud

Pour vérifier si Workload Identity Federation pour GKE est activé sur votre cluster, exécutez la commande suivante pour répertorier le pool d'identités de la charge de travail du cluster. Si vous n'avez pas encore spécifié une zone ou une région par défaut pour gcloud, vous devez spécifier une option --region ou --zone lors de l'exécution de cette commande.

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

Remplacez les éléments suivants :

  • CLUSTER_NAME : name du cluster GKE.

Si un résultat semblable au suivant s'affiche, Workload Identity Federation pour GKE est déjà activé sur votre cluster:

GKE_PROJECT_ID.svc.id.goog

Si aucun résultat n'apparaît, Workload Identity Federation pour GKE n'est pas activé. Suivez les instructions de la page Activer Workload Identity Federation pour GKE.

Console

Pour vérifier Workload Identity Federation pour GKE est activé sur votre cluster, procédez comme suit:

  1. Accédez à la page Google Kubernetes Engine dans la console Google Cloud.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom de votre cluster.

  3. Sur la page "Détails du cluster", dans la section Sécurité, vérifiez que Workload Identity est défini sur Activé.

Si Workload Identity est désactivé et que vous souhaitez activer cette fonctionnalité, procédez comme suit :

  1. Sur la page "Détails du cluster", cliquez sur Modifier Workload Identity.
  2. Dans la boîte de dialogue Modifier Workload Identity, cochez la case Activer Workload Identity.
  3. Cliquez sur Enregistrer les modifications.

Accorder des autorisations pour enregistrer un cluster dans un autre projet

L'enregistrement d'un cluster GKE dans le parc de son propre projet ne nécessite aucune autorisation spéciale, en plus de celles décrites dans la section Accorder des autorisations d'accès. Si par contre vous souhaitez enregistrer un cluster GKE de son projet (GKE_PROJECT) vers un parc d'un autre projet (FLEET_HOST_PROJECT), le compte d'agent de service gcp-sa-gkehub de FLEET_HOST_PROJECT doit disposer du rôle gkehub.serviceAgent dans le projet GKE_PROJECT. Ce rôle accorde au compte de service les autorisations nécessaires pour gérer les ressources du cluster dans ce projet.

Pour vérifier si le compte de service gcp-sa-gkehub du projet hôte du parc dispose du rôle requis dans le projet du cluster à l'aide de gcloud CLI ou de la console Google Cloud, suivez les procédures ci-dessous.

gcloud

Exécutez la commande ci-dessous.

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

GKE_PROJECT_ID correspond à l'ID du projet de votre cluster.

Si le projet hôte du parc gcp-sa-gkehub dispose des rôles requis dans le projet de votre cluster, il doit apparaître dans le résultat au format service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com. Exemple :

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

Console

  1. Une fois le projet de votre cluster sélectionné, accédez à la page IAM et administration de la console Google Cloud.

    Accéder à la page "IAM et administration"

  2. Cochez la case Inclure les attributions de rôles fournies par Google pour afficher la stratégie d'autorisation complète, y compris les agents de service.

Si le compte de service du projet hôte du parc gcp-sa-gkehub dispose des rôles requis dans le projet du cluster, il doit apparaître dans cette liste au format service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

Si l'agent de service n'est pas répertorié dans la stratégie d'autorisation IAM du projet, procédez comme suit pour mettre à jour les autorisations nécessaires :

gcloud

  1. Pour accorder à gcp-sa-gkehub le rôle gkehub.serviceAgent, assurez-vous d'abord que ce compte de service existe dans le projet hôte du parc. Si vous avez déjà enregistré des clusters dans ce projet de parc, ce compte de service doit déjà exister. Vous pouvez le vérifier en consultant la stratégie d'autorisation IAM du projet hôte du parc :

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
    
  2. Si vous devez créer le compte de service gcp-sa-gkehub, exécutez la commande suivante :

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

    Cette commande doit générer les éléments suivants :

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. Exécutez la commande suivante pour accorder au compte de service le rôle roles/gkehub.serviceAgent dans les deux projets et le roles/gkehub.crossProjectServiceAgent dans le projet du cluster:

    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
    

    où :

    • GKE_PROJECT_ID est l'ID du projet Google Cloud du cluster GKE.
    • FLEET_HOST_PROJECT_ID est l'ID du projet Google Cloud dans lequel vous souhaitez enregistrer les clusters. Découvrez comment identifier cette valeur.
  4. Pour confirmer que la liaison de rôle est activée, exécutez à nouveau la commande suivante :

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    Si vous voyez le nom du compte de service avec les rôles gkehub.serviceAgent et gkehub.crossProjectServiceAgent, les liaisons de rôles ont été accordées. Exemple :

    - 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
    

Configurer un compte de service pour Terraform

Si vous souhaitez utiliser Terraform pour enregistrer un cluster Google Kubernetes Engine, vous devez créer un compte de service que Terraform peut utiliser pour accéder à l'API Fleet afin de créer une adhésion.

gcloud

  1. Créez un compte de service comme suit :

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
    
  2. Liez le rôle IAM gkehub.admin au compte de service afin que Terraform puisse l'utiliser avec l'API Fleet :

    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"
    

    Si vous souhaitez créer un cluster avec Terraform et l'enregistrer, vous devez également lier le rôle roles/container.admin au compte de service afin que Terraform puisse l'utiliser pour accéder à l'API GKE pour créer un cluster.

    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"
    

    Remplacez les éléments suivants :

    • FLEET_HOST_PROJECT_ID est l'ID du projet Google Cloud dans lequel vous souhaitez enregistrer les clusters. Découvrez comment identifier cette valeur.
    • SERVICE_ACCOUNT_NAME est le nom à afficher que vous avez choisi pour le compte de service.
  3. Téléchargez le fichier JSON de clé privée du compte de service, comme décrit dans la section Créer un compte de service Google Cloud à l'aide de gcloud. Vous en aurez besoin pour créer et enregistrer des clusters à l'aide de Terraform.

Créer un compte de service pour Config Connector

Si vous souhaitez utiliser Config Connector pour enregistrer un cluster GKE, procédez comme suit :

gcloud

  1. Assurez-vous d'avoir installé le module complémentaire Config Connector. Vous devez disposer d'une version de Config Connector supérieure à 1.47.0.

  2. Suivez les instructions de Config Connector pour créer un compte de service.

  3. Liez le rôle IAM gkehub.admin à ce compte de service afin que Config Connector puisse l'utiliser pour accéder à l'API Fleet :

    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"
    

    Si vous souhaitez créer un cluster avec Config Connector et l'enregistrer, vous devez également lier le rôle roles/container.admin au compte de service afin que votre contrôleur Config Connector puisse l'utiliser pour accéder à l'API GKE dans le but de créer un cluster.

    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"
    

    Remplacez les éléments suivants :

    • FLEET_HOST_PROJECT_ID est l'ID du projet Google Cloud dans lequel vous souhaitez enregistrer les clusters. Découvrez comment identifier cette valeur.
    • SERVICE_ACCOUNT_NAME est le nom à afficher que vous avez choisi pour le compte de service.
  4. Suivez les instructions de Config Connector pour configurer Config Connector avec ce compte de service.

Étape suivante

Suivez les instructions permettant d'enregistrer un cluster.