Activer des ressources Gateway multiclusters

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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. Le contrôleur Gateway à cluster unique est offert sans frais supplémentaires dans le cadre des tarifs de GKE Standard et Autopilot. Vous pouvez utiliser le contrôleur Gateway multiclusters sans frais supplémentaires pendant la version bêta. Une fois en disponibilité générale, les passerelles multiclusters seront facturées conformément aux tarifs des objets Ingress et Gateway multiclusters.

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 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 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --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 : la version de GKE, qui doit être 1.20 ou ultérieure. Vous pouvez également utiliser l'option --release-channel pour sélectionner un canal de publication. La version disponible doit correspondre à la version 1.20 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 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --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 \
        --zone=us-east1-b \
        --enable-ip-alias \
        --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 les 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
    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 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 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 fleet 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 --context gke-west-1 apply -k "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.5.0"
    

    Cette commande installe les CRD v1beta1.

    Le résultat ressemble à ce qui suit :

    customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io configured
    customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io configured
    customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io configured
    

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 container fleet 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 la section Conception du cluster de configuration pour vous aider à décider du cluster à choisir comme cluster de configuration.

  1. Activez le contrôleur multicluster de passerelle GKE 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 container fleet 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 Controller global est activé pour votre parc :

    gcloud container fleet 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 dans lequel vos clusters sont déployés.

  4. Vérifiez que les GatewayClasses existent dans le cluster :

    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
    

    Ce résultat inclut la classe GatewayClass gke-l7-gxlb-mc pour les passerelles multiclusters externes et la passerelle GatewayClass gke-l7-rilb-mc pour les passerelles multiclusters internes.

  5. Remplacez le contexte kubectl par le cluster de contrôle :

    kubectl config use-context gke-west-1
    

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

Étape suivante