En esta página se explica cómo habilitar el controlador de GKE Gateway multiclúster, un controlador alojado en Google que aprovisiona balanceadores de carga externos e internos para tus clústeres de GKE. Para saber cómo usar los recursos de Gateway para el balanceo de carga de contenedores, consulta Desplegar Gateways o Desplegar Gateways de varios clústeres.
El controlador de pasarela de GKE multiclúster instala las siguientes GatewayClasses multiclúster en tus clústeres:
gke-l7-global-external-managed-mc
para pasarelas externas multiclúster globalesgke-l7-regional-external-managed-mc
para las pasarelas multiclúster externas regionalesgke-l7-rilb-mc
para pasarelas de varios clústeres internas regionalesgke-l7-gxlb-mc
para pasarelas de varios clústeres clásicas externas globales
Consulta más información sobre las funciones de las distintas GatewayClasses de GKE.
Precios
Todos los recursos de Compute Engine implementados a través de los controladores de Gateway se facturan en el proyecto en el que residen tus clústeres de GKE. El controlador de Gateway de un solo clúster se ofrece sin coste adicional como parte de los precios de GKE Standard y Autopilot. Los precios de las pasarelas de varios clústeres se describen en la página de precios de Ingress y Gateway de varios clústeres.
Antes de empezar
Antes de empezar, asegúrate de que has realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
Requisitos de GKE Gateway Controller
- La API Gateway solo se admite en clústeres nativos de VPC.
- Si usas GatewayClasses internas, debes habilitar una subred de solo proxy.
- Tu clúster debe tener habilitado el complemento
HttpLoadBalancing
. - Si usas Istio, debes actualizarlo a una de las siguientes versiones:
- 1.15.2 o posterior
- 1.14.5 o posterior
- 1.13.9 o posterior.
- Si utilizas una VPC compartida, en el proyecto host debes asignar el rol
Compute Network User
a la cuenta de servicio de GKE del proyecto de servicio.
Requisitos de las pasarelas de varios clústeres
Además de los requisitos del controlador de GKE Gateway, en las implementaciones de Gateway multiclúster, asegúrate de haber realizado las siguientes tareas:
- Habilita la API Gateway en tu clúster de configuración.
- Habilita Workload Identity Federation para GKE en tus clústeres.
- Cumple los requisitos generales de la flota para registrar tus clústeres.
Habilita las siguientes APIs necesarias de pasarelas de varios clústeres en tu proyecto:
- API Cloud Service Mesh
- API Multi-cluster Services
- API Multi Cluster Ingress
Ejecuta este comando para habilitar las APIs necesarias si aún no lo has hecho:
gcloud services enable \ trafficdirector.googleapis.com \ multiclusterservicediscovery.googleapis.com \ multiclusteringress.googleapis.com \ --project=PROJECT_ID
Sustituye
PROJECT_ID
por el ID del proyecto en el que se ejecutan tus clústeres de GKE.
Restricciones y limitaciones
Las mismas limitaciones y problemas conocidos de las pasarelas de un solo clúster también se aplican a las pasarelas de varios clústeres.
Además de las limitaciones de las pasarelas de un solo clúster, se aplican las siguientes limitaciones a las pasarelas de varios clústeres:
No se admite el balanceo de carga en backends de diferentes regiones con la GatewayClass interna regional
gke-l7-rilb-mc
. Para obtener más información sobre las diferentes funciones admitidas en cada GatewayClass, consulta Funciones de GatewayClass.No se admite
Service
comobackendRefs
con la puerta de enlace de varios clústeres. Multi-cluster Gateway solo admiteServiceImport
comobackendRefs
válido.Todos los clústeres de la flota deben estar en el proyecto de host de la flota.
No se admite el balanceo de carga entre proyectos. Todos los clústeres (clúster de configuración y clústeres de destino) conectados a la misma pasarela multiclúster deben desplegarse en el mismo proyecto host o de servicio de VPC compartida. Para obtener más información sobre las topologías de VPC compartida admitidas con la puerta de enlace multiclúster, consulta Usar la puerta de enlace multiclúster con VPC compartida.
No se admite el balanceo de carga entre VPCs. Todos los clústeres (clúster de configuración y clústeres de destino) conectados a la misma pasarela de varios clústeres deben desplegarse en la misma VPC.
La pasarela de varios clústeres depende de MCS para gestionar el descubrimiento de servicios entre clústeres. Por lo tanto, los servicios que expone la pasarela de varios clústeres están sujetos a todos los requisitos de los servicios de varios clústeres.
Las pasarelas de varios clústeres pueden filtrar recursos de balanceadores de carga en los siguientes casos:
- La función Ingress de la flota se actualiza con un nuevo clúster de configuración que no tiene todos los recursos
Gateway
que existen en el clúster de configuración actual. - La función de entrada de flota está inhabilitada mientras haya recursos
Gateway
que hagan referencia a unGatewayClass
de varios clústeres en el clúster de configuración.
- La función Ingress de la flota se actualiza con un nuevo clúster de configuración que no tiene todos los recursos
Multi-cluster Gateway se ejecuta como un servicio global. Si el controlador de la puerta de enlace multiclúster detecta un fallo en el plano de control de una flota (Hub) regional, responde con un fallo estático y no realiza más cambios en el balanceador de carga hasta que la región vuelva a estar operativa.
Cuotas
GKE Gateway usa cuotas de Cloud Load Balancing para limitar el número de recursos que puede crear el controlador de Gateway para gestionar el tráfico de entrada enrutado a clústeres de GKE.
Configurar el entorno para las pasarelas de varios clústeres
Para completar los ejemplos de Desplegar pasarelas de varios clústeres, se necesitan varios clústeres de GKE. Todos los clústeres están registrados en la misma flota para que los servicios y las gateways multiclúster puedan operar en ellos.
Con los pasos siguientes, se desplegarán tres clústeres de GKE en dos regiones diferentes de tu proyecto:
us-west1-a/gke-west-1
us-west1-a/gke-west-2
us-east1-b/gke-east-1
Se creará la siguiente topología de clúster:
Estos clústeres de GKE se usan para demostrar el balanceo de carga multirregión y la división del tráfico entre varios clústeres con azul-verde mediante pasarelas externas e internas.
Desplegar clústeres
En estos pasos, desplegarás tres clústeres de GKE en las regiones us-east1
y us-west1
.
Los clústeres se registrarán en la flota de tu proyecto. Si agrupas tus clústeres de GKE en una flota, podrás orientarlos a una puerta de enlace multiclúster.
Crea un clúster de GKE en
us-west1
llamadogke-west-1
:gcloud container clusters create gke-west-1 \ --gateway-api=standard \ --location=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se ejecutan tus clústeres de GKE.VERSION
: la versión de GKE, 1.24 o posterior.
Crea otro clúster de GKE en
us-west1
(o en la misma región que el clúster anterior) con el nombregke-west-2
:gcloud container clusters create gke-west-2 \ --gateway-api=standard \ --location=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Crea un clúster de GKE en
us-east1
(o en una región diferente a la anterior) llamadogke-east-1
.gcloud container clusters create gke-east-1 \ --gateway-api=standard \ --location=us-east1-b \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Confirma que los clústeres se han registrado correctamente en la flota:
gcloud container fleet memberships list --project=PROJECT_ID
La salida será similar a la siguiente:
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
Configurar las credenciales del clúster
En este paso se configuran las credenciales del clúster con nombres fáciles de recordar. De esta forma, es más fácil cambiar entre clústeres al implementar recursos en varios clústeres.
Obtén las credenciales de los clústeres
gke-west-1
,gke-west-2
ygke-east-1
:gcloud container clusters get-credentials gke-west-1 --location=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-west-2 --location=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-east-1 --location=us-east1-b --project=PROJECT_ID
De esta forma, las credenciales se almacenan de forma local para que puedas usar tu cliente kubectl para acceder a los servidores de la API del clúster. De forma predeterminada, se crea un nombre generado automáticamente para la credencial.
Cambia el nombre de los contextos del clúster para que sea más fácil hacer referencia a ellos más adelante:
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
Sustituye
PROJECT_ID
por el ID del proyecto en el que se han desplegado tus clústeres.
Habilitar los servicios de varios clústeres en la flota
Habilita los servicios de varios clústeres en tu flota para los clústeres registrados. De esta forma, se habilita el controlador de MCS para los tres clústeres registrados en tu flota, de modo que pueda empezar a escuchar y exportar servicios.
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Concede los permisos de gestión de identidades y accesos (IAM) que necesita el controlador de 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
Sustituye
PROJECT_ID
por el ID del proyecto en el que se han desplegado tus clústeres.Confirma que MCS esté habilitado en los clústeres registrados. Verás las pertenencias de los tres clústeres registrados. Puede que tarden varios minutos en mostrarse todos los clústeres.
gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
El resultado debería ser similar al siguiente:
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'
Habilitar la pasarela de varios clústeres en la flota
El controlador de pasarela de GKE de varios clústeres gestiona el despliegue de pasarelas de varios clústeres.
Cuando habilites el controlador de pasarela de varios clústeres, debes seleccionar tu clúster de configuración. El clúster de configuración es el clúster de GKE en el que se implementan los recursos de Gateway (Gateway, Routes y Policies). Es un lugar central que controla el enrutamiento en todos tus clústeres. Consulta Configuración del diseño del clúster para decidir qué clúster elegir como clúster de configuración.
Habilita la pasarela de varios clústeres y especifica el clúster de configuración en tu flota. Ten en cuenta que siempre puedes actualizar el clúster de configuración más adelante. En este ejemplo, se especifica
gke-west-1
como clúster de configuración que alojará los recursos de las pasarelas de varios clústeres.gcloud container fleet ingress enable \ --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \ --project=PROJECT_ID
Concede los permisos de gestión de identidades y accesos (IAM) que necesita el controlador de MultiClusterGateway:
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
Sustituye
PROJECT_ID
yPROJECT_NUMBER
por el ID y el número del proyecto en el que se han desplegado tus clústeres.Confirma que el controlador de GKE Gateway esté habilitado en tu flota:
gcloud container fleet ingress describe --project=PROJECT_ID
El resultado debería ser similar al siguiente:
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'
Confirma que los GatewayClasses existen en tu clúster de configuración:
kubectl get gatewayclasses --context=gke-west-1
El resultado debería ser similar al siguiente:
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
Esta salida incluye las GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc y gke-l7-gxlb-mc para las Gateway externas multiclúster, así como la GatewayClass gke-l7-rilb-mc para las Gateway internas multiclúster.
Cambia el contexto de kubectl al clúster de configuración:
kubectl config use-context gke-west-1
Ahora puedes empezar a desplegar pasarelas de varios clústeres en el clúster de configuración.
Solución de problemas
En esta sección se explica cómo resolver problemas relacionados con la habilitación del controlador de Gateway multiclúster.
GatewayClasses no está disponible en el clúster de configuración
Puede que se produzca el siguiente error al ejecutar el comando
kubectl get gatewayclasses
:
error: the server doesn't have a resource type "gatewayclasses"
Para solucionar este problema, instala la API Gateway en tu clúster:
gcloud container clusters update CLUSTER_NAME \
--gateway-api=standard \
--location=CONTROL_PLANE_LOCATION
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clúster.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.
El controlador de Multi-cluster Gateway no se inicia
Si habilitas la API Gateway en el clúster de configuración e incluyes los CRDs después de habilitar la función de entrada de la flota, es posible que el controlador de Gateway de varios clústeres no se inicie.
Para evitar este problema, habilita la API Gateway antes de habilitar Fleet Ingress. Sin embargo, si ya has habilitado la entrada de flotas, resuelve este problema inhabilitando y volviendo a habilitar la entrada de flotas:
Inhabilita el acceso de flota:
gcloud container fleet ingress disable
Habilita el acceso de flota:
gcloud container fleet ingress enable \ --config-membership=CONFIG_MEMBERSHIP \ --project=PROJECT_ID
Haz los cambios siguientes:
- CONFIG_MEMBERSHIP: el ID de la suscripción o el identificador completo de la suscripción. Por ejemplo,
projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1
. - PROJECT_ID: el ID del proyecto en el que se ejecutan tus clústeres de GKE.
Siguientes pasos
- Para desplegar el balanceo de carga entre varios clústeres, consulta Desplegar pasarelas de varios clústeres.
- Para obtener más información sobre el controlador de la pasarela, consulta Pasarela.