Activer les passerelles multiclusters


Cette page explique comment activer le contrôleur GKE Gateway multicluster, un contrôleur hébergé par Google qui provisionne des équilibreurs de charge externes et internes pour vos cluster GKE. Pour apprendre à utiliser les ressources Gateway pour l'équilibrage de charge du conteneur, consultez la page Déployer des ressources Gateway ou Déployer des ressources Gateway multiclusters.

Le contrôleur GKE Gateway multicluster installe les ressources GatewayClass multiclusters suivantes dans vos clusters :

  • gke-l7-global-external-managed-mc pour les passerelles multiclusters externes globales
  • gke-l7-regional-external-managed-mc pour les passerelles multiclusters externes régionales
  • gke-l7-rilb-mc pour les passerelles multiclusters internes régionales
  • gke-l7-gxlb-mc pour les passerelles multiclusters externes globales classiques

Apprenez-en plus sur les fonctionnalités des différentes ressources GatewayClass dans GKE.

Tarification

Toutes les ressources Compute Engine déployées via les contrôleurs Gateway sont facturées sur le projet dans lequel résident vos clusters GKE. Le contrôleur Gateway à cluster unique est offert sans frais supplémentaires dans le cadre des tarifs de GKE Standard et Autopilot. La tarification des ressources Gateway multiclusters est décrite sur la page Tarifs des ressources Ingress et Gateway multiclusters.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande gcloud components update.

Conditions requises pour le contrôleur GKE Gateway

  • Pour l'environnement standard, GKE version 1.24 ou ultérieure.
  • Pour Autopilot, la version 1.26 de GKE ou une version ultérieure.
  • Google Cloud CLI version 407.0.0 ou ultérieure.
  • L'API Gateway n'est compatible qu'avec les clusters de VPC natif.
  • Si vous utilisez les GatewayClasses internes, vous devez activer un sous-réseau proxy réservé.
  • Le module complémentaire HttpLoadBalancing doit être activé sur votre cluster.
  • Si vous utilisez Istio, vous devez mettre à niveau Istio vers l'une des versions suivantes :
    • 1.15.2 ou ultérieure
    • 1.14.5 ou ultérieure
    • 1.13.9 ou ultérieure
  • Si vous utilisez un VPC partagé, vous devez attribuer le rôle Compute Network User au compte de service GKE du projet de service dans le projet hôte.

Conditions requises pour la passerelle multicluster

Outre les exigences du contrôleur GKE Gateway, pour les déploiements de passerelles multiclusters, assurez-vous d'avoir effectué les tâches suivantes :

  • Activez l'API Gateway sur votre cluster de configuration.
  • Activez la fédération d'identité de charge de travail pour GKE sur vos clusters.
  • Remplissez les prérequis généraux de parc pour enregistrer vos clusters.
  • Activez les API Gateway multiclusters requises suivantes dans votre projet :

    • API Traffic Director
    • API Multi-cluster Services
    • API Multi Cluster Ingress

    Exécutez la commande suivante pour activer les API requises si elles ne sont pas déjà activées :

    gcloud services enable \
      trafficdirector.googleapis.com \
      multiclusterservicediscovery.googleapis.com \
      multiclusteringress.googleapis.com \
      --project=PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID de projet dans lequel les clusters GKE sont exécutés.

Restrictions et limitations

Les limites et problèmes connus des passerelles à cluster unique s'appliquent également aux passerelles multiclusters.

Outre les limites des passerelles à cluster unique, les limites suivantes s'appliquent aux passerelles multiclusters :

  • L'équilibrage de charge vers des backends dans différentes régions n'est pas compatible avec la ressource GatewayClass interne régionale gke-l7-rilb-mc. Pour en savoir plus sur les différentes fonctionnalités compatibles avec chaque ressource GatewayClass, consultez la page Fonctionnalités GatewayClass.

  • Un Service en tant que backendRefs n'est pas compatible avec une passerelle multicluster. Une passerelle multicluster n'accepte que ServiceImport en tant que backendRefs valide.

  • L'équilibrage de charge inter-projets n'est pas compatible. Tous les clusters (cluster de configuration et clusters cibles) associés à la même passerelle multicluster doivent être déployés dans le même projet hôte de VPC partagé ou le même projet de service. Pour en savoir plus sur les topologies de VPC partagé compatibles avec une passerelle multicluster, consultez la page Utiliser une passerelle multicluster avec un VPC partagé.

  • La passerelle multicluster dépend de MCS pour la gestion de la détection de services interclusters. Par conséquent, les services exposés par la passerelle multicluster sont soumis à toutes les exigences relatives aux services multiclusters.

Quotas

GKE Gateway utilise des quotas Cloud Load Balancing pour limiter le nombre de ressources que le contrôleur Gateway peut créer pour gérer le trafic entrant acheminé vers les clusters GKE.

