Prepárate para realizar la configuración con la API de puerta de enlace de GKE
La configuración descrita en este documento es compatible con los clientes de la versión preliminar. pero no lo recomendamos para usuarios nuevos de Cloud Service Mesh. Para ver más consulta la descripción general de Cloud Service Mesh.
En esta guía, se explica cómo preparar el entorno para usar el API de puerta de enlace de Google Kubernetes Engine con la malla de servicios de Cloud. A grandes rasgos, deben sigue estos pasos:
- Habilita los servicios de la API de Google Cloud necesarios:
- Implemente un clúster de GKE.
- Configure los permisos de IAM.
- Instala las definiciones de recursos personalizados (CRD) necesarias.
- Registra el clúster en una flota.
- Habilita los servicios de varios clústeres (Descubrimiento de servicios de varios clústeres) [opcional].
- Habilitar la malla de servicios
Si no usas GKE, utiliza el
APIs de Service Enrutamiento
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 los planos de datos con el
API de xDS versión 3
y 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).
- Clústeres de Kubernetes autoadministrados en Compute Engine, GKE no es compatible.
- Toda restricción adicional indicada para el Funcionalidad de puerta de enlace en GKE se aplican a la integración de Cloud Service Mesh 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 las limitaciones de cuota del servicio de backend y del uso de recursos por proyecto.
Habilita los servicios de Google Cloud necesarios:
Ejecuta el siguiente comando para habilitar las APIs necesarias, si aún no lo has hecho. habilitado en tu proyecto:
gcloud services enable --project=PROJECT_ID \ container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ trafficdirector.googleapis.com \ networkservices.googleapis.com
Si planeas incluir más de un clúster en tu flota, habilita el 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.
Crea un clúster de GKE llamado
gke-1
en la zonaus-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 bucket Workload Identity.--scopes
: Esta marca especifica los permisos de OAuth asignados a los nodos del clúster.--release-channel
: Esta marca designa el canalregular
.--enable-mesh-certificates
: Esta marca habilita el servicio de Cloud Service Mesh función de mTLS automática si es posible que esté disponible en el futuro.
Obtén las credenciales del clúster:
gcloud container clusters get-credentials gke-1 --zone=us-west1-a
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 el rol de cliente de Cloud Service Mesh
roles/trafficdirector.client
, a todos los usuarios autenticados, incluidos todos los servicios
en el clúster de GKE. Este rol de IAM es
necesarios para autorizar a los clientes de Cloud Service Mesh en el plano de datos, como
Envoys, para recibir la configuración de la malla de servicios de Cloud.
Si no quieres otorgar el rol de cliente a todos los usuarios autenticados y
si prefieres restringir el rol a cuentas de servicio, consulta el
guía de Workload Identity
configurar una cuenta de servicio especializada de Kubernetes con el rol
roles/trafficdirector.client
para tus servicios.
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
Instala las definiciones de recursos personalizadas (CRD) necesarias para usar la API de puerta de enlace con la malla de servicios de Cloud:
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 -
Verifica que las CRD necesarias se instalen automáticamente en el clúster mediante la ejecución del 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
Se instalaron los recursos personalizados tdmeshes.net.gke.io
y tdgrpcroutes.net.gke.io
en el paso anterior.
Las CRD que forman parte del grupo de APIs net.gke.io
se
específicas de GKE. Estos recursos no forman parte del OSS
Implementación de la API de puerta de enlace, que se encuentra en el grupo de APIs de networking.k8s.io
.
Registra el clúster en una flota
Después de crear el clúster correctamente, debes registrarlo en un de la flota. Registrar tu clúster en una flota te permite habilitar funciones de manera selectiva en el clúster registrado.
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
Confirma que el clúster esté registrado con el flota:
gcloud container hub memberships list --project=PROJECT_ID
El resultado es similar a este:
NAME EXTERNAL_ID gke-1 657e835d-3b6b-4bc5-9283-99d2da8c2e1b
(Opcional) Habilita el descubrimiento de servicios de varios clústeres
La función de descubrimiento de servicios de varios clústeres te permite exportar clústeres servicios locales 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 de la flota.
Habilita el descubrimiento de servicios de varios clústeres:
gcloud container hub multi-cluster-services enable \ --project PROJECT_ID
Otorga el rol de Identity and Access Management (IAM) necesario para 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"
Confirma que el descubrimiento de servicios de varios clústeres esté habilitado para el clúster registrado. Integra Puede tomar varios minutos para 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 la lo siguiente: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 Cloud Service Mesh
En esta sección, habilitarás la malla de servicios.
Habilitar la malla de servicios de GKE de Cloud Service Mesh 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
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'
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 recursos de Kubernetes en el clúster.
- roles/compute.networkAdmin — Este rol permite que el controlador administre la malla de servicios de Cloud Service Mesh. parámetros de configuración.
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:
- Configura una malla de servicios de sidecar de Envoy
- Configura una malla de servicios de gRPC sin proxy
- Configura una malla de servicios de varios clústeres