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:
Accédez à la page Google Kubernetes Engine dans la console Google Cloud.
Dans la liste des clusters, cliquez sur le nom de votre cluster.
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 :
- Sur la page "Détails du cluster", cliquez sur Modifier Workload Identity.
- Dans la boîte de dialogue Modifier Workload Identity, cochez la case Activer Workload Identity.
- 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
où 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
Une fois le projet de votre cluster sélectionné, accédez à la page IAM et administration de la console Google Cloud.
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
Pour accorder à
gcp-sa-gkehub
le rôlegkehub.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
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
Exécutez la commande suivante pour accorder au compte de service le rôle
roles/gkehub.serviceAgent
dans les deux projets et leroles/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.
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
etgkehub.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
Créez un compte de service comme suit :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
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.
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
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.
Suivez les instructions de Config Connector pour créer un compte de service.
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.
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.