En esta guía se describe cómo configurar Cloud Service Mesh gestionado en un clúster Autopilot de Google Kubernetes Engine (GKE). Cloud Service Mesh es una malla de servicios totalmente gestionada basada en Istio.
En este tutorial se explica cómo configurar una malla de servicios lista para producción que se ejecute en un solo clúster de Autopilot de GKE con la configuración predeterminada. Te recomendamos que consultes la guía de aprovisionamiento de Cloud Service Mesh completa al diseñar tu entorno.
Ventajas de ejecutar Cloud Service Mesh gestionado con GKE Autopilot
Cuando usas GKE en el modo Autopilot, Google se encarga de configurar y gestionar tu clúster automáticamente. El modo Autopilot simplifica el funcionamiento de un clúster y te permite centrarte en tus aplicaciones. Del mismo modo, Cloud Service Mesh gestionado es una malla de servicios totalmente gestionada que puedes aprovisionar siguiendo unos pocos pasos.
- Puedes aprovisionar Cloud Service Mesh gestionado mediante la API Fleet, sin necesidad de herramientas del lado del cliente como
istioctl. - Cloud Service Mesh inserta automáticamente proxies sidecar en las cargas de trabajo sin necesidad de conceder privilegios elevados a tus contenedores.
- Puedes ver paneles de control detallados de tu malla y tus servicios sin necesidad de realizar ninguna configuración adicional y, a continuación, usar estas métricas para configurar objetivos de nivel de servicio (SLOs) y alertas para monitorizar el estado de tus aplicaciones.
- El plano de control gestionado de Cloud Service Mesh se actualiza automáticamente para que tengas los parches de seguridad y las funciones más recientes.
- El plano de datos gestionado de Cloud Service Mesh actualiza automáticamente los proxies sidecar de tus cargas de trabajo, por lo que no tienes que reiniciar los servicios cuando haya disponibles actualizaciones de proxy y parches de seguridad.
- Cloud Service Mesh es un producto compatible que se puede configurar mediante APIs de Istio de código abierto estándar. Consulta las funciones admitidas.
Objetivos
- Crear un clúster de Autopilot de GKE
- Aprovisionar Cloud Service Mesh gestionado mediante la API Fleet
- Desplegar pasarelas de entrada de malla en un espacio de nombres dedicado
- Desplegar una aplicación de ejemplo
- Configurar Cloud Service Mesh para aplicar la autenticación mTLS estricta en las comunicaciones entre servicios
- Consulta los paneles de control de Cloud Service Mesh y verifica que los servicios se conectan con mTLS
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que hayas creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
Cloud Shell tiene preinstalado el software que necesitas para este tutorial, como kubectl, la CLI de gcloud, Helm y Terraform. Si no usas Cloud Shell, debes instalar la CLI de gcloud.
- 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.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Create or select 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Create or select 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify 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.admin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
Define las variables de entorno:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}Habilita la API Mesh:
gcloud services enable mesh.googleapis.comSi habilitas mesh.googleapis.com, se habilitarán las siguientes APIs:
API Finalidad Se puede inhabilitar meshconfig.googleapis.comCloud Service Mesh usa la API Mesh Configuration para reenviar datos de configuración de tu malla a Google Cloud. Además, si habilitas la API Mesh Configuration, podrás acceder a las páginas de Cloud Service Mesh en la Google Cloud consola y usar la autoridad de certificación de Cloud Service Mesh. No meshca.googleapis.comRelacionado con la autoridad de certificación de Cloud Service Mesh que usa Cloud Service Mesh gestionado. No container.googleapis.comObligatorio para crear clústeres de Google Kubernetes Engine (GKE). No gkehub.googleapis.comEs necesario para gestionar la malla como una flota. No monitoring.googleapis.comObligatorio para captar la telemetría de las cargas de trabajo de la malla. No stackdriver.googleapis.comEs necesario para usar la interfaz de usuario de los servicios. No opsconfigmonitoring.googleapis.comEs necesario para usar la interfaz de usuario de Servicios en clústeresGoogle Cloud desactivados. No connectgateway.googleapis.comEs necesario para que el plano de control de Cloud Service Mesh gestionado pueda acceder a las cargas de trabajo de la malla. Sí* trafficdirector.googleapis.comHabilita un plano de control gestionado de alta disponibilidad y escalable. Sí* networkservices.googleapis.comHabilita un plano de control gestionado de alta disponibilidad y escalable. Sí* networksecurity.googleapis.comHabilita un plano de control gestionado de alta disponibilidad y escalable. Sí* Crea un clúster registrado como miembro de una flota:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleetVerifica que el clúster esté registrado en la flota:
gcloud container fleet memberships listEl resultado debería ser similar al siguiente:
NAME: asm-cluster EXTERNAL_ID: LOCATION: us-central1Anota el nombre de la pertenencia, ya que lo necesitarás para configurar Cloud Service Mesh.
Habilita la función de flota de Cloud Service Mesh en el proyecto:
gcloud container fleet mesh enableHabilita la gestión automática de la malla:
gcloud container fleet mesh update \ --management=automatic \ --memberships=MEMBERSHIP_NAME \ --location=us-central1Sustituye
MEMBERSHIP_NAMEpor el nombre del miembro que se muestra cuando verificaste que tu clúster está registrado en la flota.Descarga las credenciales para poder acceder al clúster:
gcloud container clusters get-credentials asm-cluster --location=us-central1Crea un espacio de nombres para la implementación de la pasarela:
kubectl create namespace bank-gatewaysAñade una etiqueta al espacio de nombres para que el plano de control de Cloud Service Mesh inserte automáticamente la configuración de la pasarela en el despliegue.
kubectl label namespace bank-gateways istio-injection=enabledDespliega la pasarela 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/gatewaykubectl
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages kubectl apply -n bank-gateways \ -f ./anthos-service-mesh-packages/samples/gateways/istio-ingressgateway kubectl -n bank-gateways wait "deployment/istio-ingressgateway" \ --for=condition=available --timeout=240sAsegúrate de definir solicitudes de recursos adecuadas cuando implementes en un entorno de producción. Autopilot de GKE solo tiene en cuenta los valores de recursos definidos en
requestsy no enlimits. El proyecto Istio publica información sobre el rendimiento y la escalabilidad.Crea un espacio de nombres de Kubernetes para la implementación:
kubectl create namespace bank-sampleAñade una etiqueta al espacio de nombres para que Cloud Service Mesh inserte automáticamente proxies sidecar en los pods de ejemplo:
kubectl label namespace bank-sample istio-injection=enabledDespliega 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 podsCuando la aplicación esté lista, el resultado será 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 3m4sCrea recursos de Istio
GatewayyVirtualServicepara exponer la aplicación detrás de la pasarela de entrada:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yamlObtén un enlace 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 enlace para abrir la aplicación de ejemplo. Inicia sesión con el nombre de usuario y la contraseña predeterminados para ver la aplicación.
Guarda el siguiente archivo de manifiesto como
mesh-peer-authn.yaml:apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: STRICTAplica el manifiesto al clúster:
kubectl apply -f mesh-peer-authn.yamlEn la Google Cloud consola, ve a Cloud Service Mesh para ver los paneles de control de tu malla:
Selecciona el proyecto en la lista desplegable de la barra de menú.
Verá una tabla de resumen con todos los microservicios de su malla y una visualización gráfica de las conexiones entre ellos. En el caso de cada microservicio, la tabla muestra tres de las "señales óptimas" de SRE:
- Tráfico: solicitudes por segundo
- Porcentaje de errores
- Latencia (milisegundos)
Estas métricas se basan en el tráfico real que gestionan los microservicios. Un cliente
loadgeneratordesplegado como parte de la aplicación de ejemplo envía automáticamente tráfico de prueba constante al serviciofrontend. Cloud Service Mesh envía automáticamente métricas, registros y (opcionalmente) trazas a Google Cloud Observability.Haz clic en el servicio
frontendde la tabla para ver un panel de control general del servicio. Verás métricas adicionales del servicio y una visualización de las conexiones entrantes y salientes. También puedes crear un objetivo de nivel de servicio (SLO) para monitorizar el servicio y recibir alertas.Elimina la aplicación de ejemplo y las pasarelas:
kubectl delete namespace bank-sample kubectl delete namespace bank-gatewaysSigue las instrucciones para desinstalar Cloud Service Mesh.
Elimina el clúster de GKE:
gcloud container clusters delete --location us-central1 asm-cluster --quiet
Configurar un entorno
Puedes configurar tu entorno con la CLI de gcloud o Terraform.
gcloud
Terraform
gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT
Crear un clúster de GKE
Crea un clúster de GKE en modo Autopilot.
gcloud
Terraform
Para crear un clúster de GKE, puedes usar el recurso google_container_cluster. Define el fleet para que el clúster se añada a una flota cuando se cree.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Aprovisionar Cloud Service Mesh gestionado
Puedes aprovisionar Cloud Service Mesh gestionado mediante la función servicemesh en la pertenencia a la flota de tu clúster.
gcloud
Terraform
Para habilitar la API Mesh, puedes usar el recurso google_project_service.
Utiliza los recursos google_gke_hub_feature y google_gke_hub_feature_membership para configurar Cloud Service Mesh gestionado en tu clúster.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Verificar que el plano de control esté activo
Espera hasta que el controlPlaneManagement.state esté ACTIVE. Este proceso puede tardar hasta 15 minutos.
watch -n 30 gcloud container fleet mesh describe
La salida es similar a la 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 implementes la puerta de enlace de entrada, ya que los clústeres Autopilot no aprovisionan ningún nodo hasta que implementes una carga de trabajo.
Desplegar una pasarela de entrada de malla
En esta sección, desplegarás una pasarela de entrada de malla para gestionar el tráfico entrante de la aplicación de ejemplo. Una pasarela de entrada es un balanceador de carga que opera en el perímetro de la malla y recibe conexiones HTTP o TCP entrantes o salientes.
Despliega la pasarela en un espacio de nombres específico y etiqueta el despliegue para asegurarte de que el plano de control de Cloud Service Mesh pueda gestionar la pasarela de forma segura y actualizarla automáticamente.
Desplegar la aplicación de ejemplo
Implementar TLS mutuo
Asegúrate de que el modo TLS mutuo (mTLS) ESTRICTO esté habilitado. Aplica una política predeterminada
PeerAuthentication a la malla en el espacio de nombres istio-system.
Puedes anular esta configuración creando recursos PeerAuthentication en espacios de nombres específicos.
Consultar los paneles de control de Cloud Service Mesh
Verificar que mTLS esté habilitado
Haga clic en el enlace de seguridad del panel para ver un resumen de la seguridad del servicio frontend.
En la tabla y la visualización se muestra un icono de candado verde para cada una de las conexiones entrantes y salientes entre microservicios. Este icono indica que la conexión usa mTLS para la autenticación y el cifrado.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Para evitar que se apliquen cargos en tu cuenta Google Cloud por los recursos utilizados en este tutorial, sigue estos pasos:
Eliminar el proyecto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Eliminar los recursos concretos
Si has usado un proyecto que ya existía y no quieres eliminarlo, elimina los recursos concretos.
gcloud
Terraform
Elimina los recursos que has creado con Terraform:
terraform destroy