Opciones para la configuración de Pods de Google Kubernetes Engine con inserción automática de Envoy

En esta guía, encontrarás información sobre opciones y tareas adicionales para el inyector automático de sidecar de Envoy.

Agrega proxies de sidecar a las cargas de trabajo existentes

Después de haber instalado el inyector de sidecar en tus clústeres, los proxies de sidecar se inyectan de forma automática a los Pods recién creados en los espacios de nombres habilitados. Si ya tienes cargas de trabajo en ejecución antes de habilitar el inyector de sidecar, debes reiniciarlas para que se pueda llevar a cabo la inserción.

Para los Pods administrados mediante controladores de Deployment, DaemonSet o StatefulSet, puedes ejecutar lo siguiente:

# Deployment
kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE

# DaemonSet
kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE

# StatefulSet
kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE

Si no usaste ninguno de los controladores anteriores para implementar tus Pods, debes borrar cada Pod de forma individual. Luego, se vuelven a crear de forma automática con nuevos proxies de sidecar.

kubectl delete pod POD_NAME -n NAMESPACE

Verifica que se haya insertado un contenedor de proxy de sidecar en cada uno de tus Pods:

kubectl get pods -n NAMESPACE

Por ejemplo, con el cliente de Busybox que se creó antes, deberías ver 2/2 Pods en ejecución: uno para la aplicación de Busybox y otro para el proxy de sidecar de Envoy que se insertó:

NAME                      READY   STATUS    RESTARTS   AGE
busybox-c54f578c9-c9fk4   2/2     Running   183        7d15h

Anulaciones de inserciones

De forma predeterminada, habilitar un espacio de nombres permite la inserción del proxy de sidecar para todos los Pods residentes. La inserción también se puede configurar de forma selectiva para diferentes permisos a fin de satisfacer necesidades específicas. Por ejemplo, las anulaciones deben usarse a fin de evitar la inserción del proxy de sidecar para los servicios de gRPC sin proxy.

Ten en cuenta que las anulaciones de inserción solo se aplican cuando el espacio de nombres está habilitado y entran en vigor según la siguiente prioridad: Anotaciones de Pod > NeverInLaunchSelector > AlwaysInjetSelector > Política predeterminada

Habilita o inhabilita la inserción para pods individuales específicos

Usa la siguiente anotación de Pod para activar o desactivar la inserción en un Pod específico en un espacio de nombres habilitado:

...
metadata:
  annotations:
    td-injection: "true" / "false"

Personaliza el comportamiento de la interceptación de tráfico

De forma predeterminada, todo el tráfico saliente de tu aplicación se intercepta y se redirecciona al proxy de sidecar de Envoy. Luego, el proxy de Envoy puede controlar el tráfico según las instrucciones que recibe de Cloud Service Mesh. En algunos casos, es posible que desees modificar este comportamiento para omitir el proxy de sidecar.

Usa las siguientes anotaciones de Pod para excluir el tráfico de la intercepción y el redireccionamiento.

Excluye de la intercepción por rango de direcciones IP salientes

Puedes excluir el tráfico de la intercepción por rango de direcciones IP.

...
metadata:
  annotations:
    cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"

La anotación de Pod cloud.google.com/excludeOutboundCIDRs es una lista separada por comas de rangos de direcciones IP salientes en formato CIDR. El tráfico de salida destinado a estos rangos de direcciones IP no se redirecciona al sidecar de Envoy.

Ten en cuenta que debes enumerar 169.254.169.254/32 en la anotación del Pod para asegurarte de que las aplicaciones puedan comunicarse con el servidor de metadatos. Si no especificas la anotación del Pod cloud.google.com/excludeOutboundCIDRs, la interceptación de tráfico se configura para excluir el rango de CIDR saliente “169.254.169.254/32”.

Incluir en la intercepción por rango de direcciones IP salientes

Puedes incluir el tráfico en la intercepción por rango de direcciones IP.

...
metadata:
  annotations:
    cloud.google.com/includeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"

La anotación de Pod cloud.google.com/includeOutboundCIDRs es una lista separada por comas de rangos de direcciones IP salientes en formato CIDR. El tráfico de salida destinado a estos rangos de direcciones IP se redirecciona al sidecar de Envoy.

