En esta página se muestra cómo enrutar el tráfico entre varios clústeres de Google Kubernetes Engine (GKE) en diferentes regiones mediante Multi Cluster Ingress. En el ejemplo se usan dos clústeres.
Para ver una comparación detallada entre Multi Cluster Ingress (MCI), Multi-cluster Gateway (MCG) y el balanceador de carga con grupos de endpoints de red independientes (LB y Standalone NEGs), consulta Elegir la API de balanceo de carga multiclúster para GKE.
Para obtener más información sobre cómo desplegar Ingress de varios clústeres, consulta Desplegar objetos Ingress en clústeres.
Estos pasos requieren permisos elevados y debe llevarlos a cabo un administrador de GKE.
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 y limitaciones
Multi Cluster Ingress tiene los siguientes requisitos:
- Google Cloud CLI versión 290.0.0 y posteriores.
Si usas clústeres en modo Estándar, asegúrate de que cumples los siguientes requisitos. Los clústeres de Autopilot ya cumplen estos requisitos.
- Los clústeres deben tener habilitado el complemento
HttpLoadBalancing
. Este complemento está habilitado de forma predeterminada, por lo que no debes inhabilitarlo. - Los clústeres deben ser nativos de VPC.
- Los clústeres deben tener habilitada la opción Workload Identity Federation for GKE.
Ingress de varios clústeres tiene las siguientes limitaciones:
- Solo se admite con un balanceador de carga de aplicación externo.
- No crees balanceadores de carga de Compute Engine en el mismo proyecto con el prefijo
mci-
que no estén gestionados por Ingress de varios clústeres, ya que se eliminarán. Google Cloud usa el prefijomci-[6 char hash]
para gestionar los recursos de Compute Engine que despliega Ingress de varios clústeres. - Para configurar HTTPS, se necesita una dirección IP estática preasignada. HTTPS no se admite con direcciones IP efímeras.
Información general
En este ejercicio, seguirás estos pasos:
- Selecciona los precios que quieras usar.
- Despliega clústeres.
- Configura las credenciales del clúster.
- Registra los clústeres en una flota.
- Especifica un clúster de configuración. Este clúster puede ser un plano de control dedicado o puede ejecutar otras cargas de trabajo.
En el siguiente diagrama se muestra el aspecto que tendrá tu entorno después de completar el ejercicio:
En el diagrama, hay dos clústeres de GKE llamados gke-us
y gke-eu
en las regiones europe-west1
y us-central1
. Los clústeres se registran en una flota para que el controlador de entrada multi-clúster pueda reconocerlos. Una flota te permite agrupar y normalizar lógicamente tus clústeres de GKE, lo que facilita la administración de la infraestructura y permite usar funciones de varios clústeres, como la entrada multi-clúster. Puede consultar más información sobre las ventajas de las flotas y cómo crearlas en la documentación sobre gestión de flotas.
Habilitar APIs
Habilita las APIs necesarias en tu proyecto:
gcloud services enable \
multiclusteringress.googleapis.com \
gkehub.googleapis.com \
container.googleapis.com \
multiclusterservicediscovery.googleapis.com \
--project=PROJECT_ID
Desplegar clústeres
Crea dos clústeres de GKE llamados gke-us
y gke-eu
en las regiones europe-west1
y us-central1
.
Autopilot
Crea el clúster
gke-us
en la regiónus-central1
:gcloud container clusters create-auto gke-us \ --location=us-central1 \ --release-channel=stable \ --project=PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tu proyecto. Google CloudCrea el clúster
gke-eu
en la regióneurope-west1
:gcloud container clusters create-auto gke-eu \ --location=europe-west1 \ --release-channel=stable \ --project=PROJECT_ID
Estándar
Crea los dos clústeres con Workload Identity Federation para GKE habilitado.
Crea el clúster
gke-us
en la regiónus-central1
:gcloud container clusters create gke-us \ --location=us-central1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tu proyecto. Google CloudCrea el clúster
gke-eu
en la regióneurope-west1
:gcloud container clusters create gke-eu \ --location=europe-west1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Configurar las credenciales del clúster
Configura las credenciales de tus clústeres y cambia el nombre de los contextos de clúster para que te resulte más fácil cambiar de clúster al implementar recursos.
Obtén las credenciales de tus clústeres:
gcloud container clusters get-credentials gke-us \ --location=us-central1 \ --project=PROJECT_ID gcloud container clusters get-credentials gke-eu \ --location=europe-west1 \ --project=PROJECT_ID
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 las credenciales.
Cambia el nombre de los contextos del clúster:
kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
Registrar clústeres en una flota
Registra tus clústeres en la flota de tu proyecto de la siguiente manera.
Registra tus clústeres:
gcloud container fleet memberships register gke-us \ --gke-cluster us-central1/gke-us \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-eu \ --gke-cluster europe-west1/gke-eu \ --enable-workload-identity \ --project=PROJECT_ID
Confirma que tus clústeres se han registrado correctamente en la flota:
gcloud container fleet memberships list --project=PROJECT_ID
El resultado debería ser similar al siguiente:
NAME EXTERNAL_ID gke-us 0375c958-38af-11ea-abe9-42010a800191 gke-eu d3278b78-38ad-11ea-a846-42010a840114
Una vez que registres tus clústeres, GKE desplegará el gke-mcs-importer
pod en tu clúster.
Para obtener más información sobre cómo registrar clústeres, consulta el artículo Registrar un clúster de GKE en tu flota.
Especificar un clúster de configuración
El clúster de configuración es un clúster de GKE que elijas para que sea el punto de control central de Ingress en los clústeres miembros. Este clúster ya debe estar registrado en la flota. Para obtener más información, consulta Configurar el diseño del clúster.
Habilita Multi Cluster Ingress y selecciona gke-us
como clúster de configuración:
gcloud container fleet ingress enable \
--config-membership=gke-us \
--location=us-central1 \
--project=PROJECT_ID
El registro del clúster de configuración tarda hasta 15 minutos. El resultado correcto es similar al siguiente:
Waiting for Feature to be created...done.
Waiting for controller to start...done.
El resultado fallido es similar al siguiente:
Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
Si se ha producido un error en el paso anterior, comprueba el estado de la función:
gcloud container fleet ingress describe \
--project=PROJECT_ID
El resultado correcto es similar al siguiente:
createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: ERROR
description: '...is not a VPC-native GKE Cluster.'
updateTime: '2021-08-10T13:58:50.298191306Z'
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: OK
updateTime: '2021-08-10T13:58:08.499505813Z'
Para obtener más información sobre cómo solucionar errores con Multi Cluster Ingress, consulta Solución de problemas y operaciones.
Impacto en los clústeres activos
Puedes habilitar Multi Cluster Ingress de forma segura con gcloud container fleet ingress enable
en un clúster activo, ya que no provoca ningún tiempo de inactividad ni afecta al tráfico del clúster.
VPC compartida
Puedes desplegar un recurso MultiClusterIngress
para los clústeres de una red de VPC compartida, pero todos los clústeres de GKE de backend participantes deben estar en el mismo proyecto. No se admite que los clústeres de GKE de diferentes proyectos usen la misma dirección IP virtual de Cloud Load Balancing.
En las redes de VPC que no son compartidas, el controlador Multi Cluster Ingress gestiona las reglas de cortafuegos para permitir que las comprobaciones del estado pasen del balanceador de carga a las cargas de trabajo de los contenedores.
En una red de VPC compartida, un administrador del proyecto host debe crear manualmente las reglas de cortafuegos para el tráfico del balanceador de carga en nombre del controlador Multi Cluster Ingress.
El siguiente comando muestra la regla de cortafuegos que debes crear si tus clústeres están en una red de VPC compartida. Los intervalos de origen son los intervalos que utiliza el balanceador de carga para enviar tráfico a los backends. Esta regla debe existir durante el tiempo de actividad de un recurso MultiClusterIngress
.
Si tus clústeres están en una red de VPC compartida, crea la regla de cortafuegos:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--project=HOST_PROJECT \
--network=SHARED_VPC \
--direction=INGRESS \
--allow=tcp:0-65535 \
--source-ranges=130.211.0.0/22,35.191.0.0/16
Haz los cambios siguientes:
FIREWALL_RULE_NAME
: el nombre que elijas para la nueva regla de cortafuegos.HOST_PROJECT
: el ID del proyecto host de la VPC compartida.SHARED_VPC
: el nombre de la red de VPC compartida.
Problemas conocidos
En esta sección se describen los problemas conocidos de Ingress de varios clústeres.
InvalidValueError para el campo config_membership
Hay un problema conocido que impide que la CLI de Google Cloud interactúe con Multi Cluster Ingress. Este problema se introdujo en la versión 346.0.0 y se solucionó en la versión 348.0.0. No recomendamos usar las versiones 346.0.0 y 347.0.0 de la CLI de gcloud con Multi Cluster Ingress.
Valor no válido para el campo "resource"
Google Cloud Armor no puede comunicarse con los clústeres de configuración de Multi Cluster Ingress que ejecutan las siguientes versiones de GKE:
- 1.18.19-gke.1400 y versiones posteriores
- 1.19.10-gke.700 y versiones posteriores
- 1.20.6-gke.700 y versiones posteriores
Cuando configuras una política de seguridad de Google Cloud Armor, aparece el siguiente mensaje:
Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist
Para evitar este problema, actualiza tu clúster de configuración
a la versión 1.21 o posterior, o usa el siguiente comando para actualizar el
BackendConfig CustomResourceDefinition
:
kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'