En esta página, se muestra cómo habilitar el controlador de puerta de enlace de GKE de varios clústeres, un controlador alojado en Google que aprovisiona balanceadores de cargas internos y externos. Si deseas obtener información para usar los recursos Gateway y HTTPRoute para el balanceo de cargas de contenedores, consulta Implementa puertas de enlace o Implementa puertas de enlace de varios clústeres.
GKE Gateway Controller de varios clústeres instala tres GatewayClasses de varios clústeres: gke-l7-global-external-managed-mc
para puertas de enlace de varios clústeres del balanceador de cargas externo global, gke-l7-gxlb-mc
para puertas de enlace de varios clústeres del balanceador de cargas clásico externo y gke-l7-rilb-mc
para puertas de enlace de varios clústeres internas.
Obtén más información sobre las capacidades de las diversas GatewayClasses en GKE.
Requisitos
El uso de puertas de enlace de varios clústeres requiere lo siguiente:
- GKE versión 1.24 o posterior.
- Clústeres de GKE habilitados con Workload Identity
Las puertas de enlace internas de varios clústeres también requieren lo siguiente:
- Se debe habilitar una subred exclusiva de proxy en el proyecto.
- Los clústeres de GKE que comparten la misma puerta de enlace deben estar ubicados en la misma región de Google Cloud y en la misma VPC.
Precios
Todos los recursos de Compute Engine implementados a través del controlador de la Gateway 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. Puedes usar el controlador de Gateway de varios clústeres sin cargo adicional durante la vista previa. En la etapa de disponibilidad general, las Gateways de varios clústeres se cobrarán de acuerdo con los precios de Ingress y Gateway de varios clústeres.
Antes de comenzar
Antes de comenzar a implementar puertas de enlace de varios clústeres, asegúrate de completar las siguientes tareas:
- Habilita la API de Gateway en el clúster de configuración y, además, incluye las CRD antes de que la función Ingress de Hub (flota) esté habilitada. Los controladores de Gateways de varios clústeres pueden fallar si omites este requisito. Para obtener más información, consulta los problemas conocidos.
- Instala la versión 337.0.0 o posterior de la CLI de Google Cloud.
- Completa los requisitos para registrar clústeres.
- Habilita las API obligatorias en tu proyecto:
- API de Google Kubernetes Engine
- API de GKE Hub (flota)
- API de Service de varios clústeres
- API de Ingress de varios clústeres
- API de Traffic Director
Ejecuta este comando para habilitar las API requeridas si aún no están habilitadas:
gcloud services enable \
container.googleapis.com \
gkehub.googleapis.com \
multiclusterservicediscovery.googleapis.com \
multiclusteringress.googleapis.com \
trafficdirector.googleapis.com \
--project=PROJECT_ID
Reemplaza PROJECT_ID
por el ID del proyecto en el que se ejecutan los clústeres de GKE.
Prepara el entorno
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, que debe ser 1.24 o posterior. También puedes usar la marca--release-channel
para seleccionar un canal de versiones. El canal de versiones debe tener una versión predeterminada 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.
Regístrate 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 gke-east-1 657e835d-3b6b-4bc5-9283-99d2da8c2e1b gke-west-2 f3727836-9cb0-4ffa-b0c8-d51001742f19 gke-west-1 93de69c0-859e-4ddd-bf3a-e3d62ef5090b
Habilita servicios de varios clústeres
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 necesarios de Identity and Access Management (IAM) necesarios para el 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
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: '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'
Habilita el controlador de puerta de enlace de varios clústeres
El controlador de puerta de enlace de GKE de varios clústeres rige la implementación de las puertas de enlace de varios clústeres (y también los recursos MulticlusterIngress
). Se habilita con el comando gcloud container fleet ingress enable
.
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 implementan tus recursos de puerta de enlace y ruta. 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 el controlador de puerta de enlace de GKE de varios clústeres y especifica tu clúster de configuración. 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=gke-west-1 \ --project=PROJECT_ID
Confirma que GKE Gateway Controller global esté habilitado para tu flota:
gcloud container fleet ingress describe --project=PROJECT_ID
El resultado es similar a este:
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'
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: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 las GatewayClasses existan en el clúster:
kubectl get gatewayclasses --context=gke-west-1
El resultado es similar a este:
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
En este resultado, se incluyen la GatewayClass
gke-l7-gxlb-mc
para puertas de enlace externas de varios clústeres y la GatewayClassgke-l7-rilb-mc
para puertas de enlace internas de varios clústeres.Cambia el contexto de kubectl al clúster de control:
kubectl config use-context gke-west-1
Ahora estás listo para comenzar a implementar puertas de enlace y rutas 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 GKE Gateway Controller.
El servidor no tiene un tipo de recurso gatewayclasses
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 Gateway de varios clústeres en el que puede no iniciarse. Para evitar este problema, habilita la API de Gateway 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:
- Las funciones del concentrador de entrada (flota) se actualizan 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 Hub de entrada (flota) está inhabilitada mientras que los recursos
Gateway
que hacen referencia aGatewayClass
de varios clústeres existen en el clúster de configuración.
- Las funciones del concentrador de entrada (flota) se actualizan 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 Gateway 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.