En esta guía, se describe cómo configurar Cloud Service Mesh administrado en un clúster de Google Kubernetes Engine (GKE) Autopilot. Cloud Service Mesh es una malla de servicios completamente administrada basada en Istio.
En este instructivo, se muestra cómo configurar una malla de servicios lista para producción que se ejecute en un solo clúster de GKE Autopilot con la configuración predeterminada. Te recomendamos que también consultes la Guía de aprovisionamiento de Cloud Service Mesh cuando diseñes tu entorno.
Ventajas de ejecutar Cloud Service Mesh administrado con GKE Autopilot
Cuando usas GKE en modo Autopilot, Google se encarga de la configuración y la administración de tu clúster automáticamente. El modo Autopilot optimiza la experiencia de operar un clúster y te permite enfocarte en tus aplicaciones. De la misma manera, Cloud Service Mesh administrado es un servicio mesh completamente administrado al que puedes aprovisionar siguiendo algunos pasos.
- Aprovisionas Cloud Service Mesh administrado mediante la API de Fleet, sin la necesidad de usar herramientas del lado del cliente como
istioctl
. - Cloud Service Mesh inserta proxies de sidecar automáticamente en las cargas de trabajo sin necesidad de otorgar privilegios elevados a tus contenedores.
- Puedes ver paneles enriquecidos para la malla y los servicios sin ninguna configuración adicional y, luego, usar estas métricas para configurar objetivos de nivel de servicio (SLO) y alertas para supervisar el estado de las aplicaciones
- El plano de control de Cloud Service Mesh administrado se actualiza automáticamente para garantizar que obtengas los parches de seguridad y las funciones más recientes.
- El plano de datos administrado de Cloud Service Mesh actualiza automáticamente los proxies de sidecar en las cargas de trabajo para que no debas reiniciar los servicios cuando haya actualizaciones de proxy y parches de seguridad disponibles
- Cloud Service Mesh es un producto compatible y se puede configurar mediante las APIs de código abierto de Istio estándar. Consulta características compatibles.
Objetivos
- Crea un clúster de GKE Autopilot
- Aprovisiona Cloud Service Mesh administrado mediante la API de Fleet
- Implementa puertas de enlace de entrada de la malla en un espacio de nombres dedicado
- Implementa una aplicación de ejemplo
- Configura Cloud Service Mesh para aplicar una autenticación mutua estricta de TLS (mTLS) para la comunicación de servicio a servicio
- Visualiza los paneles de Cloud Service Mesh y verifica que los servicios se conecten con mTLS
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
Cloud Shell tiene preinstalado el software que necesitas para este instructivo, incluido kubectl
, gcloud CLI, Helm y Terraform. Si no usas Cloud Shell, debes instalar gcloud CLI.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Configura tu entorno
Puedes configurar tu entorno con la gcloud CLI o Terraform.
gcloud
Establece las variables de entorno:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Habilita la API de Mesh:
gcloud services enable mesh.googleapis.com
Habilitar mesh.googleapis.com habilita las siguientes APIs:
API Objetivo Se puede inhabilitar meshconfig.googleapis.com
Cloud Service Mesh usa la API de configuración de malla para retransmitir datos de configuración de tu malla a Google Cloud. Además, habilitar la API de configuración de malla te permite acceder a las páginas de Cloud Service Mesh en la consola de Google Cloud y usar la autoridad certificadora de Cloud Service Mesh. No meshca.googleapis.com
Se relaciona con la autoridad certificadora de Cloud Service Mesh que usa Cloud Service Mesh administrado. No container.googleapis.com
Obligatorio para crear clústeres de Google Kubernetes Engine (GKE). No. gkehub.googleapis.com
Es obligatorio para administrar la malla como una flota. No. monitoring.googleapis.com
Se requiere para capturar la telemetría de las cargas de trabajo en malla. No. stackdriver.googleapis.com
Obligatorio para usar la IU de los servicios. No. opsconfigmonitoring.googleapis.com
Se requiere para usar la IU de servicios en clústeres fuera de Google Cloud. No connectgateway.googleapis.com
Es obligatorio para que el plano de control de Cloud Service Mesh administrado pueda acceder a las cargas de trabajo de la malla. Sí* trafficdirector.googleapis.com
Habilita un plano de control administrado escalable y con alta disponibilidad. Sí* networkservices.googleapis.com
Habilita un plano de control administrado escalable y con alta disponibilidad. Sí* networksecurity.googleapis.com
Habilita un plano de control administrado escalable y con alta disponibilidad. Sí*
Terraform
gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT
Crea un clúster de GKE
Crear un clúster de GKE en modo Autopilot
gcloud
Crea un clúster, registrado como miembro de una flota:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
Verifica que el clúster esté registrado en la flota:
gcloud container fleet memberships list
El resultado es similar al siguiente:
NAME: asm-cluster EXTERNAL_ID: LOCATION: us-central1
Anota el nombre de la membresía, ya que lo necesitas para configurar Cloud Service Mesh.
Terraform
Para crear un clúster de GKE, puedes usar el recurso google_container_cluster
. Establece el bloque fleet
para que el clúster se agregue a una flota cuando se cree.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Aprovisiona Cloud Service Mesh administrado
Puedes aprovisionar Cloud Service Mesh administrado con la función servicemesh
en la membresía de la flota para tu clúster.
gcloud
Habilita la característica de flota de Cloud Service Mesh en el proyecto:
gcloud container fleet mesh enable
Habilita la administración automática de la malla:
gcloud container fleet mesh update \ --management=automatic \ --memberships=MEMBERSHIP_NAME \ --location=us-central1
Reemplaza
MEMBERSHIP_NAME
por el nombre de membresía que aparece cuando verificaste que tu clúster está registrado en la flota.
Terraform
Para habilitar la API de malla, puedes usar el recurso google_project_service
.
Usa los recursos google_gke_hub_feature
y google_gke_hub_feature_membership
para configurar Cloud Service Mesh administrado en tu clúster.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Verifica que el plano de control esté activo
Espera hasta que el controlPlaneManagement.state
esté ACTIVE
. Este proceso puede llevar hasta 15 minutos.
watch -n 30 gcloud container fleet mesh describe
El resultado es similar al siguiente:
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
dataPlaneManagement:
details:
- code: PROVISIONING
details: Service is provisioning.
state: PROVISIONING
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
La sección dataPlaneManagement
permanece en el estado PROVISIONING
hasta que
implementas la puerta de enlace de entrada, ya que los clústeres de Autopilot no
aprovisionan nodos hasta que implementes una carga de trabajo.
Implementa una puerta de enlace de entrada de la malla
En esta sección, implementarás una puerta de enlace de entrada de la malla para controlar el tráfico entrante para la aplicación de ejemplo. Una puerta de enlace de entrada es un balanceador de cargas que opera en el perímetro de la malla y recibe conexiones HTTP/TCP entrantes o salientes.
Implementa la puerta de enlace en un espacio de nombres dedicado y etiqueta la implementación para asegurarte de que el plano de control de Cloud Service Mesh pueda administrar y actualizar de forma automática la puerta de enlace.
Descarga las credenciales para poder acceder al clúster:
gcloud container clusters get-credentials asm-cluster --location=us-central1
Crea un espacio de nombres para la implementación de la puerta de enlace:
kubectl create namespace bank-gateways
Agrega una etiqueta al espacio de nombres para que el plano de control de Cloud Service Mesh inserte de forma automática la configuración de la puerta de enlace en la implementación.
kubectl label namespace bank-gateways istio-injection=enabled
Implementa la puerta de enlace de entrada en el espacio de nombres:
Helm
helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update helm install --wait --namespace bank-gateways \ --set resources.requests.cpu=250m \ --set resources.requests.memory=512Mi \ --set resources.requests.ephemeral-storage=1Gi \ --set resources.limits.cpu=250m \ --set resources.limits.memory=512Mi \ --set resources.limits.ephemeral-storage=1Gi \ istio-ingressgateway istio/gateway
kubectl
kubectl apply -n bank-gateways \ -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway kubectl -n bank-gateway wait "deployment/istio-ingressgateway" \ --for=condition=available --timeout=240s
Asegúrate de configurar solicitudes de recursos adecuadas cuando realices la implementación en un entorno de producción. Autopilot de GKE solo considera los valores de recursos establecidos en
requests
y no enlimits
. El proyecto de Istio publica información sobre rendimiento y escalabilidad.
Implementa la aplicación de ejemplo
Crea un espacio de nombres de Kubernetes para la implementación:
kubectl create namespace bank-sample
Agrega una etiqueta al espacio de nombres para que Cloud Service Mesh inserte de forma automática proxies de sidecar en los Pods de muestra:
kubectl label namespace bank-sample istio-injection=enabled
Implementa la aplicación de ejemplo:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
Espera a que la aplicación esté lista. Tardará varios minutos.
watch kubectl -n bank-sample get pods
Cuando la aplicación está lista, el resultado es similar al siguiente:
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Crea los recursos
Gateway
yVirtualService
de Istio para exponer la aplicación detrás de la puerta de enlace de entrada:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Obtén un vínculo a la aplicación de ejemplo:
INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
En un navegador, sigue el vínculo para abrir la aplicación de ejemplo. Accede con el nombre de usuario y la contraseña predeterminados para ver la aplicación.
Aplica TLS mutua
Asegúrate de que esté habilitado el modo de TLS mutua (mTLS) STRICT. Aplica una política PeerAuthentication
predeterminada para la malla en el espacio de nombres istio-system.
Guarda el siguiente manifiesto como
mesh-peer-authn.yaml
:apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: STRICT
Aplica el manifiesto al clúster:
kubectl apply -f mesh-peer-authn.yaml
Puedes anular esta configuración creando recursos de PeerAuthentication
en espacios de nombres específicos.
Explora los paneles de Cloud Service Mesh
En la consola de Google Cloud, ve a Cloud Service Mesh para ver los paneles de ta malla:
Selecciona el proyecto en la lista desplegable de la barra de menú.
Verás una tabla de descripción general con todos los microservicios en tu malla y una visualización gráfica de las conexiones entre los microservicios. Para cada microservicio, en la tabla se muestran tres de los SRE "Golden signals":
- Tráfico: solicitudes por segundo
- Tasa de error: un porcentaje
- Latencia - milisegundos
Estas métricas se basan en el tráfico real que controlan los microservicios. El tráfico de prueba constante se envía automáticamente al
frontend
por un cliente deloadgenerator
implementado como parte de la aplicación de ejemplo. Cloud Service Mesh envía de forma automática métricas, registros y seguimientos (de forma opcional) a Google Cloud Observability.Haz clic en el servicio
frontend
de la tabla para ver un panel de descripción general del servicio. Verás las métricas adicionales para el servicio y una visualización de los estados de las conexiones entrantes y salientes. También puedes crear un Objeto de nivel de servicio (SLO) para supervisar y generar alertas sobre el servicio.
Verifica que la mTLS esté habilitada
Haz clic en el vínculo de seguridad en el panel para ver una descripción general de seguridad del servicio frontend
.
En la tabla y la visualización, se muestra un ícono de bloqueo verde para cada una de las conexiones entrantes y salientes entre microservicios. Este ícono indica que la conexión usa mTLS para la autenticación y encriptación.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Para evitar que se generen cargos en tu cuenta de Google Cloud por los recursos que se usaron en este instructivo, sigue estos pasos:
Borra el proyecto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Borra los recursos individuales
Si usaste un proyecto existente y no quieres borrarlo, borra los recursos individuales.
gcloud
Borra la aplicación de ejemplo y las puertas de enlace:
kubectl delete namespace bank-sample kubectl delete namespace bank-gateways
Borra el clúster de GKE:
gcloud container clusters delete --region us-central1 asm-cluster --quiet
Terraform
Borra los recursos que creaste con Terraform:
terraform destroy
¿Qué sigue?
- Más información sobre Cloud Service Mesh
- Explora los paneles de observabilidad de Cloud Service Mesh
- Define y crea alertas en función de los objetivos de nivel de servicio (SLO)
- Configura políticas de autorización
- Obtén más información sobre las prácticas recomendadas sobre la seguridad de la malla de servicios