Configurer des services multiclusters avec un VPC partagé


Cette page décrit des scénarios de services multiclusters (MCS) courants. Les scénarios présentés sur cette page partagent les caractéristiques suivantes :

  • Deux clusters GKE : le premier cluster GKE est enregistré dans le parc de son projet. Il s'agit du projet hôte du parc. Le deuxième cluster GKE est enregistré dans le même parc. Toutefois, selon le scénario, il se peut qu'il ne se trouve pas dans le même projet. Les deux clusters GKE sont des clusters de VPC natif.
  • Même réseau VPC : les deux clusters GKE utilisent des sous-réseaux faisant partie du même réseau VPC partagé.
  • La fédération d'identité de charge de travail pour GKE est activée dans les deux clusters.

Terminologie

Les termes projet hôte de VPC partagé et projet hôte de parc GKE ont des significations différentes.

  • Le projet hôte de VPC partagé est le projet qui contient le réseau VPC partagé.
  • Le projet hôte du parc GKE est le projet contenant le parc dans lequel vous enregistrez les clusters.

Exemple

Le tableau suivant décrit des scénarios MCS courants :

Scénario Projet hôte de parc (projet contenant le premier cluster) L'emplacement du deuxième cluster
Clusters dans le même projet de service VPC partagé Un projet de service de VPC partagé Le même projet de service VPC partagé que le premier cluster
Projet hôte de VPC partagé faisant office de projet hôte de parc (un cluster dans le projet hôte de VPC partagé, un deuxième cluster dans un projet de service de VPC partagé) Le projet hôte de VPC partagé Un projet de service de VPC partagé
Clusters dans différents projets de service de VPC partagé Un projet de service de VPC partagé Un autre projet de service de VPC partagé

Prérequis

Avant de configurer une configuration inter-projets MCS, procédez comme suit:

Clusters dans le même projet de service VPC partagé

Cette section fournit un exemple de configuration MCS impliquant deux clusters GKE existants, tous deux étant situés dans le même projet de service VPC partagé :

  • Les deux clusters utilisent le même réseau VPC partagé dans le projet SHARED_VPC_HOST_PROJ.
  • Le premier cluster GKE de VPC natif FIRST_CLUSTER_NAME, dans lequel la fédération d'identité de charge de travail pour GKE est activée, est créé dans le projet FLEET_HOST_PROJ. Le projet hôte de parc est un projet de service connecté à SHARED_VPC_HOST_PROJ dans ce scénario.
  • Le deuxième cluster GKE de VPC natif SECOND_CLUSTER_NAME, dans lequel la fédération d'identité de charge de travail pour GKE est activée, est également créé dans le projet FLEET_HOST_PROJ.

Activer les API requises

Activer les API requises. La sortie Google Cloud CLI indique si une API a déjà été activée.

  1. Activez l'API Cloud DNS :

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    Dans ce scénario, le projet hôte de parc est un projet de service connecté au projet hôte de VPC partagé. L'API Cloud DNS doit être activée dans le projet hôte de VPC partagé, car il s'agit de l'emplacement où se trouve le réseau VPC partagé. GKE crée des zones privées gérées Cloud DNS dans le projet hôte et les autorise pour le réseau VPC partagé.

  2. Activer l'API GKE Hub (parc) L'API GKE Hub ne doit être activée que dans le projet hôte de parc.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    L'activation de cette API dans le projet hôte du parc crée ou garantit que le compte de service suivant existe : service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Activez les API Traffic Director, Resource Manager et de détection de services multiclusters dans le projet hôte de parc :

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    

Activer les services multiclusters dans le projet hôte de parc

  1. Activez les services multiclusters dans le projet hôte du parc :

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    L'activation des services multiclusters dans le projet hôte de parc entraîne la création du compte de service suivant ou garantit que celui-ci existe : service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Créer des liaisons IAM

  1. Créez une liaison IAM attribuant au compte de service MCS du projet hôte de parc le rôle d'agent de service MCS sur le projet hôte de VPC partagé :

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  2. Créez une liaison IAM attribuant au compte de service MCS du projet hôte de parc le rôle d'utilisateur de réseau pour son propre projet :

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Comme ce scénario utilise la fédération d'identité de charge de travail pour GKE, le compte de service GKE de l'importateur MCS du projet hôte de parc doit disposer du rôle d'utilisateur du réseau pour son propre projet.

    Remplacez les éléments suivants :

    • SHARED_VPC_HOST_PROJ : ID de projet du projet hôte de VPC partagé
    • FLEET_HOST_PROJ_NUMBER : numéro du projet hôte du parc, qui correspond au projet de service VPC partagé pour ce scénario
    • FLEET_HOST_PROJ : ID de projet du projet du premier cluster.

