Habilitar puertas de enlace de varios clústeres

En esta página, se muestra cómo habilitar el controlador de puerta de enlace de GKE global, 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.

El controlador de puerta de enlace de GKE global instala dos GatewayClasses de varios clústeres: gke-l7-gxlb-mc para puertas de enlace de varios clústeres externos y gke-l7-rilb-mc para puertas de enlace de varios clústeres internos.

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.

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 global de la puerta de enlace se puede usar sin cargo adicional durante la fase de vista previa, pero será un producto pago en Google Analytics.

Antes de comenzar

Antes de comenzar a implementar puertas de enlace de varios clústeres, asegúrate de completar las siguientes tareas:

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 se unirán a la misma flota para que las puertas de enlace y servicios 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 multirregión 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 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=rapid \
        --cluster-version=1.20 \
        --project=PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto en el que se ejecutan los clústeres de GKE.

  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 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=rapid \
        --cluster-version=1.20 \
        --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 \
        --zone=us-east1-b \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=rapid \
        --cluster-version=1.20 \
        --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 a fin de que puedas usar el cliente de 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.

  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 con Hub

  1. Una vez que los tres clústeres se hayan creado de forma correcta, deberás registrarlos con GKE Hub. Este proceso asignará cada clúster de la flota de proyecto, que es el recurso que abarca los clústeres de GKE orientados por una Gateway de varios clústeres.

    gcloud alpha container hub memberships register gke-west-1 \
         --gke-cluster us-west1-a/gke-west-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud alpha container hub memberships register gke-west-2 \
         --gke-cluster us-west1-a/gke-west-2 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud alpha container hub 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 el GKE Hub:

    gcloud alpha container hub memberships list --project=PROJECT_ID
    

    El resultado debería ser similar al ejemplo siguiente:

    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 dos clústeres que están registrados en Hub para poder comenzar a escuchar y exportar los servicios.

    gcloud container hub 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 hub 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'
    

Instala las CRD de la API de puerta de enlace

Antes de usar recursos de la puerta de enlace en GKE, debes instalar las definiciones de recursos personalizados (CRD) de la API de la puerta de enlace en el clúster.

  1. Ejecute el siguiente comando en el clúster de GKE en el que desea implementar recursos de puerta de enlace:

    kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.3.0" \
    | kubectl apply -f -
    

    Se instalan las siguientes CRD:

    customresourcedefinition.apiextensions.k8s.io/backendpolicies.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/gatewayclasses.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/gateways.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/httproutes.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/tcproutes.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/tlsroutes.networking.x-k8s.io created
    customresourcedefinition.apiextensions.k8s.io/udproutes.networking.x-k8s.io created
    

Después de habilitar el controlador en el siguiente paso, instala las GatewayClasses de varios clústeres en tu clúster para que se puedan implementar las puertas de enlace de varios clústeres.

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 alpha container hub 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 esta sección para decidir el clúster que quieres elegir como tu 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 alpha container hub ingress enable \
        --config-membership=/projects/PROJECT_ID/locations/global/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Confirma que el controlador de la puerta de enlace global de GKE esté habilitado para los clústeres registrados:

    gcloud alpha container hub 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. Una vez que se habilite la función ingress Hub, las GatewayClasses de varios clústeres estarán disponibles en el clúster de configuración. Ahora, cuando enumeres las GatewayClasses, verás gke-l7-gxlb-mc para las puertas de enlace de varios clústeres externos y gke-l7-rilb-mc para las puertas de enlace de varios clústeres internos. Ahora puedes crear puertas de enlace de varios clústeres con estas GatewayClasses.

    kubectl get gatewayclasses --context=gke-west-1
    

    El resultado es similar al siguiente:

    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
    

Ahora estás listo para comenzar a implementar puertas de enlace y rutas de varios clústeres en el clúster de configuración.

¿Qué sigue?