Habilita puertas de enlace de varios clústeres


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:

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:

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

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

  1. Recupera las credenciales para el clúster gke-west-1, gke-west-2 y gke-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.

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

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

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

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

  1. 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
    
  2. 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'
    
  3. 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 y PROJECT_NUMBER por el ID y el número de proyecto en los que se implementan tus clústeres.

  4. 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 GatewayClass gke-l7-rilb-mc para puertas de enlace internas de varios clústeres.

  5. 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 a GatewayClass de varios clústeres existen en el clúster de configuración.
  • 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?