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 yistio
config-api en la misma 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ónistio
y no podrá cambiar a la APIgateway
. - Solo se admiten FQDNs. No se admiten nombres cortos.
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
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. - Genera una entrada kubeconfig para tu clúster:
- 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.
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
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.
Habilita Workload Identity Federation para GKE:
gcloud container clusters update CLUSTER_NAME \ --location LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog
Ejecuta el servidor de metadatos de GKE en tu nodo:
gcloud container node-pools update default-pool \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --workload-metadata=GKE_METADATA
Registra tu clúster en una flota:
gcloud container hub memberships register CLUSTER_NAME \ --gke-cluster LOCATION/CLUSTER_NAME \ --project=PROJECT_ID
Verifica que el clúster esté registrado en la flota:
gcloud container hub 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
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"
Asigna el rol
container.developer
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role "roles/container.developer"
donde PROJECT_NUMBER es el número de tu proyecto.
Asigna el rol
compute.networkAdmin
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role "roles/compute.networkAdmin"
donde PROJECT_NUMBER es el número de tu proyecto.
Habilita la función de malla:
gcloud container hub mesh enable --project PROJECT_ID
Actualiza la malla para usar la API Gateway:
gcloud alpha container fleet mesh update \ --config-api gateway \ --memberships CLUSTER_NAME \ --project PROJECT_ID
Verifica la actualización describiendo el estado del recurso de Cloud Service Mesh:
gcloud alpha container fleet mesh describe
- Configurar una malla de servicios de sidecar de Envoy en GKE
- Configurar una malla de servicios gRPC sin proxy en GKE
gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
donde:
Crear y registrar un clúster de GKE
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.
Habilitar Cloud Service Mesh
Instalar definiciones de recursos personalizadas
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