Cómo insertar proxies de sidecar con Cloud Service Mesh
En este documento, se explica cómo configurar la inserción del proxy de sidecar con Cloud Service Mesh para mejorar la seguridad, confiabilidad y observabilidad de las redes. Estas funciones se abstraen del contenedor principal de la aplicación y se implementan en un proxy fuera del proceso común (el archivo adicional), que se entrega como un contenedor por separado en el mismo Pod. Esto proporciona las funciones de Cloud Service Mesh sin rediseñar las aplicaciones de producción para participar en una malla de servicios.
La inserción automática del proxy de sidecar (la inserción automática) ocurre cuando Cloud Service Mesh detecta una etiqueta de espacio de nombres que se configura para el Pod de la carga de trabajo. El proxy intercepta todo el tráfico de entrada y salida a las cargas de trabajo y comunica con Cloud Service Mesh.
Habilita la inserción automática de sidecar
La forma recomendada de insertar proxies de sidecar es usar el inyector automático del sidecar basado en webhooks, aunque puedes actualizar de forma manual la configuración de Kubernetes de tus Pods.
Para habilitar la inserción automática, etiqueta tus espacios de nombres con las etiquetas de inyección predeterminadas si la etiqueta predeterminada está configurada o con la etiqueta de revisión en tu espacio de nombres.
La etiqueta que agregues también depende de si implementaste Cloud Service Mesh administrado (con la API de Fleet o con asmcli
) o si instalaste el plano de control en el clúster. El webhook de inyector de sidecar usa la etiqueta para asociar los sidecars insertados con una revisión de plano de control en particular.
Para habilitarla, usa este comando:
En el clúster
Usa el siguiente comando para encontrar la etiqueta de revisión en
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
El resultado es similar al siguiente:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-11910-9-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586 istiod-asm-11910-9-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
En el resultado, en la columna
LABELS
, observa el valor de la etiqueta de revisiónistiod
, que está después del prefijoistio.io/rev=
. En este ejemplo, el valor esasm-11910-9
.Aplica la etiqueta de revisión a los espacios de nombres y quita la etiqueta istio-injection (si existe). En el siguiente comando,
NAMESPACE
es el nombre del espacio de nombres en el que deseas habilitar la inserción automática yREVISION
es la etiqueta de revisión que anotaste en el paso anterior.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Puedes ignorar el mensaje
"istio-injection not found"
en el resultado. Esto significa que el espacio de nombres no tenía la etiquetaistio-injection
, que debería aparecer en las nuevas instalaciones de Cloud Service Mesh o en implementaciones nuevas. Debido a que la inserción automática el comportamiento no está definido cuando un espacio de nombres tiene tantoistio-injection
y la etiqueta de revisión, todos los comandoskubectl label
del La documentación de Cloud Service Mesh garantiza de forma explícita que solo se configure uno de ellos.Para reiniciar los Pods afectados, sigue los pasos de la siguiente sección.
Malla de servicios administrados
Usa el siguiente comando para ubicar los canales de versiones disponibles:
kubectl -n istio-system get controlplanerevision
El resultado es similar a este:
NAME AGE asm-managed 6d7h
En el resultado, selecciona el valor debajo de la columna
NAME
es el valor de etiquetaREVISION
que corresponde a la etiqueta canal de versiones para la versión de Cloud Service Mesh. Aplica esta etiqueta a los espacios de nombres y quita la etiquetaistio-injection
(si existe). En el siguiente comando, reemplazaREVISION
por la etiqueta de revisión que anotaste antes y reemplazaNAMESPACE
por el nombre del espacio de nombres en el que deseas habilitar la inserción automática:kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Puedes ignorar el mensaje
"istio-injection not found"
en el resultado. Esto significa que el espacio de nombres no tenía la etiquetaistio-injection
, que debería aparecer en las nuevas instalaciones de Cloud Service Mesh o en implementaciones nuevas. Debido a que la inserción automática el comportamiento no está definido cuando un espacio de nombres tiene tantoistio-injection
y la etiqueta de revisión, todos los comandoskubectl label
del La documentación de Cloud Service Mesh garantiza de forma explícita que solo se configure uno de ellos.Para reiniciar los Pods afectados, sigue los pasos de la siguiente sección.
Si también implementaste el plano de datos administrado por Google opcional, anota el espacio de nombres
demo
de la siguiente manera:kubectl annotate --overwrite namespace YOUR_NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Reinicia los Pods para actualizar los proxies de sidecar
Con la inserción automática de sidecar, puedes actualizar los sidecars para pods existentes con un reinicio de pods:
La forma en la que reinicias los pods dependerá de si se crearon como parte de un objeto Deployment.
Si usaste un Deployment, debes reiniciarlo, de modo que se reinicien todos los pods con sidecars:
kubectl rollout restart deployment -n YOUR_NAMESPACE
Si no usaste un Deployment, borra los pods, y se volverán a crear de forma automática con sidecars:
kubectl delete pod -n YOUR_NAMESPACE --all
Verifica que todos los pods en el espacio de nombres tengan sidecars incorporados:
kubectl get pod -n YOUR_NAMESPACE
En el siguiente resultado de ejemplo del comando anterior, observa que la columna
READY
indica que hay dos contenedores para cada una de tus cargas de trabajo: el contenedor principal y el contenedor del proxy de sidecar.NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
Próximos pasos
Conoce más sobre:
- Revisiones del plano de control de Cloud Service Mesh
- Implementa cargas de trabajo
- Personaliza la inserción