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 globalesgke-l7-regional-external-managed-mc
pour les passerelles multiclusters externes régionalesgke-l7-rilb-mc
pour les passerelles multiclusters internes régionalesgke-l7-gxlb-mc
pour les passerelles multiclusters externes globales classiques
Apprenez-en plus sur les fonctionnalités des différentes ressources GatewayClass dans GKE.
Tarifs
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 Cloud Service Mesh
- 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 quebackendRefs
n'est pas compatible avec une passerelle multicluster. Une passerelle multicluster n'accepte queServiceImport
en tant quebackendRefs
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 :
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
.
Créez un cluster GKE dans la région
us-west1
nomméegke-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.
Créez un autre cluster GKE nommé
gke-west-2
dansus-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
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.
Récupérez les identifiants des clusters
gke-west-1
,gke-west-2
etgke-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.
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
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
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
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
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.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.
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/memberships/gke-west-1 \ --project=PROJECT_ID
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
etPROJECT_NUMBER
par l'ID et le numéro du projet dans lequel vos clusters sont déployés.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'
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.
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 clusterCOMPUTE_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 ressourceGatewayClass
multicluster existent sur le cluster de configuration.
- La fonctionnalité Ingress de parc est mise à jour avec un nouveau cluster de configuration qui ne dispose pas de toutes les ressources
- 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
- Pour déployer l'équilibrage de charge multicluster, consultez la page Déployer des ressources Gateway multiclusters.
- Pour en savoir plus sur le contrôleur Gateway, consultez la page Gateway.