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:
    sidecar.istio.io/inject: "true" / "false"

Habilita o inhabilita la inserción para grupos específicos de Pods

El inyector de sidecar se puede configurar para que siempre inserte Pods, o nunca, en los espacios de nombres habilitados en función de un arreglo de selectores de etiquetas de Kubernetes. Por ejemplo, usa los siguientes comandos a fin de configurar el inyector de sidecar para que no inserte un proxy de sidecar si el Pod tiene la etiqueta “run=client”:

kubectl edit configmap -n istio-control istio-sidecar-injector

...
config: |-
  policy: enabled
  alwaysInjectSelector:
    []

  neverInjectSelector:
    - matchLabels:
        run: client
...

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

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. El proxy de Envoy puede controlar las el tráfico de acuerdo con las instrucciones recibidas 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.

Excluir 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 del Pod cloud.google.com/excludeOutboundCIDRs es una anotación separada por comas una lista de rangos de direcciones IP salientes en formato CIDR. El tráfico de salida destinado a con estos rangos de direcciones IP no se redirecciona al archivo adicional 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 tráfico en la interceptació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 del Pod cloud.google.com/includeOutboundCIDRs es una anotación separada por comas una lista de rangos de direcciones IP salientes en formato CIDR. El tráfico de salida destinado a estos rangos de direcciones IP se redirecciona al archivo adicional de Envoy.

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

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

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

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

La anotación del Pod cloud.google.com/excludeOutboundPorts es una anotación separada por comas una lista de puertos de salida. Se excluye el tráfico de salida destinado a estos puertos y el redireccionamiento al archivo adicional de Envoy.

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

Incluir en la interceptación por número de puerto de entrada

Puedes incluir tráfico en la interceptación mediante el número de puerto de entrada.

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

La anotación del Pod cloud.google.com/includeInboundPorts es una anotación separada por comas una lista de puertos de entrada a los que se redireccionará el tráfico a Envoy un archivo adicional. El carácter comodín * se puede utilizar para configurar el redireccionamiento para todos los puertos. Si el valor está vacío, se inhabilitará todo el redireccionamiento entrante. El valor predeterminado es una cadena vacía ("").

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

Puedes excluir el tráfico de la interceptación mediante el número de puerto de entrada.

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

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

Habilitar certificados administrados

Puedes habilitar certificados de carga de trabajo administrados.

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

Cuando la anotación del Pod cloud.google.com/enableManagedCerts se establece en true, Certificados de carga de trabajo administrados de GKE firmados por Certificate Authority Service se insertan y activan en el contenedor de archivo adicional. El valor de la anotación La configuración predeterminada 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 los comparten 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.

Filtrado de configuraciones luego, permite que Cloud Service Mesh comparta un subconjunto de configuración solo con el 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 Pods para el archivo adicional. y la inyección de software. Si bien las anotaciones adicionales del inyector de sidecar pueden funcionar, el La siguiente lista representa las anotaciones que admite 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
sidecar.istio.io/inject 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 administrará de acuerdo con Cloud Service Mesh configuración. El valor predeterminado es una string vacía (es decir, “”).
cloud.google.com/includeInboundPorts Lista de puertos de entrada separados por comas Una lista separada por comas de puertos de entrada para los que se recibe tráfico al archivo adicional de Envoy. Usa el carácter comodín `*` para configurar el redireccionamiento para todos los puertos. Un valor vacío inhabilita todo redireccionamiento entrante. El valor predeterminado es una cadena vacía ("").
cloud.google.com/excludeInboundPorts Lista de puertos de entrada separados por comas Una lista separada por comas de puertos de entrada para los que se recibe tráfico no se redireccionan al archivo adicional de Envoy. La anotación solo se aplica cuando se redirecciona todo el tráfico entrante (*). El valor predeterminado a 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 administrará de acuerdo con Cloud Service Mesh configuración. 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 hay 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 se incluye alguna de estas IP de destino en la interceptación o el redireccionamiento al archivo adicional de Envoy. Este tráfico es de se dirige al proxy de Envoy y se maneja de acuerdo con Cloud Service Mesh configuración. 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 Si especificas la anotación `includeEmailCIDRs`, asegúrate de que también Incluye “169.254.169.254/32” además de cualquier otro CIDR. Asegúrate de que no hay espacios en la lista separada por comas.
cloud.google.com/enableManagedCerts Booleano, representado como una string. Por ejemplo: “true Cuando se configura en “true”, la carga de trabajo administrada por GKE se insertan y activan los certificados firmados por Certificate Authority Service en el contenedor de archivo adicional. El valor predeterminado es "false".

Desinstala el inyector de sidecar

Desinstala el inyector de sidecar con los siguientes comandos:

kubectl delete -f specs/
kubectl label namespace default istio-injection-