Descripción general
Anthos Service Mesh administrado es un plano de control administrado por Google y un plano de datos opcional que simplemente configuras. Google maneja la confiabilidad, las actualizaciones, el escalamiento y la seguridad de manera retrocompatible. En esta guía, se explica cómo configurar o migrar aplicaciones a Anthos Service Mesh administrado en una configuración de uno o varios clústeres.
Para obtener información sobre las funciones admitidas y las limitaciones de Anthos Service Mesh administrado, consulta las funciones admitidas de Anthos Service Mesh administrado.
Requisitos previos
Como punto de partida, en esta página se supone que realizaste las siguientes acciones:
- Un proyecto de Cloud
- Una cuenta de facturación de Cloud
- Secuencia de comandos de instalación,
kpt
y otras herramientas especificadas en Instala las herramientas necesarias.
Requisitos
Uno o más clústeres con una versión de GKE compatible en una de las regiones admitidas.
Tus clústeres deben tener Workload Identity habilitado. Consulta Habilita Workload Identity para ver el comando
gcloud
.El plano de datos administrado por Google requiere que habilites el complemento de interfaz de red de contenedores (CNI) de Istio cuando implementes el plano de control administrado por Google, como se describe más adelante.
Migraciones
- Las migraciones directas/actualizaciones del plano de control en el clúster al plano de control administrado por Google solo son compatibles con las versiones 1.9+ (instaladas con la CA de Mesh).
- Las instalaciones con la CA de Istio primero se deben migrar a la CA de Mesh 1.9 y versiones posteriores.
- Nota: Se admiten migraciones o actualizaciones indirectas, lo que significa que puedes seguir las rutas de actualización estándar de Anthos Service Mesh. a través de cada versión hasta que llegues a Anthos Service Mesh 1.11 con un plano de control dentro del clúster; luego puedes migrar al plano de control administrado por Google.
Limitaciones
Te recomendamos que revises la lista de funciones admitidas y limitaciones de Anthos Service Mesh administrado. En particular, ten en cuenta esta información:
- Anthos Service Mesh administrado puede usar varios clústeres de GKE solo en un proyecto de Google Cloud.
La API de
IstioOperator
no es compatible.Limitaciones del plano de datos administrado:
Esta versión preliminar del plano de datos administrado solo está disponible para las implementaciones nuevas del plano de control administrado. Si implementaste el plano de control administrado antes y deseas implementar el plano de datos administrado, debes volver a ejecutar la secuencia de comandos de instalación como se describe enAplica el plano de control administrado por Google.
El plano de datos administrado está disponible en los canales de versiones regulares y rápidos.
Habilitar Workload Identity
Si Workload Identity no está habilitado, consulta Habilita Workload Identity en un clúster para obtener los permisos de IAM necesarios y usa la CLI de gcloud a fin de habilitarlo.
Descarga la secuencia de comandos de instalación
Descarga la versión más reciente de la secuencia de comandos que instala Anthos Service Mesh 1.11.8 en el directorio de trabajo actual:
curl https://storage.googleapis.com/csm-artifacts/asm/install_asm_1.11 > install_asm
Haz que la secuencia de comandos sea ejecutable:
chmod +x install_asm
Configura cada clúster
Sigue estos pasos a fin de configurar Anthos Service Mesh administrado para cada clúster de tu malla.
Obtén credenciales de clúster
Recupera las credenciales adecuadas. El siguiente comando también apunta el contexto kubectl
al clúster de destino.
gcloud container clusters get-credentials CLUSTER_NAME \
--zone LOCATION \
--project PROJECT_ID
Aplica el plano de control administrado por Google
Ejecuta la secuencia de comandos de instalación install_asm
para cada clúster que usará Anthos Service Mesh administrado. Te recomendamos incluir las dos opciones siguientes cuando ejecutes install_asm
:
--option cni-managed
: Esta opción habilita el complemento de interfaz de red de contenedor (CNI) de Istio. El complemento de CNI configura el redireccionamiento del tráfico de red desde y hacia los proxies de sidecar mediante la interfaz CNI de CNCF, en lugar de usar un contenedorinit
con alto privilegio.--enable-registration
: Esta marca registra el clúster en flota.
Estas opciones son necesarias si también deseas implementar el plano de datos administrado por Google. Para obtener una lista completa de las opciones, consulta la página de referencia de asmcli.
./install_asm --mode install --managed \
-p PROJECT_ID \
-l LOCATION \
-n CLUSTER_NAME \
--verbose \
--output_dir CLUSTER_NAME \
--enable-all \
--enable-registration \
--option cni-managed
La secuencia de comandos se descargará en el --output_dir
especificado para todos los archivos a fin de configurar el plano de control administrado e instalar una puerta de enlace de Istio, junto con la herramienta istioctl
y las aplicaciones de muestra. En los pasos de esta guía se asume que ejecutas istioctl
de la raíz del directorio de instalación, con istioctl
en el subdirectorio /bin
.
Si vuelves a ejecutar install_asm
en el mismo clúster, se reemplaza la configuración del plano de control existente. Asegúrate de especificar las mismas opciones y marcas si quieres establecer la misma configuración.
Ten en cuenta que una puerta de enlace de entrada no se implementa de forma automática con el plano de control. Separar la implementación de la puerta de enlace de entrada y el plano de control te permite administrar con mayor facilidad las puertas de enlace en un entorno de producción. Si el clúster necesita una puerta de enlace de entrada, consulta Instala puertas de enlace de Istio.
Aplica el plano de datos administrado por Google
Si deseas que Google administre las actualizaciones de los proxies, habilita el plano de datos administrado por Google. Si se habilita, los proxies de sidecar y las puertas de enlace insertadas se actualizan de forma automática junto con el plano de control administrado.
En la versión preliminar de la función, el plano de datos administrado actualiza los proxies mediante la expulsión de Pods que ejecutan versiones anteriores del proxy. Las expulsiones se realizan de forma ordenada para respetar el presupuesto de interrupción del Pod y controlar la velocidad de cambio.
En esta versión preliminar del plano de datos administrado, no se administra lo siguiente:
- Pods que no se insertaron.
- Pods insertados de forma manual mediante
istioctl kube-inject
- Trabajos
- Conjuntos con estado
- DaemonSet
Si no deseas usar el plano de datos administrado o no quieres habilitarlo para todos los espacios de nombres, debes activar un reinicio de los proxies para beneficiarte con la imagen de proxy más reciente. El plano de control continúa funcionando con los proxies existentes.
El plano de datos administrado está disponible en los canales de versiones rápidos y regulares.
Para habilitar el plano de datos administrado por Google, sigue estos pasos:
Habilita la administración del plano de datos:
kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
De manera alternativa, puedes habilitar el plano de datos administrado por Google para un Pod específico anotándolo con la misma anotación. Cuando anotas un Pod específico, ese Pod usa el proxy de sidecar administrado por Google, y el resto de las cargas de trabajo usan los proxies de sidecar no administrados.
Repite el paso anterior para cada espacio de nombres en el que quieras un plano de datos administrado.
Habilita Anthos Service Mesh en la flota:
gcloud alpha container hub mesh enable --project=PROJECT_ID
El controlador del plano de datos puede tardar hasta diez minutos en estar listo para administrar los proxies del clúster. Ejecuta el siguiente comando para verificar el estado:
if kubectl get dataplanecontrols -o custom-columns=REV:.spec.revision,STATUS:.status.state | grep rapid | grep -v none > /dev/null; then echo "Managed Data Plane is ready."; else echo "Managed Data Plane is NOT ready."; fi
Cuando el controlador del plano de datos esté listo, el comando generará el siguiente resultado: Managed Data Plane is ready.
Si el estado del controlador del plano de datos no muestra después de esperar más de diez minutos, consulta Estado del plano de datos administrado para obtener sugerencias de solución de problemas.
Si deseas inhabilitar el plano de datos administrado por Google y volver a administrar los proxies de sidecar, cambia la anotación:
kubectl annotate --overwrite namespace NAMESPACE \
mesh.cloud.google.com/proxy='{"managed":"false"}'
Instala puertas de enlace de Istio (opcional)
Anthos Service Mesh te brinda la opción de implementar y administrar puertas de enlace como parte de tu malla de servicios. Una puerta de enlace describe un balanceador de cargas que opera en el perímetro de la malla que recibe conexiones HTTP/TCP entrantes o salientes. Las puertas de enlace son proxies de Envoy que te brindan un control detallado sobre el tráfico que entra y sale de la malla.
Como práctica recomendada, crea un espacio de nombres independiente para las puertas de enlace. No implementes las puertas de enlace en el espacio de nombres istio-system
.
Puedes instalar una o más puertas de enlace de Istio en tu clúster para manejar el tráfico de entrada típico mediante los siguientes pasos:
Elige una de estas dos opciones a fin de configurar el espacio de nombres en el que implementarás la puerta de enlace en pasos posteriores.
- Habilita el espacio de nombres para la inserción:
kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid --overwrite
O
- Habilita la inserción solo para el Pod de puerta de enlace, pero no para todos los Pods del espacio de nombres. Este comando quita todas las etiquetas de inyección y, luego, habilitarás la inserción en el pod:
kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev-
- Habilita el espacio de nombres para la inserción:
Crea un objeto Deployment y Service para la puerta de enlace mediante el siguiente ejemplo mínimo:
kubectl apply -f - << EOF apiVersion: v1 kind: Service metadata: name: istio-ingressgateway namespace: GATEWAY_NAMESPACE spec: type: LoadBalancer selector: istio: ingressgateway ports: - port: 80 name: http - port: 443 name: https --- apiVersion: apps/v1 kind: Deployment metadata: name: istio-ingressgateway namespace: GATEWAY_NAMESPACE spec: selector: matchLabels: istio: ingressgateway template: metadata: annotations: # This is required to tell Anthos Service Mesh to inject the gateway with the # required configuration. inject.istio.io/templates: gateway labels: istio: ingressgateway istio.io/rev: asm-managed-rapid # This is required only if the namespace is not labeled. spec: containers: - name: istio-proxy image: auto # The image will automatically update each time the pod starts. --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: istio-ingressgateway-sds namespace: GATEWAY_NAMESPACE rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: istio-ingressgateway-sds namespace: GATEWAY_NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: istio-ingressgateway-sds subjects: - kind: ServiceAccount name: default EOF
Después de crear la implementación, verifica que los servicios nuevos funcionen de forma correcta:
kubectl get pod,service -n GATEWAY_NAMESPACE
Verifica un resultado similar al siguiente:
NAME READY STATUS RESTARTS AGE pod/istio-ingressgateway-856b7c77-bdb77 1/1 Running 0 3s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/istio-ingressgateway LoadBalancer 10.24.5.129 34.82.157.6 80:31904/TCP 3s
Puedes permitir que el controlador del plano de datos administrado administre los proxies para las puertas de enlace del mismo modo que lo hace con tus servicios. Si implementaste el plano de datos administrado y deseas que los proxies de tu puerta de enlace estén administrados, etiqueta y anota el espacio de nombres de la puerta de enlace como se describe en Aplica el plano de datos administrado por Google.
Si eliges administrar las puertas de enlace tú mismo, debes reiniciar los pods en GATEWAY_NAMESPACE
cuando se lance una nueva versión de Anthos Service Mesh para que puedan recoger el plano de control nuevo. Antes de reiniciar los Pods, debes confirmar que el nuevo plano de control se haya lanzado a tu clúster. Para ello, verifica la versión del plano de control con la consulta personalizada del Explorador de métricas proporcionada en Verifica las métricas del plano de control.
Configura la detección de extremos (solo para instalaciones de varios clústeres)
El plano de control administrado de Anthos Service Mesh admite una configuración de principales múltiples, de proyecto único y de red única, con la diferencia de que el plano de control no está instalado en el clúster.
Antes de continuar, ya deberías haber ejecutado la secuencia de comandos de instalación en cada clúster como se describe en los pasos anteriores. No es necesario indicar que un clúster es uno principal, este es el comportamiento predeterminado.
Para cada clúster, habilita el descubrimiento de extremos ejecutando los siguientes comandos una vez para cada clúster i=1..N
en la malla:
Para cada clúster, asegúrate de que el contexto de configuración de kubectl apunte al clúster actual:
export CTX=gke_PROJECT_ID_LOCATION_CLUSTER_NAME
Habilita el descubrimiento de extremos mediante la ejecución de los siguientes comandos una vez para cada clúster i=1..N en la malla:
export CTX_i=gke_PROJECT_ID_LOCATION_i_CLUSTER_NAME_i
./bin/istioctl x create-remote-secret --context=${CTX_i} --name=CLUSTER_NAME_i | \ kubectl apply -f - --context=${CTX}
Ejecuta el siguiente comando para verificar que se haya creado el secreto:
kubectl get secret istio-remote-secret-CLUSTER_NAME_i -n istio-system
Verifica el resultado esperado:
NAME TYPE DATA AGE istio-remote-secret-CLUSTER_NAME_i Opaque 1 44s
Si el clúster actual se agrega a una malla de varios clústeres existente, permite que todos los demás clústeres descubran sus extremos mediante la creación de un secreto correspondiente al clúster actual en todos los demás clústeres:
./bin/istioctl x create-remote-secret --context=${CTX} --name=CLUSTER_NAME | \ kubectl apply -f - --context=${CTX_i}
Además, puedes verificar el secreto del otro clúster:
kubectl get secret istio-remote-secret-CLUSTER_NAME -n istio-system --context ${CTX_i}
Verifica el resultado esperado:
NAME TYPE DATA AGE istio-remote-secret-CLUSTER_NAME Opaque 1 44s
Para obtener más detalles y un ejemplo con dos clústeres, consulta Habilita el descubrimiento de extremos.
Implementar aplicaciones
Antes de implementar aplicaciones, quita las etiquetas istio-injection
anteriores de sus espacios de nombres y configura la etiqueta istio.io/rev:asm-managed-rapid
en su lugar:
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid --overwrite
En este punto, configuraste correctamente el plano de control administrado de Anthos Service Mesh. Ahora estás listo para implementar las aplicaciones o puedes implementar la aplicación de muestra de Bookinfo.
Si implementas una aplicación en una configuración de varios clústeres, replica la configuración del plano de control y Kubernetes en todos los clústeres, a menos que planees limitar esa configuración en particular a un subconjunto de clústeres. La configuración que se aplica a un clúster en particular es la fuente de información de ese clúster. Además, si el clúster también ejecuta Anthos Service Mesh 1.7, 1.8 o una versión posterior con la CA de Mesh en otros espacios de nombres, verifica que la aplicación pueda comunicarse con las otras aplicaciones que controla el plano de control en el clúster.
Verifica las métricas del plano de control
Puedes ver la versión del plano de control y el plano de datos en el Explorador de métricas.
Para verificar que tu configuración funcione de forma correcta, sigue estos pasos:
En la consola de Google Cloud, visualiza las métricas del plano de control:
Elige tu lugar de trabajo y agrega una consulta personalizada con los siguientes parámetros:
- Tipo de recurso: Contenedor de Kubernetes
- Métrica: Clientes del proxy
- Filtro:
container_name="cr-asm-managed-rapid"
- Agrupar por: Etiqueta de revisión y etiqueta proxy_version
- Suma de agregador
- Período: 1 minuto
Cuando ejecutas Anthos Service Mesh con un plano de control administrado por Google y en el clúster, puedes distinguir las métricas por su nombre de contenedor. Por ejemplo, las métricas administradas tienen
container_name="cr-asm-managed"
, mientras que las métricas no administradas tienencontainer_name="discovery"
. Para mostrar las métricas de ambos, quita el filtro encontainer_name="cr-asm-managed"
.Para verificar la versión del plano de control y del proxy, inspecciona los siguientes campos en el Explorador de métricas:
- En el campo revisión, se indica la versión del plano de control.
- El campo proxy_version indica el
proxy_version
. - El campo value indica el número de proxies conectados.
A fin de conocer el canal actual para la asignación de versiones de Anthos Service Mesh, consulta Versiones de Anthos Service Mesh por canal.
Migra aplicaciones a Anthos Service Mesh administrado
Anthos Service Mesh administrado solo es compatible con la migración desde Anthos Service Mesh 1.9 que usa la CA de Mesh.
Para migrar a Anthos Service Mesh administrado, sigue estos pasos:
Ejecuta la secuencia de comandos como se indica en la sección Aplica el plano de control administrado por Google.
Si implementaste el plano de control y el plano de datos administrados por Google, haz lo siguiente:
Habilita la administración del plano de datos:
kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Habilita Anthos Service Mesh en la flota:
gcloud alpha container hub mesh enable --project=PROJECT_ID
Reemplaza la etiqueta del espacio de nombres actual por la etiqueta
istio.io/rev:asm-managed-rapid
:kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-managed-rapid \ --overwrite
Realiza una actualización progresiva de las implementaciones en el espacio de nombres:
kubectl rollout restart deployment -n NAMESPACE
Prueba la aplicación para verificar que las cargas de trabajo funcionen de forma correcta.
Si tienes cargas de trabajo en otros espacios de nombres, repite los pasos anteriores para cada espacio de nombres.
Si implementaste la aplicación en una configuración de varios clústeres, replica la configuración de Istio y Kubernetes en todos los clústeres, a menos que exista el deseo de limitar esa configuración a un subconjunto de clústeres solamente. La configuración que se aplica a un clúster en particular es la fuente de información de ese clúster.
Para verificar que las métricas aparezcan como se espera, sigue los pasos en Verifica las métricas del plano de control.
Un clúster puede tener una combinación de revisiones, por ejemplo, Anthos Service Mesh 1.7 y 1.8, y un plano de control dentro del clúster. Puedes combinar espacios de nombres con diferentes revisiones del plano de control de Anthos Service Mesh de manera indefinida.
Si estás seguro de que tu aplicación funciona como se esperaba, puedes quitar el clúster integrado istiod
después de cambiar todos los espacios de nombres al plano de control en el cluster o mantenerlos como una copia de seguridad; istiod
reducirá la escala verticalmente de forma automática para usar menos recursos. Para quitarlo, ve a Borra el plano de control anterior.
Si encuentras problemas, puedes identificarlos y resolverlos mediante la información que aparece en Resuelve problemas del plano de control administrado y, si es necesario, revertir a la versión anterior.
Borrar el plano de control anterior
Después de instalar y confirmar que todos los espacios de nombres usan el plano de control administrado por Google, puedes borrar el plano de control anterior.
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Si usaste istioctl kube-inject
en lugar de la inserción automática, o si instalaste puertas de enlace adicionales, verifica las métricas del plano de control y verifica que la cantidad de extremos conectados sea cero.
Revertir
Realiza los siguientes pasos si necesitas revertir a la versión anterior del plano de control:
Actualiza las cargas de trabajo que se insertarán con la versión anterior del plano de control: En el siguiente comando, el valor de revisión
asm-191-1
solo se usa como ejemplo. Reemplaza el valor de ejemplo por la etiqueta de revisión de tu plano de control anterior.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
Reinicia los Pods para activar la reinserción a fin de que los proxies tengan la versión de Istio:
kubectl rollout restart deployment -n NAMESPACE
El plano de control administrado escalará de forma automática a cero y no usará ningún recurso cuando no esté en uso. Los webhooks y el aprovisionamiento mutados permanecerán y no afectarán el comportamiento del clúster.
La puerta de enlace ahora está configurada en la revisión asm-managed
. Para revertirlo, vuelve a ejecutar el comando de instalación de Anthos Service Mesh, que volverá a implementar la puerta de enlace que apunta al plano de control en el clúster:
kubectl -n istio-system rollout undo deploy istio-ingressgateway
Espera el siguiente resultado con éxito:
deployment.apps/istio-ingressgateway rolled back
Migra una puerta de enlace al plano de control administrado por Google
Crea una implementación de Kubernetes para la versión nueva de la puerta de enlace mediante la documentación. Debes configurar el servicio de Kubernetes Gateway existente para seleccionar la versión anterior y la nueva, mediante el campo
selector
en la configuración del servicio.Mediante el uso del comando kubectl scale, escala verticalmente y de forma gradual la implementación nueva, mientras reduces verticalmente la escala de la implementación anterior y verificas si hay indicadores de cualquier interrupción o tiempo de inactividad del servicio. Si la migración se realiza correctamente, no deberías alcanzar instancias anteriores ni experimentar interrupciones del servicio.
Desinstalar
El plano de control administrado por Google se escala automáticamente a cero cuando ningún espacio de nombres lo está utilizando; por lo tanto, no se requiere desinstalación.
Soluciona problemas
Para identificar y resolver problemas cuando usas el plano de control administrado, consulta Resuelve problemas del plano de control administrado.
Próximos pasos
- Obtén información sobre los canales de versiones.