Enregistrer les clusters dans le parc

  1. Enregistrez le premier cluster dans le parc. L'option --gke-cluster peut être utilisée pour cette commande, car le premier cluster est situé dans le même projet que le parc sur lequel il est enregistré.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME_1 : identifiant unique de ce cluster dans ce parc. Par exemple, vous pouvez utiliser le nom du premier cluster GKE.
    • FLEET_HOST_PROJ : ID de projet du projet hôte de parc, identique à celui du projet hôte de VPC partagé dans ce scénario.
    • LOCATION : pour les clusters zonaux, la zone Compute Engine contenant le cluster, et pour les clusters régionaux, la région Compute Engine contenant le cluster.
    • FIRST_CLUSTER_NAME : nom du premier cluster.
  2. Enregistrez le deuxième cluster dans le projet hôte de parc. L'option --gke-cluster peut être utilisée pour cette commande, car le deuxième cluster se trouve également dans le projet hôte du parc.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/SECOND_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME_2 : identifiant unique de ce cluster dans ce parc. Par exemple, vous pouvez utiliser le nom du deuxième cluster GKE.
    • FLEET_HOST_PROJ : ID de projet du projet hôte de parc, identique à celui du projet hôte de VPC partagé dans ce scénario.
    • LOCATION : pour les clusters zonaux, la zone Compute Engine contenant le cluster, et pour les clusters régionaux, la région Compute Engine contenant le cluster.
    • SECOND_CLUSTER_NAME : nom du deuxième cluster.

Créer un espace de noms commun pour les clusters

  1. Assurez-vous que chaque cluster dispose d'un espace de noms dans lequel partager les services. Si nécessaire, créez un espace de noms en utilisant la commande suivante dans chaque cluster :

    kubectl create ns NAMESPACE
    

    Remplacez NAMESPACE par le nom de l'espace de noms.

Projet hôte de VPC partagé faisant office de projet hôte de parc

Cette section fournit un exemple de configuration MCS impliquant deux clusters GKE existants :

  • Le premier cluster GKE de VPC natif FIRST_CLUSTER_NAME, dans lequel la fédération d'identité de charge de travail pour GKE est activée, a été créé dans le projet FLEET_HOST_PROJ. Le projet hôte de parc est également le projet hôte de VPC partagé dans ce scénario.
  • Le deuxième cluster GKE de VPC natif SECOND_CLUSTER_NAME, dans lequel la fédération d'identité de charge de travail pour GKE est activée, a été créé dans le projet SECOND_CLUSTER_PROJ.

Activer les API requises

Activer les API requises. La sortie Google Cloud CLI indique si une API a déjà été activée.

  1. Activez l'API Cloud DNS :

    gcloud services enable dns.googleapis.com \
        --project FLEET_HOST_PROJ
    

    Dans ce scénario, le projet hôte de parc est également le projet hôte de VPC partagé. L'API Cloud DNS doit être activée dans le projet hôte de VPC partagé, car il s'agit de l'emplacement où se trouve le réseau VPC partagé. GKE crée des zones privées gérées par Cloud DNS dans le projet hôte et les autorise pour le réseau VPC partagé.

  2. Activer l'API GKE Hub (parc) L'API GKE Hub ne doit être activée que dans le projet hôte de parc.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    L'activation de l'API GKE Hub dans le projet hôte de parc entraîne la création du compte de service suivant ou garantit que celui-ci existe : service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Activez les API Traffic Director, Resource Manager et de détection de services multiclusters dans le projet hôte de parc, ainsi que dans le projet du deuxième cluster :

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Activer les services multiclusters dans le projet hôte de parc

  1. Activez les services multiclusters dans le projet hôte du parc :

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    L'activation des services multiclusters dans le projet hôte de parc entraîne la création du compte de service suivant ou garantit que celui-ci existe : service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Créer des liaisons IAM

  1. Créez une liaison IAM attribuant au compte de service du parc GKE du projet hôte de parc le rôle d'agent de service GKE sur le projet du deuxième cluster :

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \
        --role roles/gkehub.serviceAgent
    
  2. Créez une liaison IAM attribuant au compte de service MCS du projet hôte de parc le rôle d'agent de service MCS sur le projet du deuxième cluster :

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Créez une liaison IAM attribuant au compte de service MCS de chaque projet le rôle d'utilisateur du réseau pour son propre projet :

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Comme ce scénario utilise la fédération d'identité de charge de travail pour GKE, le compte de service GKE de l'importateur MCS de chaque projet doit disposer du rôle d'utilisateur du réseau pour son propre projet.

    Remplacez les éléments suivants :

    • SECOND_CLUSTER_PROJ : ID de projet du projet du deuxième cluster.
    • FLEET_HOST_PROJ : ID de projet du projet du premier cluster.
    • FLEET_HOST_PROJ_NUMBER : numéro du projet hôte de parc, lequel correspond au projet hôte de VPC partagé pour ce scénario.

