Activer des ressources Gateway 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 apprendre à utiliser les ressources Gateway et HTTPRoute 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 deux ressources GatewayClass multiclusters : gke-l7-gxlb-mc pour les ressources Gateway multiclusters externes et gke-l7-rilb-mc pour les ressources Gateway multiclusters internes.

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

Exigences

L'utilisation de ressources Gateway multiclusters nécessite les éléments suivants :

Les ressources Gateway multiclusters internes nécessitent également les éléments suivants :

  • Un sous-réseau proxy réservé doit être activé dans le projet.
  • Les clusters GKE qui partagent la même ressource Gateway doivent tous se trouver dans la même région Google Cloud.

Tarifs

Toutes les ressources Compute Engine déployées via le contrôleur Gateway sont débitées sur le projet dans lequel résident vos clusters GKE. Il peut être utilisé sans frais supplémentaires pendant la version Bêta, mais il sera payant lors de la disponibilité générale.

Avant de commencer

Avant de commencer à déployer des ressources Gateway multiclusters, assurez-vous d'effectuer les tâches suivantes :

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

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

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

Préparer l'environnement

Il requiert plusieurs clusters GKE pour compléter les exemples de la page Déployer des passerelles multiclusters. Tous les clusters seront joints au même parc afin que les passerelles et les services multicluster puissent fonctionner sur l'ensemble. 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égion et la répartition du trafic multicluster bleu-vert à 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 la région us-west1 nommé gke-west-1:

    gcloud container clusters create gke-west-1 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=rapid \
        --cluster-version=1.20 \
        --project=PROJECT_ID
    

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

  2. Créez un autre cluster GKE dans us-west1 (ou dans la même région que le cluster précédent) nommé gke-west-2:

    gcloud container clusters create gke-west-2 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=rapid \
        --cluster-version=1.20 \
        --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 \
        --zone=us-east1-b \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=rapid \
        --cluster-version=1.20 \
        --project=PROJECT_ID
    

Configurer les identifiants du cluster

Cette étape permet de configurer les identifiants du cluster avec des noms faciles à 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 du cluster afin de pouvoir les retrouver plus facilement par la suite:

    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.

S'enregistrer avec Hub

  1. Une fois les trois clusters créés, vous devez les enregistrer avec GKE Hub. Cette opération va mapper chaque cluster sur la Fleet du projet, qui est la ressource qui comprend les clusters GKE ciblés par une ressource Gateway multicluster.

    gcloud alpha container hub memberships register gke-west-1 \
         --gke-cluster us-west1-a/gke-west-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud alpha container hub memberships register gke-west-2 \
         --gke-cluster us-west1-a/gke-west-2 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud alpha container hub 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 auprès de GKE Hub :

    gcloud alpha container hub memberships list --project=PROJECT_ID
    

    La sortie doit ressembler à ce qui suit :

    NAME          EXTERNAL_ID
    gke-east-1  657e835d-3b6b-4bc5-9283-99d2da8c2e1b
    gke-west-2  f3727836-9cb0-4ffa-b0c8-d51001742f19
    gke-west-1  93de69c0-859e-4ddd-bf3a-e3d62ef5090b
    

Activer les services multiclusters

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

    gcloud container hub multi-cluster-services enable \
        --project PROJECT_ID
    
  2. Accordez les autorisations Identity and Access Management (IAM) requises pour 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 hub multi-cluster-services describe --project=PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    createTime: '2021-04-02T19:34:57.832055223Z'
    membershipStates
      projects/381015962062/locations/global/memberships/gke-east-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2021-05-27T11:03:07.770208064Z'
      projects/381015962062/locations/global/memberships/gke-west-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2021-05-27T09:32:14.401508987Z'
      projects/381015962062/locations/global/memberships/gke-west-2:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2021-05-27T13:53:27.628109510Z'
    name: projects/PROJECT_ID/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2021-04-02T19:34:58.983512446Z'
    

Installer des CRD de l'API Gateway

Avant d'utiliser les ressources Gateway dans GKE, vous devez installer les définitions de ressources personnalisées (CRD) de l'API Gateway dans votre cluster.

  1. Exécutez la commande suivante dans le cluster GKE sur lequel vous souhaitez déployer les ressources Gateway :

    kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.3.0" \
    | kubectl apply -f -
    

    Les CRD suivants sont installés :

    customresourcedefinition.apiextensions.k8s.io/backendpolicies.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/gatewayclasses.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/gateways.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/httproutes.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/tcproutes.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/tlsroutes.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/udproutes.networking.x-k8s.io created
    

Une fois le contrôleur activé à l'étape suivante, il installe les ressources GatewayClass multicluster dans votre cluster afin que les passerelles multicluster puissent être déployées.

Activer le contrôleur Gateway multiclusters

Le contrôleur GKE Gateway multiclusters régit le déploiement des ressources Gateway multiclusters (et également des ressources MulticlusterIngress). Il est activé avec la commande gcloud alpha container hub ingress enable.

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 Gateway et Route sont déployées. Il permet de contrôler le routage sur l'ensemble de vos clusters de manière centralisée. Consultez cette section pour identifier le cluster à choisir comme cluster de configuration.

  1. Activez le contrôleur de passerelle GKE multicluster et spécifiez votre cluster de configuration. 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 alpha container hub ingress enable \
        --config-membership=/projects/PROJECT_ID/locations/global/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Vérifiez que le contrôleur GKE Gateway global est activé pour les clusters enregistrés :

    gcloud alpha container hub ingress describe --project=PROJECT_ID
    

    Le résultat ressemble à ce qui suit :

    createTime: '2021-05-26T13:27:37.460383111Z'
    membershipStates:
      projects/381015962062/locations/global/memberships/gke-east-1:
        state:
          code: OK
          updateTime: '2021-05-27T15:08:19.397896080Z'
      projects/381015962062/locations/global/memberships/gke-west-1:
        state:
          code: OK
          updateTime: '2021-05-27T15:08:19.397895711Z'
      projects/381015962062/locations/global/memberships/gke-west-2:
        state:
          code: OK
          updateTime: '2021-05-27T15:08:19.397896293Z'
    resourceState:
      state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/PROJECT_ID/locations/global/memberships/gke-west-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2021-05-26T13:27:37.899549111Z'
    updateTime: '2021-05-27T15:08:19.397895711Z'
    
  3. Accordez les autorisations IAM (Identity and Access Management) requises par le contrôleur Gateway :

     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 sur lequel vos clusters sont déployés.

  4. Une fois la fonctionnalité ingress Hub activée, les ressources GatewayClass multiclusters seront disponibles dans le cluster de configuration. Désormais, lorsque vous répertoriez les ressources GatewayClass, vous verrez gke-l7-gxlb-mc pour les ressources Gateway multiclusters externes et gke-l7-rilb-mc pour les ressources Gateway multiclusters internes. Vous pouvez désormais créer des ressources Gateway multiclusters à l'aide de ces ressources GatewayClass.

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

    Le résultat ressemble à ce qui suit :

    NAME             CONTROLLER
    gke-l7-gxlb      networking.gke.io/gateway
    gke-l7-gxlb-mc   networking.gke.io/gateway
    gke-l7-rilb      networking.gke.io/gateway
    gke-l7-rilb-mc   networking.gke.io/gateway
    

Vous êtes maintenant prêt à commencer à déployer les ressources Gateway et Route multiclusters dans le cluster de configuration.

Étape suivante