Configurer votre environnement pour les passerelles multiclusters

Il requiert plusieurs clusters GKE pour compléter les exemples de la page Déployer des passerelles multiclusters. Tous les clusters sont enregistrés dans le même parc afin que les passerelles et les services multicluster puissent fonctionner sur ceux-ci.

Les étapes suivantes déploieront trois clusters GKE dans deux régions différentes de votre projet :

  • us-west1-a/gke-west-1
  • us-west1-a/gke-west-2
  • us-east1-b/gke-east-1

Cela créera la topologie de cluster suivante :

La topologie du cluster, qui montre la relation entre les régions, le parc et le projet.

Ces clusters GKE sont utilisés pour démontrer l'équilibrage de charge multirégional et la répartition bleu-vert du trafic sur plusieurs clusters à l'aide de passerelles externes et internes.

Déployer des clusters

Au cours de ces étapes, vous allez déployer trois clusters GKE dans les régions us-east1 et us-west1.

  1. Créez un cluster GKE dans la région us-west1 nommée gke-west-1 :

    gcloud container clusters create gke-west-1 \
        --gateway-api=standard \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet dans lequel s'exécutent vos clusters GKE.
    • VERSION : version de GKE 1.24 ou ultérieure.
  2. Créez un autre cluster GKE nommé gke-west-2 dans us-west1 (ou dans la même région que le cluster précédent) :

    gcloud container clusters create gke-west-2 \
        --gateway-api=standard \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    
  3. Créez un cluster GKE dans la région us-east1 (ou dans une région différente de la précédente) nommé gke-east-1.

    gcloud container clusters create gke-east-1 \
        --gateway-api=standard \
        --zone=us-east1-b \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

Configurer les identifiants du cluster

Cette étape configure les identifiants du cluster avec des noms facile à mémoriser. Cela facilite le basculement entre les clusters lors du déploiement de ressources sur plusieurs clusters.

  1. Récupérez les identifiants des clusters gke-west-1, gke-west-2 et gke-east-1 :

    gcloud container clusters get-credentials gke-west-1 --zone=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-west-2 --zone=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-east-1 --zone=us-east1-b --project=PROJECT_ID
    

    Cette étape stocke les identifiants localement afin que vous puissiez utiliser votre client kubectl pour accéder aux serveurs d'API du cluster. Par défaut, un nom généré automatiquement est créé pour l'identifiant.

  2. Renommez les contextes de cluster afin de pouvoir les référencer plus facilement :

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1
    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2
    kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1
    

    Remplacez PROJECT_ID par l'ID du projet dans lequel vos clusters sont déployés.

Enregistrer des clusters dans le parc

  1. Une fois les trois clusters créés, vous devez les enregistrer dans le parc de votre projet. Le regroupement de vos clusters GKE dans un parc permet de les cibler par une passerelle multicluster.

    gcloud container fleet memberships register gke-west-1 \
         --gke-cluster us-west1-a/gke-west-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-west-2 \
         --gke-cluster us-west1-a/gke-west-2 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-east-1 \
         --gke-cluster us-east1-b/gke-east-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
  2. Vérifiez que les clusters ont bien été enregistrés dans le parc :

    gcloud container fleet memberships list --project=PROJECT_ID
    

    Le résultat doit ressembler à ce qui suit :

    NAME        EXTERNAL_ID                           LOCATION
    gke-east-1  45a80b37-4b00-49aa-a68b-b430fce1e3f0  us-east1
    gke-west-2  ac7087a5-f5ee-401e-b430-57f3af141239  us-west1
    gke-west-1  549efe3a-b18e-4eb9-8796-e50b7967cde2  us-west1
    

Activer les services multiclusters dans le parc

  1. Activez les services multiclusters dans votre Fleet pour les clusters enregistrés. Cela active le contrôleur MCS des trois clusters enregistrés auprès du parc, de sorte qu'il puisse commencer à écouter et exporter des services.

    gcloud container fleet multi-cluster-services enable \
        --project PROJECT_ID
    
  2. Accordez les autorisations IAM (Identity and Access Management) requises par le contrôleur MCS :

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

    Remplacez PROJECT_ID par l'ID du projet dans lequel vos clusters sont déployés.

  3. Vérifiez que MCS est activé pour les clusters enregistrés. Vous verrez les adhésions des trois clusters enregistrés. L'affichage de tous les clusters peut prendre plusieurs minutes.

    gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    createTime: '2023-10-12T06:14:33.466903587Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:28.395318091Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:30.534594027Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:29.110582109Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2023-10-12T06:15:31.027276757Z'
    

Activer la passerelle multicluster dans le parc

Le contrôleur GKE Gateway multiclusters régit le déploiement des ressources Gateway multiclusters.