Enregistrer les clusters dans le parc

  1. Enregistrez le premier cluster dans le parc. L'option --gke-cluster peut être utilisée pour cette commande, car le premier cluster est situé dans le même projet que le parc sur lequel il est enregistré.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME_1 : identifiant unique de ce cluster dans ce parc. Par exemple, vous pouvez utiliser le nom du premier cluster GKE.
    • FLEET_HOST_PROJ : ID de projet du projet hôte de parc, identique à celui du projet hôte de VPC partagé dans ce scénario.
    • LOCATION : pour les clusters zonaux, la zone Compute Engine contenant le cluster, et pour les clusters régionaux, la région Compute Engine contenant le cluster.
    • FIRST_CLUSTER_NAME : nom du premier cluster.
  2. Enregistrez le deuxième cluster dans le parc. L'option --gke-uri doit être utilisée pour cette commande, car le deuxième cluster ne se trouve pas dans le même projet que le parc. Vous pouvez obtenir l'URI complet du cluster en exécutant la commande gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME_2 : identifiant unique de ce cluster dans ce parc. Par exemple, vous pouvez utiliser le nom du deuxième cluster GKE.
    • FLEET_HOST_PROJ : ID de projet du projet hôte de parc, identique à celui du projet hôte de VPC partagé dans ce scénario.
    • LOCATION : remplacez LOCATION par :
      • la zone Compute Engine du cluster s'il s'agit d'un cluster zonal ;
      • la région Compute Engine du cluster s'il s'agit d'un cluster régional.
    • SECOND_CLUSTER_PROJECT : projet contenant le deuxième cluster.
    • SECOND_CLUSTER_NAME : nom du deuxième cluster.

Créer un espace de noms commun pour les clusters

  1. Assurez-vous que chaque cluster dispose d'un espace de noms dans lequel partager les services. Si nécessaire, créez un espace de noms en utilisant la commande suivante dans chaque cluster :

    kubectl create ns NAMESPACE
    

    Remplacez NAMESPACE par le nom de l'espace de noms.

Clusters dans différents projets de service de VPC partagé

Cette section fournit un exemple de configuration MCS impliquant deux clusters GKE existants, chacun étant situé dans un projet de service de VPC partagé distinct.

  • Les deux clusters utilisent le même réseau VPC partagé dans le projet SHARED_VPC_HOST_PROJ.
  • Le premier cluster GKE de VPC natif FIRST_CLUSTER_NAME, dans lequel la fédération d'identité de charge de travail pour GKE est activée, a été créé dans le projet FLEET_HOST_PROJ. Le projet hôte de parc est un projet de service connecté à SHARED_VPC_HOST_PROJ dans ce scénario.
  • Le deuxième cluster GKE de VPC natif SECOND_CLUSTER_NAME, dans lequel la fédération d'identité de charge de travail pour GKE est activée, a été créé dans le projet SECOND_CLUSTER_PROJ. Le projet SECOND_CLUSTER_PROJ est également un projet de service connecté à SHARED_VPC_HOST_PROJ dans ce scénario.

Activer les API requises

