Preparar la configuración de la API Gateway para Cloud Service Mesh

En esta página se describe cómo instalar las definiciones de recursos personalizados necesarias para la puerta de enlace en tu clúster.

Limitaciones

  • No se admite tener una combinación de clústeres de gateway config-api y istio config-api en la misma flota. Asegúrate de que la config-api esté definida como gateway para todos los clústeres de tu flota. Usa el comando gcloud container fleet mesh describe --project FLEET_PROJECT_ID para ver lo que has configurado para tu flota.
  • No se admite el descubrimiento de servicios y el balanceo de carga entre varios clústeres en los clústeres de la API de configuración de gateway.
  • Si se incorpora un clúster mediante la marca --management automatic, el clúster empezará a usar la API de configuración istio y no podrá cambiar a la API gateway.
  • Solo se admiten FQDNs. No se admiten nombres cortos.

Consideraciones sobre la gestión del plano de datos

En el caso de los pods nuevos, Google gestiona qué versión del proxy se inserta. Ten en cuenta que el plano de datos gestionado depende del canal de lanzamiento de Google Kubernetes Engine (GKE) para determinar la versión del proxy.

En el caso de los pods, la gestión del proxy se realiza de forma pasiva, en función del ciclo de vida natural de los pods en el clúster. Para activar la actualización y volver a insertar nuevas versiones del proxy, reinicia tus cargas de trabajo.

Requisitos previos

Para empezar, en esta guía se da por hecho que ya has creado un Google Cloud proyecto y configurado kubectl.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Crear y registrar un clúster de GKE

    gcloud

    Crea un clúster de GKE:

    gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --enable-ip-alias \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --release-channel=regular \
    --project=PROJECT_ID \
    --gateway-api=standard \
    --workload-pool=PROJECT_ID.svc.id.goog \
    --workload-metadata=GKE_METADATA
    

    donde:

    • CLUSTER_NAME es el nombre de tu clúster
    • LOCATION es la ubicación de tu clúster
    • PROJECT_ID es el ID del proyecto de tu clúster.

    Consola

    1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

      Ir a Google Kubernetes Engine

    2. Haz clic en Crear.

    3. En la sección Estándar, haga clic en Configurar.

    4. En la sección Información básica de los clústeres, haz lo siguiente:

      1. Introduce el nombre del clúster.
      2. En Tipo de ubicación, selecciona una región de Compute Engine para tu clúster.
    5. En el panel de navegación, haga clic en default-pool en la sección Grupos de nodos y seleccione Seguridad.

    6. En la lista Permisos de acceso, selecciona Definir acceso para cada API y, a continuación, Habilitado en Cloud Platform.

    7. En el panel de navegación, ve a la sección Clúster y haz clic en Redes.

    8. En la lista Redes del clúster, selecciona Habilitar API Gateway.

    9. En el panel de navegación, haga clic en Seguridad en la sección Clúster.

    10. En la lista Seguridad, selecciona Habilitar Workload Identity.

    11. Haz clic en Crear.

    Una vez creado el clúster,

    1. Registra tu clúster en una flota:

      gcloud container fleet memberships register CLUSTER_NAME \
      --gke-cluster LOCATION/CLUSTER_NAME \
      --project=PROJECT_ID
      
    2. Verifica que el clúster esté registrado en la flota:

      gcloud container fleet memberships list --project=PROJECT_ID
      

      La salida es similar a la siguiente:

      NAME            EXTERNAL_ID                             LOCATION
      my-cluster      91980bb9-593c-4b36-9170-96445c9edd39    us-west1
      

    Configurar permisos

    Ten en cuenta que los siguientes comandos conceden permiso a todos los usuarios autenticados, pero puedes usar Workload Identity Federation para GKE para conceder permiso solo a determinadas cuentas. Para obtener información sobre cómo funciona Workload Identity Federation para GKE, consulta el artículo Acerca de Workload Identity Federation para GKE. Para configurar Workload Identity Federation para GKE, consulta Autenticar en APIs Google Cloud desde cargas de trabajo de GKE.

    Asigna el rol trafficdirector.client:

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

    Habilitar Cloud Service Mesh

    1. Habilita la función de malla:

      gcloud container fleet mesh enable --project PROJECT_ID
      
    2. Actualiza la malla para usar la API Gateway:

      gcloud alpha container fleet mesh update \
      --config-api gateway \
      --memberships CLUSTER_NAME \
      --project PROJECT_ID
      
    3. Verifica la actualización describiendo el estado del recurso de Cloud Service Mesh:

      gcloud alpha container fleet mesh describe
      

    Configurar las nuevas suscripciones de tu flota para que usen la API Gateway de forma predeterminada (opcional)

    También puedes crear ajustes predeterminados a nivel de flota para que los nuevos clústeres de GKE registrados en la flota durante la creación del clúster se configuren automáticamente con la API Gateway.

    1. Crea un archivo YAML que especifique el uso de la API Gateway:

      echo "configapi: gateway" > mesh.yaml
      
    2. Actualiza tu malla:

      gcloud alpha container fleet mesh update --project FLEET_PROJECT_ID \
          --fleet-default-member-config mesh.yaml
      
    3. Crea un clúster y regístralo en tu flota en un solo paso para usar la configuración predeterminada:

      gcloud container clusters create CLUSTER_NAME \
          --project PROJECT_ID \
          --fleet-project FLEET_PROJECT_ID \
          --location=LOCATION \
      
    4. Habilita Workload Identity Federation para GKE y ejecuta el servidor de metadatos de GKE en tu nodo.

    Instalar definiciones de recursos personalizadas

    Genera una entrada kubeconfig para tu clúster:

    gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
    

    donde:

    • CLUSTER_NAME es el nombre de tu clúster
    • LOCATION es la ubicación de tu clúster
    • PROJECT_ID es el ID del proyecto de tu clúster.

    Instala la definición de recurso personalizado (CRD) GRPCRoute:

    curl https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.1.0/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml \
    | kubectl apply -f -
    

    La salida es similar a la siguiente:

    customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created
    

    Siguientes pasos