El carácter comodín * se puede usar para redireccionar todo el tráfico saliente. Una lista vacía inhabilita todo el tráfico saliente. El valor predeterminado de la anotación es *.

Excluye de la interceptación por número de puerto de salida

Puedes excluir el tráfico de la intercepción y el redireccionamiento por número de puerto saliente.

...
metadata:
  annotations:
    cloud.google.com/excludeOutboundPorts: "10001, 10002"

La anotación de Pod cloud.google.com/excludeOutboundPorts es una lista de puertos salientes separados por comas. El tráfico de salida destinado a estos puertos se excluye de la intercepción y el redireccionamiento al sidecar de Envoy.

Si no especificas la anotación cloud.google.com/excludeOutboundPorts, el tráfico saliente destinado a cualquier puerto se intercepta y se redirecciona al sidecar de Envoy. Esto equivale a pasar la anotación cloud.google.com/excludeOutboundPorts con una lista vacía (“”).

Incluye en la interceptación por número de puerto entrante

Puedes incluir el tráfico en la intercepción por número de puerto entrante.

...
metadata:
  annotations:
    cloud.google.com/includeInboundPorts: "10001, 10002"

La anotación de Pod cloud.google.com/includeInboundPorts es una lista de puertos entrantes separados por comas para los que se redireccionará el tráfico al sidecar de Envoy. El carácter comodín * se puede usar para configurar el redireccionamiento para todos los puertos. Un valor vacío inhabilita toda la redirección entrante. El valor predeterminado es una cadena vacía ("").

Excluye de la interceptación por número de puerto entrante

Puedes excluir el tráfico de la intercepción por número de puerto entrante.

...
metadata:
  annotations:
    cloud.google.com/excludeInboundPorts: "10001, 10002"

La anotación de Pod cloud.google.com/excludeInboundPorts es una lista de puertos entrantes separados por comas que se excluirán del redireccionamiento al sidecar de Envoy. La anotación solo se aplica cuando se redirecciona todo el tráfico entrante (*). El valor predeterminado es una cadena vacía ("").

Habilita los certificados administrados

Puedes habilitar los certificados de cargas de trabajo administradas.

...
metadata:
  annotations:
    cloud.google.com/enableManagedCerts: "true"

Cuando la anotación cloud.google.com/enableManagedCerts del Pod se establece en true, los certificados de carga de trabajo administrados de GKE firmados por Certificate Authority Service se insertan y activan en el contenedor de sidecar. El valor predeterminado de la anotación es false.

Configura los metadatos de proxy de sidecar

Para admitir funciones adicionales de Cloud Service Mesh, los proxies de sidecar pueden heredar metadatos específicos de sus Pods de encapsulamiento. Hay dos maneras de lograr esto. Ambas opciones agregan metadatos y comparten los metadatos con Cloud Service Mesh cuando el proxy de sidecar se conecta a Cloud Service Mesh. Las opciones son mutuamente excluyentes.

La primera opción te permite especificar pares clave-valor de metadatos individuales. Por ejemplo, incluye la siguiente anotación en tu especificación de plantilla de Pod para aplicar la etiqueta "version": "dev" a los proxies de sidecar insertados.

...
metadata:
  annotations:
    cloud.google.com/proxyMetadata: '{"version": "dev"}'

La segunda opción agrega todas las etiquetas del Pod al proxy de sidecar que se insertó del pod.

...
metadata:
  annotations:
    cloud.google.com/forwardPodLabels: "true"

Si no especificas la anotación cloud.google.com/forwardPodLabels, las etiquetas del Pod no se agregarán al proxy de sidecar. Ten en cuenta que las anotaciones cloud.google.com/proxyMetadata y cloud.google.com/forwardPodLabels son mutuamente excluyentes. Si estableces las dos, cloud.google.com/forwardPodLabels tiene prioridad y se ignora cloud.google.com/proxyMetadata.

Luego, el filtrado de configuración permite que Cloud Service Mesh comparta un subconjunto de configuración solo con los proxies específicos que coinciden con esta etiqueta "version": "dev".

Las implementaciones existentes deben reiniciarse para que se aplique esta configuración.