Activer les API requises. La sortie Google Cloud CLI indique si une API a déjà été activée.

  1. Activez l'API Cloud DNS :

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    Dans ce scénario, le projet hôte de parc est un projet de service connecté au projet hôte de VPC partagé. L'API Cloud DNS doit être activée dans le projet hôte de VPC partagé, car il s'agit de l'emplacement où se trouve le réseau VPC partagé. GKE crée des zones privées gérées Cloud DNS dans le projet hôte et les autorise pour le réseau VPC partagé.

  2. API GKE Hub (parc) L'API GKE Hub ne doit être activée que dans le projet hôte de parc FLEET_HOST_PROJ.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    L'activation de cette API dans le projet hôte du parc crée ou garantit que le compte de service suivant existe : service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Activez les API Traffic Director, Resource Manager et de détection de services multiclusters dans le projet hôte de parc, ainsi que dans le projet du deuxième cluster :

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project=FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Activer les services multiclusters dans le projet hôte de parc

  1. Activez les services multiclusters dans le projet hôte du parc :

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    L'activation des services multiclusters dans le projet hôte de parc entraîne la création du compte de service suivant ou garantit que celui-ci existe : service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Créer des liaisons IAM

  1. Créez une liaison IAM attribuant au compte de service GKE Hub du projet hôte de parc le rôle d'agent de service GKE sur le projet du deuxième cluster :

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \
        --role roles/gkehub.serviceAgent
    
  2. Créez une liaison IAM attribuant au compte de service MCS du projet hôte de parc le rôle d'agent de service MCS sur le projet du deuxième cluster :

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Créez une liaison IAM attribuant au compte de service MCS du projet hôte de parc le rôle d'agent de service MCS sur le projet hôte de VPC partagé :

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  4. Créez une liaison IAM attribuant au compte de service MCS de chaque projet le rôle d'utilisateur du réseau pour son propre projet :

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Comme ce scénario utilise la fédération d'identité de charge de travail pour GKE, le compte de service GKE de l'importateur MCS de chaque projet doit disposer du rôle d'utilisateur du réseau pour son propre projet.

    Remplacez les éléments suivants si nécessaire dans les commandes précédentes :

    • SECOND_CLUSTER_PROJ : ID de projet du projet du deuxième cluster.
    • SHARED_VPC_HOST_PROJ : ID de projet du projet hôte de VPC partagé. Dans cet exemple, les deux clusters utilisent le même réseau VPC partagé, mais aucun ne se trouve dans le projet hôte de VPC partagé.
    • FLEET_HOST_PROJ : ID de projet du projet du premier cluster.
    • FLEET_HOST_PROJ_NUMBER : numéro du projet hôte de parc.

Enregistrer les clusters dans le parc

  1. Enregistrez le premier cluster dans le parc. L'option --gke-cluster peut être utilisée pour cette commande, car le premier cluster est situé dans le même projet que le parc sur lequel il est enregistré.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME_1 : identifiant unique de ce cluster dans ce parc. Par exemple, vous pouvez utiliser le nom du premier cluster GKE.
    • FLEET_HOST_PROJ : ID de projet du projet hôte de parc, identique à celui du projet hôte de VPC partagé dans ce scénario.
    • LOCATION : pour les clusters zonaux, la zone Compute Engine contenant le cluster, et pour les clusters régionaux, la région Compute Engine contenant le cluster.
    • FIRST_CLUSTER_NAME : nom du premier cluster.
  2. Enregistrez le deuxième cluster dans le parc. L'option --gke-uri doit être utilisée pour cette commande, car le deuxième cluster ne se trouve pas dans le même projet que le parc. Vous pouvez obtenir l'URI complet du cluster en exécutant la commande gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME_2 : identifiant unique de ce cluster dans ce parc. Par exemple, vous pouvez utiliser le nom du deuxième cluster GKE.
    • FLEET_HOST_PROJ : ID de projet du projet hôte de parc, identique à celui du projet hôte de VPC partagé dans ce scénario.
    • LOCATION : remplacez LOCATION par :
      • la zone Compute Engine du cluster s'il s'agit d'un cluster zonal ;
      • la région Compute Engine du cluster s'il s'agit d'un cluster régional.
    • SECOND_CLUSTER_PROJECT : projet contenant le deuxième cluster.
    • SECOND_CLUSTER_NAME : nom du deuxième cluster.

Créer un espace de noms commun pour les clusters

  1. Assurez-vous que chaque cluster dispose d'un espace de noms dans lequel partager les services. Si nécessaire, créez un espace de noms en utilisant la commande suivante dans chaque cluster :

    kubectl create ns NAMESPACE
    

    Remplacez NAMESPACE par le nom de l'espace de noms.

Étape suivante