Opciones de configuración de pods de Google Kubernetes Engine mediante la inserción automática de Envoy
En esta guía se proporciona información sobre opciones y tareas adicionales para el inyector automático de sidecar de Envoy.
Añadir proxies de sidecar a cargas de trabajo
Una vez que hayas instalado el inyector sidecar en tus clústeres, los proxies sidecar se insertarán automáticamente en 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 sidecar, debes reiniciarlas para que se produzca la inyección.
En el caso de los pods gestionados por 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 has usado ninguno de los controladores anteriores para implementar tus pods, debes eliminar los pods individualmente. Después, se vuelven a crear automáticamente con nuevos proxies sidecar.
kubectl delete pod POD_NAME -n NAMESPACE
Verifica que se haya insertado un contenedor proxy adicional en cada uno de tus pods:
kubectl get pods -n NAMESPACE
Por ejemplo, con el cliente busybox creado anteriormente, deberías ver 2/2 pods en ejecución, uno para la aplicación busybox y otro para el proxy sidecar Envoy insertado:
NAME READY STATUS RESTARTS AGE busybox-c54f578c9-c9fk4 2/2 Running 183 7d15h
Anulaciones de inyección
De forma predeterminada, si habilitas un espacio de nombres, se habilita la inserción de un proxy adicional en todos los pods residentes. La inyección también se puede configurar de forma selectiva para diferentes ámbitos para adaptarse a necesidades específicas. Por ejemplo, las anulaciones deben usarse para evitar la inyección de proxy sidecar en los servicios de gRPC sin proxy.
Ten en cuenta que las anulaciones de inyección solo se aplican cuando el espacio de nombres está habilitado y se aplican con la siguiente prioridad: Anotaciones de pod > NeverInjectSelector > AlwaysInjectSelector > Política predeterminada
Habilitar o inhabilitar la inyección en pods concretos
Usa la siguiente anotación de pod para activar o desactivar la inyección en un pod específico de un espacio de nombres habilitado:
... metadata: annotations: td-injection: "true" / "false"
Personalizar el comportamiento de intercepción del tráfico
De forma predeterminada, todo el tráfico de salida de su aplicación se intercepta y se redirige al proxy sidecar de Envoy. El proxy de Envoy puede gestionar el tráfico según las instrucciones recibidas de Cloud Service Mesh. En algunos casos, puede que quieras modificar este comportamiento para omitir el proxy sidecar.
Usa las siguientes anotaciones de Pod para excluir el tráfico de la interceptación y la redirección.
Excluir de la interceptación por intervalo de direcciones IP de salida
Puede excluir el tráfico de la intercepción por intervalo de direcciones IP.
... metadata: annotations: cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
La anotación cloud.google.com/excludeOutboundCIDRs
Pod es una lista separada por comas de intervalos de direcciones IP salientes en formato CIDR. El tráfico de salida destinado a estos intervalos de direcciones IP no se redirige al sidecar de Envoy.
Ten en cuenta que debes incluir 169.254.169.254/32
en la anotación de Pod para asegurarte de que las aplicaciones puedan comunicarse con el servidor de metadatos. Si no especifica la anotación cloud.google.com/excludeOutboundCIDRs
Pod, la intercepción de tráfico se configura para excluir el intervalo CIDR saliente "169.254.169.254/32".
Incluir en la intercepción por intervalo de direcciones IP de salida
Puede incluir tráfico en la intercepción por intervalo de direcciones IP.
... metadata: annotations: cloud.google.com/includeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
La anotación cloud.google.com/includeOutboundCIDRs
Pod es una lista separada por comas de intervalos de direcciones IP salientes en formato CIDR. El tráfico de salida destinado a estos intervalos de direcciones IP se redirige al sidecar de Envoy.
El carácter comodín *
se puede usar para redirigir todo el tráfico saliente. Una lista vacía inhabilita todo el tráfico saliente. La anotación tiene el valor predeterminado *
.
Excluir de la interceptación por número de puerto saliente
Puede excluir el tráfico de la intercepción y la redirección por número de puerto de salida.
... metadata: annotations: cloud.google.com/excludeOutboundPorts: "10001, 10002"
La anotación cloud.google.com/excludeOutboundPorts
de Pod es una lista de puertos salientes separados por comas. El tráfico de salida destinado a estos puertos se excluye de la interceptación y la redirección al sidecar de Envoy.
Si no especificas la anotación cloud.google.com/excludeOutboundPorts
, el tráfico saliente destinado a cualquier puerto se interceptará y se redirigirá al sidecar de Envoy. Esto equivale a pasar la anotación cloud.google.com/excludeOutboundPorts
con una lista vacía ("").
Incluir en la interceptación por número de puerto entrante
Puede incluir tráfico en la intercepción por número de puerto de entrada.
... metadata: annotations: cloud.google.com/includeInboundPorts: "10001, 10002"
La anotación cloud.google.com/includeInboundPorts
Pod es una lista separada por comas de los puertos de entrada cuyo tráfico se va a redirigir al sidecar de Envoy. El carácter comodín *
se puede usar para configurar la redirección de todos los puertos. Si el valor está vacío, se inhabilitan todas las redirecciones entrantes. El valor predeterminado es una cadena vacía ("").
Excluir de la interceptación por número de puerto entrante
Puede excluir el tráfico de la intercepción por número de puerto de entrada.
... metadata: annotations: cloud.google.com/excludeInboundPorts: "10001, 10002"
La anotación cloud.google.com/excludeInboundPorts
Pod es una lista separada por comas de puertos de entrada que se excluirán de la redirección al sidecar de Envoy. La anotación solo se aplica cuando se redirige todo el tráfico entrante (*
). El valor predeterminado es una cadena vacía ("").
Habilitar certificados gestionados
Puedes habilitar los certificados de carga de trabajo gestionados.
... metadata: annotations: cloud.google.com/enableManagedCerts: "true"
Cuando la anotación de Pod cloud.google.com/enableManagedCerts
se define como true
,
los certificados de carga de trabajo gestionados por GKE firmados por el servicio de autoridad de certificación
se insertan y se montan en el contenedor sidecar. El valor predeterminado de la anotación es false
.
Configurar metadatos de proxy de sidecar
Para admitir funciones adicionales de Cloud Service Mesh, los proxies sidecar pueden heredar metadatos específicos de sus pods encapsuladores. Hay dos formas de hacerlo. Ambas opciones añaden metadatos y los comparten con Cloud Service Mesh cuando el proxy sidecar se conecta a Cloud Service Mesh. Las opciones son mutuamente exclusivas.
La primera opción le permite especificar pares clave-valor de metadatos individuales. Por ejemplo, incluya la siguiente anotación en la especificación de la plantilla de Pod para aplicar la etiqueta "version": "dev"
a sus proxies sidecar insertados.
... metadata: annotations: cloud.google.com/proxyMetadata: '{"version": "dev"}'
La segunda opción añade todas las etiquetas del pod al proxy sidecar insertado del pod.
... metadata: annotations: cloud.google.com/forwardPodLabels: "true"
Si no especifica la anotación cloud.google.com/forwardPodLabels
, las etiquetas de Pod no se añadirán al proxy sidecar. Ten en cuenta que las anotaciones cloud.google.com/proxyMetadata
y cloud.google.com/forwardPodLabels
se excluyen mutuamente. Si define ambos, cloud.google.com/forwardPodLabels
tiene prioridad y cloud.google.com/proxyMetadata
se ignora.
La filtración de configuración permite a Cloud Service Mesh compartir un subconjunto de la configuración solo con los proxies específicos que coincidan con esta etiqueta "version": "dev"
.
Las implementaciones actuales deben reiniciarse para que esta configuración se aplique.
Anotaciones de pods admitidas
Cloud Service Mesh admite las siguientes anotaciones de pods para la inyección de sidecars. Aunque es posible que funcionen otras anotaciones del inyector de sidecar, la siguiente lista representa las anotaciones que admite Cloud Service Mesh. Para evitar fallos o inestabilidad, no crees una dependencia de otras anotaciones en tu implementación de producción.
Nombre de la anotación | Valor | Descripción |
---|---|---|
td-injection | Valor booleano representado como una cadena. Por ejemplo: "true " |
Especifica si se debe insertar automáticamente un sidecar de Envoy en la carga de trabajo. |
cloud.google.com/proxyMetadata | Mapa JSON de pares clave-valor. Por ejemplo: "'{"version":
"dev"}' "
|
Especifica los pares clave/valor de un mapa JSON que se deben añadir a los metadatos de Envoy. |
cloud.google.com/forwardPodLabels | "true" o "false" | Si se le asigna el valor "true", todas las etiquetas de Pod se añadirán a los metadatos de Envoy y se ignorará la anotación "cloud.google.com/proxyMetadata". El valor predeterminado es "false". |
cloud.google.com/excludeOutboundPorts | Lista de puertos de salida separados por comas | Tráfico de salida que indica que se excluyen todos estos puertos de destino de la interceptación o la redirección al sidecar de Envoy. Este tráfico eludirá el proxy Envoy y no se gestionará según la configuración de Cloud Service Mesh. El valor predeterminado es una cadena vacía (es decir, ""). |
cloud.google.com/includeInboundPorts | Lista de puertos de entrada separados por comas | Lista separada por comas de los puertos de entrada para los que se redirige el tráfico al sidecar de Envoy. Usa el carácter comodín `*` para configurar la redirección de todos los puertos. Si el valor está vacío, se inhabilitarán todas las redirecciones entrantes. El valor predeterminado es una cadena vacía (""). |
cloud.google.com/excludeInboundPorts | Lista de puertos de entrada separados por comas | Lista separada por comas de los puertos de entrada para los que no se redirige el tráfico al sidecar de Envoy. La anotación solo se aplica cuando se redirige todo el tráfico entrante (*). El valor predeterminado es una cadena vacía (""). |
cloud.google.com/excludeOutboundCIDRs | Lista separada por comas de intervalos de IP salientes en formato CIDR. | Tráfico de salida que indica que se excluyen cualquiera de estas IPs de destino de la intercepción o la redirección al sidecar de Envoy. Este tráfico eludirá el proxy Envoy y no se gestionará según la configuración de Cloud Service Mesh. El valor predeterminado es "169.254.169.254/32", que es el intervalo necesario para comunicarse con el servidor de metadatos. Ten en cuenta que este intervalo es obligatorio, por lo que, si especificas la anotación `excludeOutboundCIDRs`, asegúrate de incluir "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 separada por comas de intervalos de IP salientes en formato CIDR. | Tráfico de salida que indica que alguna de estas IPs de destino se incluye en la intercepción o la redirección al sidecar de Envoy. Este tráfico se dirige al proxy Envoy y se gestiona según la configuración de Cloud Service Mesh. El valor predeterminado es "169.254.169.254/32", que es el intervalo necesario para comunicarse con el servidor de metadatos. Ten en cuenta que este intervalo es obligatorio, por lo que, si especificas la anotación `includeOutboundCIDRs`, asegúrate de incluir "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 | Valor booleano representado como una cadena. Por ejemplo: "true " |
Si se define como "true ", los certificados de carga de trabajo gestionados por GKE firmados por el servicio de autoridad de certificación se insertan y se montan en el contenedor sidecar. El valor predeterminado es "false ".
|
Desinstalar el inyector de sidecar
Desinstala el inyector sidecar con los siguientes comandos:
kubectl delete MutatingWebhookConfiguration td-mutating-webhook kubectl label namespace default td-injection-