En esta página se muestra cómo habilitar el controlador de puerta de enlace de GKE, un controlador alojado en Google que aprovisiona balanceadores de cargas internos y externos para tus clústeres de GKE. Si deseas obtener información para usar los recursos de la puerta de enlace y para el balanceo de cargas de contenedores, consulta Implementa puertas de enlace o Implementa puertas de enlace de varios clústeres.
El controlador de puerta de enlace de GKE de varios clústeres instala las siguientes GatewayClasses de varios clústeres en tus clústeres:
gke-l7-global-external-managed-mc
para puertas de enlace de varios clústeres externas globalesgke-l7-regional-external-managed-mc
para puertas de enlace de varios clústeres externas regionalesgke-l7-rilb-mc
para puertas de enlace de varios clústeres internas regionalesgke-l7-gxlb-mc
para puertas de enlace de varios clústeres externas globales
Obtén más información sobre las capacidades de las diversas GatewayClasses en GKE.
Precios
Todos los recursos de Compute Engine implementados a través del controlador de la puerta de enlace se cobran en el proyecto en el que residen tus clústeres de GKE. El controlador de Gateway de un solo clúster se ofrece sin cargo adicional como parte de los precios de GKE Standard y Autopilot. Los precios de las puertas de enlace de varios clústeres se describen en la página de precios de Ingress y puerta de enlace de varios clústeres.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Requisitos del controlador de la puerta de enlace de GKE
- Para Standard, la versión 1.24 de GKE o una posterior.
- Para Autopilot, versión 1.26 de GKE o posterior.
- Versión 407.0.0 o posterior de Google Cloud CLI.
- La API de la puerta de enlace solo es compatible con clústeres nativos de VPC.
- Si usas las GatewayClasses internas, debes habilitar una subred de solo proxy.
- El clúster debe tener el complemento
HttpLoadBalancing
habilitado. - Si usas Istio, debes actualizarlo a una de las siguientes versiones:
- 1.15.2 o una versión posterior
- 1.14.5 o una versión posterior
- 1.13.9 o una versión posterior.
- Si usas una VPC compartida, en el proyecto host, debes asignar el rol
Compute Network User
a la cuenta de servicio de GKE para el proyecto de servicio.
Requisitos de las puertas de enlace de varios clústeres
Además de los requisitos de GKE Gateway Controller, para implementaciones de puerta de enlace de varios clústeres, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de la puerta de enlace en tu clúster de configuración.
- Habilita la federación de identidades para cargas de trabajo para GKE en tus clústeres.
- Completa los requisitos generales de la flota para registrar tus clústeres.
Habilita las siguientes API de puerta de enlace de varios clústeres requeridas en tu proyecto:
- API de Cloud Service Mesh
- API de Service de varios clústeres
- API de Ingress de varios clústeres
Ejecuta este comando para habilitar las API requeridas si aún no están habilitadas:
gcloud services enable \ trafficdirector.googleapis.com \ multiclusterservicediscovery.googleapis.com \ multiclusteringress.googleapis.com \ --project=PROJECT_ID
Reemplaza
PROJECT_ID
por el ID del proyecto en el que se ejecutan los clústeres de GKE.
Restricciones y limitaciones
Las mismas limitaciones y problemas conocidos para las puerta de enlaces de un solo clúster también se aplican a las puerta de enlaces de varios clústeres.
Además de las limitaciones de la puerta de enlace de un solo clúster, las siguientes limitaciones se aplican a las puertas de enlace de varios clústeres:
El balanceo de cargas en backends en diferentes regiones no es compatible con la puerta de enlaceClass
gke-l7-rilb-mc
regional. Para obtener más información sobre las diferentes funciones que admite cada GatewayClass, consulta Capacidades de GatewayClass.Un
Service
no es compatible comobackendRefs
con una puerta de enlace de varios clústeres. La puerta de enlace de varios clústeres solo admiteServiceImport
comobackendRefs
válido.No se admite el balanceo de cargas entre proyectos. Todos los clústeres (clúster de configuración y clústeres de destino) conectados a la misma puerta de enlace de varios clústeres deben implementarse en el mismo proyecto host de VPC compartida o en el proyecto de servicio. Para obtener más información sobre las topologías de VPC compartida compatibles con puerta de enlace de varios clústeres, consulta Usa la puerta de enlace de varios clústeres con VPC compartida.
La puerta de enlace de varios clústeres depende de MCS para controlar el descubrimiento de servicios entre clústeres. Por lo tanto, los servicios que expone la puerta de enlace de varios clústeres están sujetos a todos los requisitos del servicio de varios clústeres.
Cuotas
GKE puerta de enlace usa cuotas de Cloud Load Balancing para limitar la cantidad de recursos que el controlador de puerta de enlace puede crear a fin de administrar el tráfico de entrada enrutado a los clústeres de GKE.
Configura el entorno para las puertas de enlace de varios clústeres
Se requiere que varios clústeres de GKE completen los ejemplos en Implementa puertas de enlace de varios clústeres. Todos los clústeres están registrados en la misma flota para que los Services y las puertas de enlace de varios clústeres puedan operar en ellos.
Con los siguientes pasos, se implementará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
Esto creará la siguiente topología de clúster:
Estos clústeres de GKE se usan para demostrar el balanceo de cargas multirregional y la división del tráfico de varios clústeres azul-verde mediante puertas de enlace internas y externas.
Implementa clústeres
En estos pasos, implementarás tres clústeres de GKE en las regiones us-east1
y us-west1
.
Crea un clúster de GKE en
us-west1
llamadogke-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
Reemplaza lo siguiente:
PROJECT_ID
: el ID del proyecto en el que se ejecutan los clústeres de GKE.VERSION
: la versión de GKE, 1.24 o posterior.
Crea otro clúster de GKE en
us-west1
(o la misma región que el clúster anterior) llamadogke-west-2
: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
Crea un clúster de GKE en
us-east1
(o una región diferente de la anterior) llamadagke-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
Configura las credenciales del clúster
En este paso, se configuran las credenciales del clúster con nombres fáciles de recordar. Esto facilita el cambio entre clústeres cuando se implementan recursos en varios clústeres.
Recupera las credenciales para el clúster
gke-west-1
,gke-west-2
ygke-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
Esto almacena las credenciales de forma local para que puedas usar tu cliente kubectl a fin de 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 referirse 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
Reemplaza
PROJECT_ID
por el ID del proyecto en el que se implementan tus clústeres.
Registra clústeres en la flota
Una vez que los tres clústeres se hayan creado correctamente, deberás registrar estos clústeres en la flota de tu proyecto. Agrupar tus clústeres de GKE en una flota les permite ser el destino de una puerta de enlace de varios clústeres.
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
Confirma que los clústeres se hayan registrado de forma correcta en la flota:
gcloud container fleet memberships list --project=PROJECT_ID
El resultado será similar al siguiente ejemplo:
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
Habilita services de varios clústeres en la flota
Habilita los servicios de varios clústeres en tu flota para los clústeres registrados. Esto habilita el controlador MCS para los tres clústeres que están registrados en tu flota para poder comenzar a escuchar y exportar los Services.
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Otorga los permisos de Identity and Access Management (IAM) que requiere el controlador de puerta de enlace:
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
Reemplaza
PROJECT_ID
por el ID del proyecto en el que se implementan tus clústeres.Confirma que MCS esté habilitado para los clústeres registrados. Verás las membresías de los tres clústeres registrados. Es posible que todos los clústeres tarden varios minutos en aparecer.
gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
El resultado es similar a este:
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'
Habilita puertas de enlace de varios clústeres en la flota
El GKE Gateway Controller de varios clústeres rige la implementación de las puertas de enlace de varios clústeres.
Cuando habilitas el controlador de puerta de enlace 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 encuentran los recursos de puerta de enlace (Puerta de enlace, Rutas, Políticas). implementados. Es un lugar central que controla el enrutamiento entre clústeres. Consulta Diseño del clúster de configuración para ayudarte a decidir qué clúster elegir como clúster de configuración.
Habilita la puerta de enlace de varios clústeres y especifica el clúster de configuración en tu flota. Ten en cuenta que puedes actualizar el clúster de configuración cuando quieras más adelante. En este ejemplo se especifica
gke-west-1
como el clúster de configuración que alojará los recursos de las puertas de enlace de varios clústeres.gcloud container fleet ingress enable \ --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \ --project=PROJECT_ID
Otorga los permisos de administración de identidades y accesos (IAM) que requiere el controlador de puerta de enlace de varios clústeres:
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
Reemplaza
PROJECT_ID
yPROJECT_NUMBER
por el ID y el número de proyecto en los que se implementan tus clústeres.Confirma que GKE Gateway Controller esté habilitado para tu flota:
gcloud container fleet ingress describe --project=PROJECT_ID
El resultado es similar a este:
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 las GatewayClasses existen en tu clúster de configuración:
kubectl get gatewayclasses --context=gke-west-1
El resultado es similar a este:
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
Este resultado incluye el gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc para puertas de enlace de varios clústeres externos GatewayClass gke-l7-rilb-mc para puertas de enlace de varios clústeres internos.
Cambia el contexto de kubectl al clúster de control:
kubectl config use-context gke-west-1
Ahora puedes comenzar a implementar puertas de enlace de varios clústeres en el clúster de configuración.
Soluciona problemas
En esta sección se muestra cómo resolver problemas relacionados con la habilitación del controlador de la puerta de enlace de varios clústeres.
GatewayClasses no están disponibles en el clúster de configuración
El siguiente error puede ocurrir cuando ejecutas el comando kubectl get gatewayclasses
:
error: the server doesn't have a resource type "gatewayclasses"
Para resolver este problema, instala la API de Gateway en tu clúster:
gcloud container clusters update CLUSTER_NAME \
--gateway-api=standard \
--region=COMPUTE_REGION
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre de tu clúster.COMPUTE_REGION
: La región de Compute Engine del clúster. Para los clústeres zonales, usa--zone=COMPUTE_ZONE
.
Problemas conocidos
- Existe un problema conocido con el controlador de la puerta de enlace de varios clústeres en el que puede no iniciarse. Para evitar este problema, habilita la API de la puerta de enlace en el clúster de configuración y, luego, incluye las CRD antes de que la función de Ingress de Hub (flota) esté habilitada.
- Las puertas de enlace de varios clústeres pueden filtrar recursos del balanceador de cargas en los siguientes casos:
- La función de entrada de flota se actualiza con un clúster de configuración nuevo 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 que los recursos
Gateway
que hacen referencia aGatewayClass
de varios clústeres existen en el clúster de configuración.
- La función de entrada de flota se actualiza con un clúster de configuración nuevo que no tiene todos los recursos
- Gateway de varios clústeres se ejecuta como un servicio global. Si el controlador de la puerta de enlace de varios clústeres encuentra una falla del plano de control de Hub (Fleet) regional, responderá con una falla estática y no realizará más cambios en el balanceador de cargas hasta que la región se haya regresado al servicio.
¿Qué sigue?
- Para implementar el balanceo de cargas de varios clústeres, consulta Implementa puertas de enlace de varios clústeres.
- Para obtener más información sobre el controlador de la puerta de enlace, consulta Puerta de enlace.