Prepárate para la configuración con la API de GKE Gateway

En esta guía, se explica cómo preparar el entorno para usar la API de Google Kubernetes Engine Gateway con Traffic Director. En términos generales, debes realizar los siguientes pasos:

  1. Habilita los servicios de la API de Google Cloud necesarios:
  2. Implemente un clúster de GKE.
  3. Configure los permisos de IAM.
  4. Instala las definiciones de recursos personalizados (CRD) necesarias.
  5. Registrar el clúster en una flota
  6. [Opcional] Habilita los servicios de varios clústeres (detección de servicios de varios clústeres).
  7. Habilita la malla de servicios.

Si no usas GKE, utiliza las APIs de enrutamiento de servicios y crea un recurso Mesh.

Antes de comenzar

Asegúrate de que los componentes de tu implementación cumplan con estos requisitos:

  • La versión de GKE debe 1.20 o una versión posterior.
  • Solo se admiten los planos de datos con la API de xDS versión 3 y versiones posteriores.
    • La versión de Envoy debe ser 1.20.0 como mínimo
    • La versión del generador de arranque de gRPC debe ser v0.14.0 como mínimo
  • Los clústeres de GKE deben estar en modo nativo de la VPC (IP de alias).
  • En Compute Engine, no se admiten los clústeres de Kubernetes autoadministrados, a diferencia de GKE.
  • Cualquier restricción adicional que se muestre para la funcionalidad de puerta de enlace en GKE se aplica a la integración de Traffic Director con la API de puerta de enlace de GKE.
  • La cuenta de servicio de tus nodos y Pods de GKE debe tener permiso para acceder a la API de Traffic Director. Para obtener más información sobre los permisos requeridos, consulta Habilita la cuenta de servicio para acceder a la API de Traffic Director.
  • Se aplican limitaciones de cuota del servicio de backend y de uso de recursos por proyecto.

Habilita los servicios de Google Cloud necesarios:

  1. Ejecuta el siguiente comando para habilitar las APIs necesarias, si aún no están habilitadas en tu proyecto:

    gcloud services enable --project=PROJECT_ID \
      container.googleapis.com \
      gkehub.googleapis.com \
      multiclusteringress.googleapis.com \
      trafficdirector.googleapis.com \
      networkservices.googleapis.com
    
  2. Si planeas incluir más de un clúster en tu flota, habilita la API de multiclusterservicediscovery:

    gcloud services enable --project=PROJECT_ID \
       multiclusterservicediscovery.googleapis.com
    

Implemente un clúster de GKE

Usa estas instrucciones para implementar un clúster de GKE.

  1. Crea un clúster de GKE llamado gke-1 en la zona us-west1-a.

    gcloud container clusters create gke-1 \
      --zone=us-west1-a \
      --enable-ip-alias \
      --workload-pool=PROJECT_ID.svc.id.goog \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --enable-mesh-certificates \
      --release-channel=regular \
      --project=PROJECT_ID
    
    • --enable-ip-alias: Esta marca crea un clúster nativo de la VPC y hace que las direcciones IP de los Pods se puedan enrutar dentro de la red de VPC.
    • --workload-pool: Esta marca permite que el clúster participe en el grupo de identidades para cargas de trabajo del proyecto.
    • --scopes: Esta marca especifica los permisos de OAuth que se asignaron a los nodos del clúster.
    • --release-channel: Esta marca designa el canal regular.
    • --enable-mesh-certificates: Esta marca habilita la función de mTLS automática de Traffic Director si está disponible en el futuro.
  2. Obtén las credenciales del clúster:

    gcloud container clusters get-credentials gke-1 --zone=us-west1-a
    
  3. Cambia el nombre del contexto del clúster:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
    

Configura los permisos de IAM para el plano de datos

Para esta implementación de demostración, debes otorgar la función de cliente de Traffic Director roles/trafficdirector.client a todos los usuarios autenticados, incluidas todas las cuentas de servicio, en el clúster de GKE. Esta función de IAM es necesaria para autorizar a los clientes de Traffic Director en el plano de datos, como Envoy, a recibir la configuración de Traffic Director.

Si no quieres otorgar la función de cliente a todos los usuarios autenticados y prefieres restringir la función a las cuentas de servicio, consulta la guía de identidad de cargas de trabajo de GKE para configurar una cuenta de servicio especializada de Kubernetes con la función roles/trafficdirector.client en tus servicios.

  1. Otorga el rol client a la cuenta de servicio:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
      --role "roles/trafficdirector.client"
    