Anotaciones de pod compatibles

Cloud Service Mesh admite las siguientes anotaciones de Pod para la inserción de sidecar. Si bien las anotaciones adicionales del inyector de sidecar pueden funcionar, la siguiente lista representa las anotaciones compatibles con Cloud Service Mesh. Para evitar fallas o inestabilidad, no crees una dependencia en otras anotaciones en tu implementación de producción.

Nombre de la anotación Valor Descripción
td-injection Booleano, representado como una string. Por ejemplo: “true Especifica si un sidecar de Envoy se debe insertar de forma automática en la carga de trabajo.
cloud.google.com/proxyMetadata Mapa JSON de pares clave-valor. Por ejemplo: “'{"version": "dev"}' Especifica los pares clave-valor en un mapa JSON que se debe agregar a los metadatos de Envoy.
cloud.google.com/forwardPodLabels “true” o “false” Cuando se configura como “verdadero”, todas las etiquetas de Pod se agregan a los metadatos de Envoy y se ignora la anotación “cloud.google.com/proxyMetadata”. La configuración predeterminada es “falso”.
cloud.google.com/excludeOutboundPorts Lista de puertos salientes separados por comas El tráfico de salida que indica que cualquiera de estos puertos de destino se excluye de la intercepción o el redireccionamiento al sidecar de Envoy. Este tráfico omitirá el proxy de Envoy y no se manejará según la configuración de Cloud Service Mesh. El valor predeterminado es una string vacía (es decir, “”).
cloud.google.com/includeInboundPorts Lista de puertos entrantes separados por comas Es una lista de puertos entrantes separados por comas para los que el tráfico se redirecciona al sidecar de Envoy. Usa el carácter comodín "*" para configurar el redireccionamiento para todos los puertos. Un valor vacío inhabilita toda la redireccionamiento entrante. El valor predeterminado es una cadena vacía ("").
cloud.google.com/excludeInboundPorts Lista de puertos entrantes separados por comas Es una lista de puertos entrantes separados por comas para los que el tráfico no se redirecciona al sidecar de Envoy. La anotación solo se aplica cuando se redirecciona todo el tráfico entrante (*). El valor predeterminado es una cadena vacía ("").
cloud.google.com/excludeOutboundCIDRs Lista de rangos de IP salientes separados por comas en formato CIDR. El tráfico de salida que indica que cualquiera de estas IP de destino se excluye de la intercepción o el redireccionamiento al sidecar de Envoy. Este tráfico omitirá el proxy de Envoy y no se manejará según la configuración de Cloud Service Mesh. La configuración predeterminada es “169.254.169.254/32”, que es el rango necesario para comunicarse con el servidor de metadatos. Ten en cuenta que este rango es obligatorio, por lo que si especificas la anotación “excludeOutboundCIDRs”, asegúrate de incluir también “169.254.169.254/32” además de cualquier otro CIDR. Asegúrate de que no haya espacios en la lista separada por comas.
cloud.google.com/includeOutboundCIDRs Lista de rangos de IP salientes separados por comas en formato CIDR. El tráfico de salida que indica que cualquiera de estas IP de destino se incluye en la intercepción o el redireccionamiento al sidecar de Envoy. Este tráfico se dirige al proxy de Envoy y se controla según la configuración de Cloud Service Mesh. La configuración predeterminada es “169.254.169.254/32”, que es el rango necesario para comunicarse con el servidor de metadatos. Ten en cuenta que este rango es obligatorio, por lo que si especificas la anotación “includeOutboundCIDRs”, asegúrate de incluir también “169.254.169.254/32” además de cualquier otro CIDR. Asegúrate de que no haya espacios en la lista separada por comas.
cloud.google.com/enableManagedCerts Booleano, representado como una string. Por ejemplo: “true Cuando se establece en "true", los certificados de carga de trabajo administrados de GKE firmados por Certificate Authority Service se insertan y activan en el contenedor de sidecar. El valor predeterminado es "false".

Desinstala el inyector de sidecar

Desinstala el inyector de sidecar con los siguientes comandos:

kubectl delete MutatingWebhookConfiguration td-mutating-webhook
kubectl label namespace default td-injection-