Avant de commencer

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 sur gkeconnect.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 et storage.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 :

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 :

Étape suivante

Suivez les instructions permettant d'enregistrer un cluster.