Lorsque vous activez le contrôleur Gateway multicluster, vous devez sélectionner votre cluster de configuration. Le cluster de configuration est le cluster GKE dans lequel vos ressources de passerelle (Gateway, Routes, Règles) sont déployées. Il permet de contrôler le routage sur l'ensemble de vos clusters de manière centralisée. Consultez la section Conception du cluster de configuration pour vous aider à décider du cluster à choisir comme cluster de configuration.

  1. Activez la passerelle multicluster et spécifiez votre cluster de configuration dans votre parc. Notez que vous pourrez toujours mettre à jour le cluster de configuration ultérieurement. Cet exemple spécifie gke-west-1 en tant que cluster de configuration qui hébergera les ressources pour les ressources Gateway multiclusters.

    gcloud container fleet ingress enable \
        --config-membership=projects/PROJECT_ID/locations/us-west1-a/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Accordez les autorisations IAM (Identity and Access Management) requises par le contrôleur Gateway multiclusters :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
        --role "roles/container.admin" \
        --project=PROJECT_ID
    

    Remplacez PROJECT_ID et PROJECT_NUMBER par l'ID et le numéro du projet dans lequel vos clusters sont déployés.

  3. Vérifiez que le contrôleur GKE Gateway global est activé pour votre parc :

    gcloud container fleet ingress describe --project=PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    createTime: '2023-10-12T06:23:06.732858524Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815839024Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815837031Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815840985Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusteringress
    resourceState:
      state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2023-10-12T06:23:51.317464415Z'
    updateTime: '2023-10-12T06:30:09.439319551Z'
    
  4. Vérifiez que les ressources GatewayClasses existent dans votre cluster de configuration :

    kubectl get gatewayclasses --context=gke-west-1
    

    Le résultat ressemble à ce qui suit :

    NAME                                  CONTROLLER                  ACCEPTED   AGE
    gke-l7-global-external-managed        networking.gke.io/gateway   True       78m
    gke-l7-global-external-managed-mc     networking.gke.io/gateway   True       4m22s
    gke-l7-gxlb                           networking.gke.io/gateway   True       78m
    gke-l7-gxlb-mc                        networking.gke.io/gateway   True       4m23s
    gke-l7-regional-external-managed      networking.gke.io/gateway   True       78m
    gke-l7-regional-external-managed-mc   networking.gke.io/gateway   True       4m22s
    gke-l7-rilb                           networking.gke.io/gateway   True       78m
    gke-l7-rilb-mc                        networking.gke.io/gateway   True       4m22s
    

    Ce résultat inclut les ressources GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc pour les passerelles multiclusters externes et GatewayClass gke-l7-rilb-mc pour les passerelles multiclusters internes.

  5. Remplacez le contexte kubectl par le cluster de configuration :

    kubectl config use-context gke-west-1
    

Vous êtes maintenant prêt à commencer à déployer des passerelles multiclusters dans le cluster de configuration.

Dépannage

Cette section vous explique comment résoudre les problèmes liés à l'activation du contrôleur Gateway multiclusters.

Les classes GatewayClass ne sont pas disponibles dans le cluster de configuration

L'erreur suivante peut se produire lorsque vous exécutez la commande kubectl get gatewayclasses :

error: the server doesn't have a resource type "gatewayclasses"

Pour résoudre ce problème, installez l'API Gateway sur votre cluster :

gcloud container clusters update CLUSTER_NAME \
    --gateway-api=standard \
    --region=COMPUTE_REGION

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster
  • COMPUTE_REGION : région Compute Engine du cluster. Pour les clusters zonaux, utilisez --zone=COMPUTE_ZONE.

Problèmes connus

  • Il peut arriver que le contrôleur Gateway multiclusters ne démarre pas. Pour éviter ce problème, activez l'API Gateway sur le cluster de configuration et incluez les CRD avant l'activation de la fonctionnalité Ingress de Hub (parc).
  • Les passerelles multiclusters peuvent occasionner une fuite des ressources d'équilibreur de charge dans les scénarios suivants :
    • La fonctionnalité Ingress de parc est mise à jour avec un nouveau cluster de configuration qui ne dispose pas de toutes les ressources Gateway qui existent sur le cluster de configuration actuel.
    • La fonctionnalité Ingress de parc est désactivée, tandis que les ressources Gateway qui font référence à une ressource GatewayClass multicluster existent sur le cluster de configuration.
  • La passerelle multicluster s'exécute en tant que service global. Si le contrôleur Gateway multicluster rencontre une défaillance du plan de contrôle de parc régional, il répond par une défaillance statique et n'effectue aucune autre modification dans l'équilibreur de charge jusqu'à ce que la région soit de nouveau en service.

Étapes suivantes