Habilitar pasarelas de varios clústeres


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 globales
  • gke-l7-regional-external-managed-mc para las pasarelas multiclúster externas regionales
  • gke-l7-rilb-mc para pasarelas de varios clústeres internas regionales
  • gke-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 como backendRefs con la puerta de enlace de varios clústeres. Multi-cluster Gateway solo admite ServiceImport como backendRefs 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 un GatewayClass de varios clústeres en el clúster de configuración.
  • 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:

La topología del clúster, que muestra la relación entre las regiones, la flota y el proyecto.

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.

  1. Crea un clúster de GKE en us-west1 llamado gke-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.
  2. Crea otro clúster de GKE en us-west1 (o en la misma región que el clúster anterior) con el nombre gke-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
    
  3. Crea un clúster de GKE en us-east1 (o en una región diferente a la anterior) llamado gke-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
    
  4. 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.

  1. Obtén las credenciales de los clústeres gke-west-1, gke-west-2 y gke-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.

  2. 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

  1. 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
    
  2. 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.

  3. 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.

  1. 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
    
  2. 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 y PROJECT_NUMBER por el ID y el número del proyecto en el que se han desplegado tus clústeres.

  3. 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'
    
  4. 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.

  5. 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:

  1. Inhabilita el acceso de flota:

    gcloud container fleet ingress disable
    
  2. 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