Instala las definiciones de recursos personalizadas necesarias

  1. Instala las definiciones de recursos personalizadas (CRD) necesarias para usar la API de puerta de enlace con Traffic Director:

    kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.0"
    
    kubectl kustomize "https://github.com/GoogleCloudPlatform/gke-networking-recipes.git/gateway-api/config/mesh/crd" \
    | kubectl apply -f -
    
  2. Para verificar que los CRD necesarios se instalen de forma automática en el clúster, ejecuta el siguiente comando:

    kubectl get crds
    

    En el resultado, se enumeran las siguientes CRD y otras que no están relacionadas con la API de puerta de enlace, todas con diferentes fechas de creación:

    NAME                                             CREATED AT
    gatewayclasses.gateway.networking.k8s.io                           2023-08-08T05:29:03Z
    gateways.gateway.networking.k8s.io                                 2023-08-08T05:29:03Z
    grpcroutes.gateway.networking.k8s.io                               2023-08-08T05:29:03Z
    httproutes.gateway.networking.k8s.io                               2023-08-08T05:29:03Z
    referencegrants.gateway.networking.k8s.io                          2023-08-08T05:29:04Z
    tcproutes.gateway.networking.k8s.io                                2023-08-08T05:29:04Z
    tdgrpcroutes.net.gke.io                                            2023-08-08T05:29:23Z
    tdmeshes.net.gke.io                                                2023-08-08T05:29:23Z
    tlsroutes.gateway.networking.k8s.io                                2023-08-08T05:29:05Z
    udproutes.gateway.networking.k8s.io                                2023-08-08T05:29:05Z
    

Los recursos personalizados tdmeshes.net.gke.io y tdgrpcroutes.net.gke.io se instalaron en el paso anterior.

Las CRD que forman parte del grupo de API net.gke.io son específicas de GKE. Estos recursos no forman parte de la implementación de la API de OSS Gateway, que se encuentra en el grupo de API networking.k8s.io.

Registra el clúster en una flota

Una vez que el clúster se haya creado correctamente, debes registrarlo en una flota. Registrar tu clúster en una flota te permite habilitar funciones de forma selectiva en el clúster registrado.

  1. Registra el clúster en la flota:

    gcloud container hub memberships register gke-1 \
      --gke-cluster us-west1-a/gke-1 \
      --location global \
      --project=PROJECT_ID
    
  2. Confirma que el clúster esté registrado en la flota:

    gcloud container hub memberships list --project=PROJECT_ID
    

    El resultado es similar al siguiente:

    NAME   EXTERNAL_ID
    gke-1  657e835d-3b6b-4bc5-9283-99d2da8c2e1b
    

Habilita el descubrimiento de servicios de varios clústeres (opcional)

La función de descubrimiento de servicios de varios clústeres te permite exportar servicios locales del clúster a todos los clústeres registrados en la flota. Este paso es opcional si no planeas incluir más de un clúster en tu flota.

  1. Habilita el descubrimiento de servicios de varios clústeres:

    gcloud container hub multi-cluster-services enable \
      --project PROJECT_ID
    
  2. Otorga la función de Identity and Access Management (IAM) necesaria para el descubrimiento de servicios de varios clústeres:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \
      --role "roles/compute.networkViewer"
    
  3. Confirma que el descubrimiento de servicios de varios clústeres esté habilitado para el clúster registrado. Es posible que pasen varios minutos hasta que se muestren todos los clústeres:

    gcloud container hub multi-cluster-services describe --project=PROJECT_ID
    

    Deberías ver las membresías de gke-1, que son similares a las siguientes:

    createTime: '2021-04-02T19:34:57.832055223Z'
    membershipStates
      projects/PROJECT_NUM/locations/global/memberships/gke-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2021-05-27T11:03:07.770208064Z'
    name: projects/PROJECT_NUM/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2021-04-02T19:34:58.983512446Z'
    

Habilita la malla de servicios de GKE de Traffic Director

En esta sección, habilitarás la malla de servicios.

  1. Habilita la malla de servicios de GKE de Traffic Director en el clúster que registraste en tu flota:

    gcloud container hub ingress enable \
    --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \
      --project=PROJECT_ID
    
  2. Confirma que la función esté habilitada:

    gcloud container hub ingress describe --project=PROJECT_ID
    

    Debería ver un resultado similar al siguiente:

    createTime: '2021-05-26T13:27:37.460383111Z'
    membershipStates:
      projects/PROJECT_NUM/locations/global/memberships/gke-1:
        state:
          code: OK
          updateTime: '2021-05-27T15:08:19.397896080Z'
    resourceState:
     state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/PROJECT_ID/locations/global/memberships/gke-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 siguientes roles de administración de identidades y accesos (IAM), que requiere el controlador de API de puerta de enlace:

    • roles/container.developer: este rol permite que el controlador administre los recursos de Kubernetes en el clúster.
    • roles/compute.networkAdmin: este rol permite que el controlador administre las configuraciones de la malla de servicios de Traffic Director.
    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value (projectNumber)")
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
      --role "roles/container.developer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
      --role "roles/compute.networkAdmin"
    

¿Qué sigue?

Para configurar una implementación de ejemplo, lee estas guías: