En esta página, se muestra cómo enrutar el tráfico en varios clústeres de Google Kubernetes Engine (GKE) en diferentes regiones mediante Ingress de varios clústeres, con un ejemplo en el que se usan dos clústeres.
Para obtener una comparación detallada entre Ingress de varios clústeres (MCI), la puerta de enlace de varios clústeres (MCG) y el balanceador de cargas con grupos de extremos de red independientes (LB y NEG independientes), consulta Elige tu clúster múltiple API de balanceo de cargas para GKE.
Para obtener más información sobre la implementación de Ingress de varios clústeres, consulta Implementa Ingress en varios clústeres.
Estos pasos requieren privilegios elevados y un administrador de GKE los debe realizar.
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 y limitaciones
Ingress de varios clústeres tiene los siguientes requisitos:
- Google Cloud CLI versión 290.0.0 y posteriores.
Si usas clústeres del modo Standard, asegúrate de cumplir con los siguientes requisitos. Los clústeres de Autopilot ya cumplen con estos requisitos.
- Los clústeres deben tener el complemento
HttpLoadBalancing
habilitado. Este complemento está habilitado de forma predeterminada; no debes inhabilitarlo. - Los clústeres deben ser nativos de la VPC.
- Los clústeres deben tener habilitada la federación de identidades para cargas de trabajo para GKE.
Ingress de clústeres múltiples tiene las siguientes limitaciones:
- Solo es compatible con un balanceador de cargas de aplicaciones externo.
- No crees balanceadores de cargas de Compute Engine en el mismo proyecto con el prefijo
mci-
que no estén administrados por Ingress de varios clústeres o se borrarán. Google Cloud usa el prefijomci-[6 char hash]
con el cual se administran los recursos de Compute Engine que implementa Ingress de varios clústeres. - La configuración de HTTPS requiere una dirección IP estática asignada previamente. HTTPS no es compatible con direcciones IP efímeras.
Descripción general
En este ejercicio, debes realizar los siguientes pasos:
- Seleccionar los precios que deseas usar.
- Implementar clústeres.
- Configurar credenciales de clústeres.
- Registra los clústeres en una flota.
- Especificar 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 cómo se verá el 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 Ingress de varios clústeres pueda reconocerlos. Una flota te permite agrupar y normalizar de forma lógica tus clústeres de GKE, lo que facilita la administración de la infraestructura y habilita el uso de funciones de varios clústeres, como Ingress de varios clústeres. Puedes obtener más información sobre los beneficios de las flotas y cómo crearlas en la documentación de administración de flotas.
Selecciona precios
Si Ingress de varios clústeres es la única función de GKE Enterprise que estás usando, te recomendamos que uses los precios independientes. Si tu proyecto usa otros componentes o funciones de GKE Enterprise en Google Cloud, debes habilitar toda la plataforma de GKE Enterprise. Esto te permite usar todas las funciones de GKE Enterprise por un solo cargo por CPU virtual.
Las APIs que debes habilitar dependen de los precios de Ingress de varios clústeres que usas.
- Si la API de GKE Enterprise (
anthos.googleapis.com
) está habilitada, tu proyecto se factura según la cantidad de CPU virtuales del clúster y los precios de GKE Enterprise. - Si se inhabilita la API de GKE Enterprise, tu proyecto se factura según la cantidad de Pods de backend de Ingress de varios clústeres en tu proyecto.
Puedes cambiar el modelo de facturación de Ingress de varios clústeres de independiente a GKE Enterprise, o de GKE Enterprise a independiente en cualquier momento sin afectar los recursos o el tráfico de Ingress de varios clústeres.
Precios independientes
Para habilitar los precios independientes, sigue estos pasos:
Confirma que la API de GKE Enterprise esté inhabilitada en tu proyecto:
gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
Reemplaza
PROJECT_ID
por el ID del proyecto en el que se ejecutan los clústeres de GKE.Si el resultado es una respuesta vacía, la API GKE Enterprise se inhabilita en tu proyecto y cualquier recurso de Ingress de varios clústeres se factura con precios independientes.
Habilita las APIs obligatorias en tu proyecto:
gcloud services enable \ multiclusteringress.googleapis.com \ gkehub.googleapis.com \ container.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project=PROJECT_ID
Precios de GKE Enterprise
Para habilitar los precios de GKE Enterprise, habilita las APIs obligatorias en tu proyecto:
gcloud services enable \
anthos.googleapis.com \
multiclusteringress.googleapis.com \
gkehub.googleapis.com \
container.googleapis.com \
multiclusterservicediscovery.googleapis.com \
--project=PROJECT_ID
Después de habilitar anthos.googleapis.com
en tu proyecto, cualquier clúster registrado en Connect se factura de acuerdo con los precios de GKE Enterprise.
Implementa 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 \ --region=us-central1 \ --release-channel=stable \ --project=PROJECT_ID
Reemplaza
PROJECT_ID
por el ID del proyecto de Google Cloud.Crea el clúster
gke-eu
en la regióneurope-west1
:gcloud container clusters create-auto gke-eu \ --region=europe-west1 \ --release-channel=stable \ --project=PROJECT_ID
Estándar
Crea los dos clústeres con la federación de identidades para cargas de trabajo para GKE habilitada.
Crea el clúster
gke-us
en la regiónus-central1
:gcloud container clusters create gke-us \ --region=us-central1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Reemplaza
PROJECT_ID
por el ID del proyecto de Google Cloud.Crea el clúster
gke-eu
en la regióneurope-west1
:gcloud container clusters create gke-eu \ --region=europe-west1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Configura las credenciales del clúster
Configura las credenciales de los clústeres y cambia el nombre de los contextos de clúster para facilitar el cambio entre clústeres cuando se implementan recursos.
Recupera las credenciales para tus clústeres:
gcloud container clusters get-credentials gke-us \ --region=us-central1 \ --project=PROJECT_ID gcloud container clusters get-credentials gke-eu \ --region=europe-west1 \ --project=PROJECT_ID
Las credenciales se almacenan de forma local para que puedas usar el cliente de 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 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
Registra 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 hayan registrado de forma correcta en la flota:
gcloud container fleet memberships list --project=PROJECT_ID
El resultado es similar a este:
NAME EXTERNAL_ID gke-us 0375c958-38af-11ea-abe9-42010a800191 gke-eu d3278b78-38ad-11ea-a846-42010a840114
Después de registrar tus clústeres, GKE implementa el Pod gke-mcs-importer
en tu clúster.
Puedes obtener más información para registrar clústeres en Registra un clúster de GKE en tu flota.
Especifica un clúster de configuración
El clúster de configuración es un clúster de GKE que eliges a fin de que sea el punto central de control para Ingress en los clústeres que son miembros. Este clúster ya debe estar registrado en la flota. Para obtener más información, consulta Diseño del clúster de configuración.
Habilita Ingress de varios clústeres y selecciona gke-us
como el clúster de configuración:
gcloud container fleet ingress enable \
--config-membership=gke-us \
--location=us-central1 \
--project=PROJECT_ID
El clúster de configuración puede tardar hasta 15 minutos en registrarse. El resultado correcto es similar a este:
Waiting for Feature to be created...done.
Waiting for controller to start...done.
El resultado incorrecto 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 produjo un error en el paso anterior, verifica 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 Ingress de varios clústeres, consulta Solución de problemas y operaciones.
Impacto en los clústeres en vivo
Puedes habilitar Ingress de varios clústeres de forma segura mediante gcloud container fleet ingress enable
en un clúster activo, ya que no genera ningún tiempo de inactividad ni impacto en el tráfico en el clúster.
VPC compartida
Puedes implementar un recurso MultiClusterIngress
para clústeres en una red de VPC compartida, pero todos los clústeres de GKE de backend participantes deben estar en el mismo proyecto. No se admiten los clústeres de GKE en diferentes proyectos que usen el mismo VIP de Cloud Load Balancing.
En las redes de VPC no compartidas, el controlador de Ingress de varios clústeres administra las reglas de firewall para permitir que las verificaciones de estado pasen del balanceador de cargas a las cargas de trabajo del contenedor.
En una red de VPC compartida, el administrador de un proyecto host debe crear de forma manual las reglas de firewall para el tráfico del balanceador de cargas en nombre del controlador de Ingress de varios clústeres.
El siguiente comando muestra la regla de firewall que debes crear si tus clústeres están en una red de VPC compartida. Los rangos de origen son los que usa el balanceador de cargas para enviar tráfico a los backends. Esta regla debe existir durante la vida útil de un recurso MultiClusterIngress
.
Si tus clústeres están en una red de VPC compartida, crea la siguiente regla de firewall:
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
Reemplaza lo siguiente:
FIREWALL_RULE_NAME
: es el nombre de la regla de firewall nueva que elijas.HOST_PROJECT
: es el ID del proyecto host de la VPC compartida.SHARED_VPC
: es el nombre de la red de VPC compartida.
Problemas conocidos
En esta sección, se describen problemas conocidos para el Ingress de varios clústeres
InvalidValueError para el campo cconfig_membership
Un problema conocido impide que Google Cloud CLI interactúe con Ingress de varios clústeres. 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 el Ingress de varios clústeres.
Valor no válido para el campo 'resource'
Google Cloud Armor no puede comunicarse con los clústeres de configuración del Ingress de varios clústeres que se ejecutan en las siguientes versiones de GKE:
- 1.18.19-gke.1400 y posteriores
- 1.19.10-gke.700 y posteriores
- 1.20.6-gke.700 y 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
A fin de evitar este problema, actualiza tu clúster de configuración a la versión 1.21 o una posterior, o bien usa el siguiente comando para actualizar el CustomResourceDefinition
de BackendConfig:
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"}}]'