Habilitar puertas de enlace de varios clústeres

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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.

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

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 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --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.20 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.20 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 \
        --zone=us-west1-a \
        --enable-ip-alias \
        --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 \
        --zone=us-east1-b \
        --enable-ip-alias \
        --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'
    

Instala las CRD de la API de puerta de enlace

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

  1. Ejecuta el siguiente comando en el clúster de GKE en el que deseas implementar recursos de Gateway:

    kubectl --context gke-west-1 apply -k "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.5.0"
    

    Este comando instala las CRD de v1beta1.

    El resultado es similar a este:

    customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io configured
    customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io configured
    customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io configured
    

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=/projects/PROJECT_ID/locations/global/memberships/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.

¿Qué sigue?