Opciones para configurar máquinas virtuales de Compute Engine con despliegue automático de Envoy
En esta guía se proporciona información sobre opciones y tareas adicionales para el despliegue automático de Envoy.
Opciones adicionales para crear plantillas de instancia
Cuando creas una plantilla de instancia para el despliegue automatizado del proxy Envoy, puedes usar los siguientes parámetros para definir algunos aspectos del despliegue y el comportamiento de los proxies.
Parámetro | Valor y descripción | Obligatorio u opcional |
---|---|---|
--service-proxy |
enabled Controla si el proxy de servicio y el agente se instalan y configuran en la VM. |
Obligatorio si quieres desplegar y configurar automáticamente el proxy de servicio. Si omite este ajuste, el proxy de servicio no se instalará ni se configurará. |
--service-proxy:serving-ports |
Lista de puertos separados por punto y coma. Los puertos en los que se sirve tu aplicación o carga de trabajo. El proxy de servicio intercepta el tráfico entrante y, a continuación, lo reenvía a los puertos de servicio especificados en localhost. |
Opcional: Si omite esta marca, el proxy de servicio solo gestiona el tráfico saliente de su carga de trabajo. El proxy de servicio no gestiona el tráfico entrante. |
--service-proxy:proxy-port |
Un solo puerto. Puerto en el que escucha el proxy del servicio. La VM intercepta el tráfico y lo redirige a este puerto para que lo gestione el proxy de servicio. |
Opcional. Si omite esta marca, el valor predeterminado es 15001 . |
--service-proxy:network |
El nombre de una red VPC válida. La Google Cloud red de VPC que usa el plano de control del proxy de servicio para generar la configuración dinámica del proxy de servicio. |
Es obligatorio si la VM está en más de una red. De lo contrario, es opcional. Si omite esta marca, se usará el valor especificado con el parámetro --network durante la creación de la plantilla de instancia de VM. |
--service-proxy:tracing |
ON o OFF Habilita el proxy de servicio para generar información de seguimiento distribuido. Si se define como ON , el plano de control del proxy de servicio genera una configuración que habilita el seguimiento basado en el ID de solicitud.Para obtener más información, consulta la documentación de generate_request_id sobre el proxy de Envoy. |
Opcional. Si omite esta marca, el rastreo no se habilita. |
--service-proxy:access-log |
Ruta de archivo de los registros de acceso que el plano de control envía al proxy de servicio. Todas las solicitudes entrantes y salientes se registran en este archivo. Para obtener más información, consulta la documentación sobre el registro de acceso a archivos del proxy de Envoy. |
Opcional. No hay ningún valor predeterminado. Si no especifica la ruta del archivo, no se crearán los registros. |
--service-proxy:intercept-all-outbound-traffic (vista previa) |
Habilita la interceptación de todo el tráfico saliente por parte del proxy de servicio y, a continuación, redirige a un host externo. Usa gcloud beta con esta opción. |
Opcional. |
--service-proxy:exclude-outbound-ip-ranges (vista previa) |
Lista de direcciones IP o intervalos CIDR separados por puntos y comas (;) y especificados entre comillas (") que se deben excluir de la redirección. Solo se aplica cuando se define la marca intercept-all-outbound-traffic . Usa gcloud beta con esta opción.Por ejemplo: exclude-outbound-ip-ranges="8.8.8.8;129.168.10.0/24" |
Opcional. |
--service-proxy:exclude-outbound-port-ranges (vista previa) |
Lista de puertos o intervalos de puertos separados por punto y coma (;) y especificados entre comillas (") que se deben excluir de la redirección. Solo se aplica cuando se define la marca intercept-all-outbound-traffic . Usa gcloud beta con esta opción.Por ejemplo: exclude-outbound-port-ranges="81;8080-8090" |
Opcional. |
--service-proxy:scope (vista previa) |
La opción scope define un límite de configuración lógica para el recurso Gateway .
Cuando se inicia una VM, el proxy de servicio se comunica con Cloud Service Mesh para obtener la información de enrutamiento correspondiente a las rutas asociadas a la pasarela con este nombre de ámbito. Si se especifica scope , se ignora el valor de la red. No puedes especificar los valores de scope y mesh al mismo tiempo. Usa gcloud beta con esta opción. |
Opcional. |
--service-proxy:mesh (vista previa) |
La opción mesh define un límite de configuración lógica para un recurso Mesh .
Cuando se inicia una VM, el proxy de servicio se comunica con Cloud Service Mesh para obtener la información de enrutamiento correspondiente a las rutas asociadas al Mesh con este nombre de malla. Si se especifica mesh , se ignora el valor de la red. No puedes especificar los valores scope y mesh al mismo tiempo. Usar gcloud beta con esta opción |
Opcional. |
--service-proxy:project-number (vista previa) |
La opción project-number especifica el proyecto en el que se crean los recursos Mesh y Gateway . Si no se especifica, se usa el proyecto en el que se encuentra la instancia. Esto solo se aplica a las nuevas APIs de enrutamiento de servicios. |
Opcional. |
--service-proxy-labels |
Pares clave-valor con el formato key=value .Etiquetas que puede aplicar a su proxy de servicio. Estos se reflejan en los metadatos de arranque del proxy de Envoy. Las etiquetas pueden ser cualquier par key=value que quieras definir como metadatos de proxy (por ejemplo, para usarlo con el filtrado de configuración). Por ejemplo, puedes usar estas marcas para las etiquetas de aplicación y de versión, como app=review o version=canary . También puedes usarlos juntos.
|
Opcional. |
Por ejemplo, el siguiente comando gcloud
crea una plantilla de instancia llamada proxy-it
. Las instancias creadas a partir de esta plantilla tienen instalado el proxy Envoy y el agente de proxy de servicio.
gcloud compute instance-templates create proxy-it \ --service-proxy enabled
En el ejemplo siguiente, la plantilla de instancia se llama proxy-it
, se instalan el proxy Envoy y el agente de proxy de servicio, se definen el puerto de servicio y el puerto proxy, se habilita el seguimiento y se define una etiqueta.
gcloud compute instance-templates create proxy-it \ --service-proxy enabled,serving-ports=8080,proxy-port=15001,tracing=ON \ --service-proxy-labels version=canary
En el siguiente diagrama se muestra el flujo de tráfico cuando se especifica el puerto de servicio como 8080
. Iptables intercepta las conexiones TCP entrantes al puerto 8080
y las redirige al proxy de Envoy, que las transfiere a la aplicación de tu VM que está escuchando en el puerto TCP 8080
. Además, también ocurre lo siguiente:
- Iptables intercepta todas las conexiones salientes a las IPs virtuales de los servicios configurados en Cloud Service Mesh, lo que configura netfilter. Netfilter se asegura de que el tráfico correspondiente que atraviesa la pila de red se intercepte y se redirija al proxy Envoy. A continuación, el tráfico se balancea en función de cómo hayas configurado Cloud Service Mesh.
- Iptables no intercepta el resto de las conexiones entrantes, sino que las transfiere directamente a los servicios de la VM.
- Todas las conexiones a endpoints externos se transfieren directamente a direcciones IP externas sin que se intercepten.
- Todo el tráfico UDP se envía directamente al destino sin que iptables lo intercepte.
Esto se ilustra en el siguiente diagrama.
Los flujos de tráfico del diagrama son los siguientes:
- El tráfico entrante con el puerto de destino
80
no se intercepta y se dirige directamente al servicio que está escuchando en el puerto. - Tráfico entrante con el puerto de destino
8080
, interceptado y redirigido al puerto de escucha de Envoy. - Envoy reenvía el tráfico de (2) al servicio 2, que está escuchando en el puerto
8080
de localhost. - El tráfico saliente destinado a la dirección IP virtual y al puerto de la regla de reenvío de Cloud Service Mesh se intercepta y se redirige al puerto de escucha de Envoy.
- Envoy reenvía el tráfico de (4) al punto final del backend del servicio de backend de Cloud Service Mesh de destino.
- El tráfico saliente destinado a un puerto y una IP virtual que no sean de Cloud Service Mesh no se intercepta y se enruta directamente al servicio externo.
Usar etiquetas
Si quieres especificar etiquetas para usarlas con el filtrado de metadatos de Cloud Service Mesh o habilitar el registro de acceso de los proxies de Envoy, usa los parámetros --service-proxy-labels
o --service-proxy access-log
.
Por ejemplo:
gcloud compute instance-templates create td-vm-template-auto \ --service-proxy enabled,access-log=/var/log/envoy/access.log,network=default \ --service-proxy-labels myapp=review,version=canary
El proxy de Envoy puede interceptar los puertos de comprobación del estado de los servicios de las VMs. Si lo haces, las comprobaciones de estado informarán sobre tu aplicación y sobre los proxies de Envoy. El tráfico no se dirige a la VM si el proxy de Envoy no se está ejecutando correctamente. Por ejemplo:
gcloud compute instance-templates create td-vm-template-auto \ --service-proxy=enabled,serving-ports="80;8080"
Usar el proceso de actualización de grupos de instancias gestionados
Si has usado el proceso automatizado para configurar los proxies de Envoy, puedes usar el proceso de actualización de grupos de instancias gestionados para actualizar tu grupo de instancias gestionado. Sigue este proceso para:
- Añade los componentes del proxy de servicio a un grupo de instancias gestionado y regístralo en una red de Cloud Service Mesh.
- Actualiza los componentes del proxy de servicio en las VMs.
Antes de realizar la actualización gradual, haz lo siguiente.
- Asigna al valor connection draining del servicio de backend un valor de al menos 30 segundos.
- Usa el parámetro
--min-ready
, con un valor de 3 minutos o más, cuando llames al actualizador. El parámetro--min-ready
hace que el grupo de instancias gestionadas espere después de actualizar una VM antes de actualizar la siguiente. De lo contrario, la VM recién creada no tendrá tiempo de iniciar Envoy y el agente de proxy de servicio por completo, y la actualización se realizará demasiado rápido.
Para realizar la actualización continua en el grupo de instancias gestionadas, sigue estos pasos.
- Crea una plantilla de instancia como se ha descrito anteriormente con la información del proxy de servicio. La versión original de la plantilla de instancia se puede usar para la actualización si contiene la información del proxy de servicio y tu objetivo es actualizar a la versión estable más reciente del software proxy.
- Realiza una actualización continua del grupo de instancias gestionadas. Asegúrate de que
establezcas
REPLACE
como la acción mínima que debe realizar Updater. El grupo de instancias instala la versión más reciente del software proxy y la configura tal como se especifica en la plantilla de instancia.
También puede quitar los componentes del proxy de servicio de un grupo de instancias gestionado mediante el proceso de actualización:
Crea una plantilla de instancia sin especificar la marca
--service-proxy
.Realiza una actualización continua mediante el proceso de actualización de grupos de instancias gestionadas.
De esta forma, se elimina el proxy de Envoy de tus VMs. Si ese grupo de instancias gestionado era el único MIG asociado al servicio de backend, puede que quieras quitar la configuración de Cloud Service Mesh que creaste al configurar Cloud Service Mesh.