L'enregistrement d'un cluster Kubernetes en dehors de Google Cloud nécessite les étapes suivantes en plus du respect des conditions préalables générales.
Vérifier la connectivité réseau
Pour enregistrer votre cluster Kubernetes, vous devez vous assurer que les domaines ci-dessous sont accessibles depuis celui-ci.
cloudresourcemanager.googleapis.com
résout les métadonnées relatives au projet Google Cloud auquel le cluster est connecté.oauth2.googleapis.com
obtient des jetons OAuth de courte durée pour les opérations d'agent surgkeconnect.googleapis.com
.gkeconnect.googleapis.com
établit le canal utilisé pour recevoir les requêtes de Google Cloud et envoyer des réponses.gkehub.googleapis.com
crée des ressources d'abonnements au parc côté Google Cloud qui correspondent au cluster que vous connectez à Google Cloud.www.googleapis.com
authentifie les jetons de service des demandes de service Google Cloud entrantes.gcr.io
etstorage.googleapis.com
extraient l'image de l'agent GKE Connect.
Si vous souhaitez enregistrer le cluster à l'aide de Workload Identity pour parc, les domaines suivants doivent également être accessibles :
securetoken.googleapis.com
iamcredentials.googleapis.com
sts.googleapis.com
Si vous utilisez un proxy pour Connect, vous devez également mettre à jour la liste d'autorisation du proxy avec les domaines concernés.
Si vous utilisez gcloud pour enregistrer votre cluster Kubernetes, ces domaines doivent également être accessibles dans l'environnement où vous exécutez les commandes gcloud.
Utiliser VPC Service Controls
Si vous souhaitez utiliser VPC Service Controls pour renforcer la sécurité des données dans votre application, vous devez vous assurer que les services suivants se trouvent dans votre périmètre de service :
- API Resource Manager (
cloudresourcemanager.googleapis.com
) - API GKE Connect (
gkeconnect.googleapis.com
) - API Fleet (
gkehub.googleapis.com
)
Si vous souhaitez enregistrer votre cluster avec Workload Identity pour parc activé, vous avez également besoin des services suivants :
- API IAM Service Account Credentials (
iamcredentials.googleapis.com
) - API Security Token Service (
sts.googleapis.com
)
Vous devez également configurer la connectivité privée pour accéder aux API concernées. Découvrez comment effectuer cette opération dans la section Configurer une connectivité privée.
Configurer l'identité
Toutes les options d'enregistrement de cluster manuelles en dehors de Google Cloud vous obligent à configurer l'authentification auprès de Google. Il peut s'agir de l'un des éléments suivants :
- Workload Identity pour parc (recommandé dans les cas disponibles). Pour en savoir plus sur les avantages d'activer Workload Identity pour parc, consultez la section Utiliser Workload Identity pour parc.
- Un compte de service Google Cloud
Les clusters associés peuvent être enregistrés avec Workload Identity pour parc s'ils répondent aux conditions préalables à l'utilisation de clusters associés, comme décrit ci-dessous. Sinon, enregistrez les clusters associés avec un compte de service Google Cloud pour l'authentification. La section suivante explique comment créer un compte de service.
Créer un compte de service Google Cloud à l'aide de gcloud
Pour enregistrer manuellement un cluster à l'aide d'un compte de service Google Cloud, vous devez disposer d'un fichier JSON contenant les identifiants du compte de service. Pour suivre le principe du moindre privilège, nous vous recommandons de créer un compte de service distinct pour chaque cluster Kubernetes que vous enregistrez et de ne lui associer que des rôles IAM pour le cluster correspondant.
Pour créer ce fichier, procédez comme suit :
gcloud
Créez un compte de service en exécutant la commande suivante :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
Pour répertorier tous les comptes de service d'un projet, exécutez la commande suivante :
gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID
Si vous créez un compte de service distinct pour chaque cluster Kubernetes que vous enregistrez, associez le rôle IAM gkehub.connect au compte de service du cluster correspondant à une condition IAM sur le nom d'appartenance du cluster :
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}"
Sinon, associez le rôle au compte de service pour tous les clusters du projet sans condition.
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"
Téléchargez le fichier JSON contenant la clé privée du compte de service. Vous utilisez ce fichier lorsque vous enregistrez un cluster :
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}
où :
- 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 d'affichage que vous avez choisi pour le compte de service.
- MEMBERSHIP_NAME est le nom de l'abonnement que vous choisissez pour représenter de manière unique le cluster lors de son enregistrement.
- LOCAL_KEY_PATH est le chemin d'accès à l'emplacement local où vous souhaitez enregistrer la clé privée du compte de service, soit un fichier JSON. Nous vous recommandons de nommer le fichier en utilisant le nom du compte de service et votre ID de projet, par exemple
/tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json
.
Conditions préalables à l'utilisation de clusters associés
Selon le type de cluster Kubernetes tiers que vous souhaitez enregistrer en tant que cluster associé, vous devrez peut-être respecter d'autres exigences pour installer l'agent Connect et/ou utiliser Workload Identity pour parc.
Configurer des contraintes de contexte de sécurité (SCC) (clusters OpenShift)
Sur les clusters OpenShift OKE et OKD, les administrateurs peuvent contrôler les autorisations des pods à l'aide de contraintes SCC. Pour autoriser l'installation de l'agent Connect dans votre cluster, vous devez créer une contrainte SCC personnalisée.
L'exemple suivant de définition de la contrainte SCC spécifie l'ensemble de conditions avec lesquelles l'agent Connect doit s'exécuter pour être accepté dans le cluster :
# 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
Si vous avez enregistré votre définition de la contrainte SCC sous le nom gke-connect-scc.yaml
, utilisez l'outil de ligne de commande OpenShift oc
pour créer la contrainte SCC gke-connect-scc
associée à votre cluster, comme suit :
$ oc create -f gke-connect-scc.yaml
Pour vérifier que la contrainte SCC personnalisée a été créée, exécutez la commande oc
suivante :
$ oc get scc | grep gke-connect-scc
Conditions requises pour Workload Identity pour parc
Vous pouvez enregistrer des clusters associés avec Workload Identity pour parc si votre plate-forme crée un point de terminaison OIDC public pour votre cluster (ou vous permet d'en créer un), ou si la fonctionnalité d'identification de l'émetteur du compte de service est activée pour le cluster. Si vous ne pouvez pas remplir ces conditions, vous devez enregistrer les clusters associés avec un compte de service Google Cloud pour l'authentification.
Pour des types de clusters spécifiques, consultez les informations suivantes :
- Clusters OpenShift : vous pouvez les enregistrer avec Workload Identity pour parc après avoir configuré votre contrainte SCC personnalisée, comme décrit ci-dessus.
- Clusters de genre : exigez que l'identification de l'émetteur du compte de service soit activée afin d'utiliser Workload Identity pour parc. Cette option est activée par défaut à partir de la version 1.20 de Kubernetes. Si vous devez activer cette fonctionnalité, suivez les instructions de la section Projection du volume des jetons de comptes de service. L'identification de l'émetteur du compte de service est activée automatiquement lorsque la projection du volume des jetons de comptes de service est activée.
Étape suivante
Suivez les instructions permettant d'enregistrer un cluster.