Opciones avanzadas de configuración de Traffic Director

Este documento contiene notas que pueden ser útiles cuando se configura Traffic Director.

Configura una sola VM de Compute Engine para Traffic Director

Usa este procedimiento como ejemplo de cómo se pueden aplicar la implementación del proxy de sidecar y la interceptación de tráfico para proporcionarle a una VM acceso a los servicios de Traffic Director.

Si sigues este proceso a fin de configurar Traffic Director en una sola VM, algunas tareas de configuración requieren que tengas acceso a un host de Linux. El host puede ser una máquina local o una VM que se ejecute en tu red de nube privada virtual.

Primero, descarga y prepara los archivos de configuración y las secuencias de comandos de muestra.

  1. Accede al host de Linux que usarás durante el proceso de configuración.

  2. Descarga el archivo de los archivos requeridos en el host de Linux y descomprime el archivo:

    wget https://storage.googleapis.com/traffic-director/traffic-director.tar.gz
    tar -xzvf traffic-director.tar.gz; cd traffic-director
    

    El archivo contiene los siguientes archivos:

    • sidecar.env: Archivo de configuración con variables de entorno
    • pull_envoy.sh: Secuencia de comandos de muestra para extraer el objeto binario de Envoy de una etiqueta de imagen de Docker proporcionada. Si no se proporciona ninguna etiqueta, la secuencia de comandos extrae el objeto binario de https://hub.docker.com/r/istio/proxyv2/tags
    • iptables.sh: Secuencia de comandos para configurar reglas de netfilter
    • bootstrap_template.yaml: Archivo de plantilla de arranque para Envoy
    • run.sh: Secuencia de comandos de nivel superior que usa el archivo de configuración sidecar.env a fin de configurar iptables para la interceptación y con el fin de ejecutar el proxy de sidecar de Envoy
  3. En cada host que ejecute un proxy de sidecar, crea un usuario del sistema para ejecutar el proceso del proxy de Envoy. Este es el usuario del proxy de Envoy. El acceso está inhabilitado para el usuario del proxy de Envoy.

    sudo adduser --system --disabled-login envoy
    
  4. Edita el archivo sidecar.env para modificar la configuración. Lee los comentarios intercalados en el archivo de configuración para obtener una descripción detallada de cada variable.

    1. En el archivo sidecar.env, configura la variable ENVOY_USER con el nombre de usuario que quieres que sea el usuario del proxy de Envoy.
  5. Copia tu propio objeto binario de Envoy en el directorio traffic-director o sigue estos pasos para obtener un objeto binario de Envoy:

    1. Instala herramientas de Docker en el host de Linux que usas. Los archivos para cada sistema operativo compatible se encuentran en la sección Plataformas compatibles.
    2. Ejecuta la secuencia de comandos pull_envoy.sh para extraer el objeto binario de Envoy.

A continuación, para cada host de VM que ejecute aplicaciones con Traffic Director, sigue los siguientes pasos:

  1. Copia todo el directorio traffic-director con el archivo sidecar.env y el objeto binario de Envoy modificados en cada host de VM que ejecute aplicaciones que esperas que usen Traffic Director.
  2. Agrega la secuencia de comandos run.sh a la secuencia de comandos de inicio del sistema, lo que garantizará que la secuencia de comandos se ejecute después de cada reinicio de VM.
  3. En cada host de VM, ejecuta la secuencia de comandos run.sh:

    cd traffic-director
    sudo ./run.sh start
    
  4. Verifica que el proxy de Envoy se haya iniciado de forma correcta.

    sudo ./run.sh status
    

    Deberías ver el siguiente resultado:

    OK: Envoy seems to be running.
    OK: Traffic interception seems to be enabled.
    

    Como alternativa, puedes confirmar que el proceso del proxy esté en ejecución con el comando ps. Asegúrate de que envoy aparezca en el resultado.

    ps aux | grep envoy
    

    Puedes verificar la dirección de interceptación del tráfico con este comando:

    sudo iptables -S -t nat | grep ISTIO_REDIRECT
    

    El resultado esperado es el siguiente:

    -N ISTIO_REDIRECT
    -A ISTIO_OUTPUT -j ISTIO_REDIRECT
    -A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001`
    

Mapas de reglas de enrutamiento

Existen dos formas de configurar el enrutamiento en un mapa de reglas de enrutamiento.

Puedes habilitar el enrutamiento según la VIP y el puerto de destino del servicio. Si configuras una VIP del servicio como el parámetro IPAddress de la regla de reenvío, solo se hace coincidir el tráfico dirigido a esta dirección y al puerto asociado, y el tráfico se enruta según los parámetros de host y de ruta de acceso especificados en el mapa de URL.

Como alternativa, puedes establecer la dirección de regla de reenvío en 0.0.0.0. De este modo, se configurarán los proxies para que coincidan solo con el tráfico en función del puerto de destino, sin importar la dirección IP de destino de la solicitud. Luego, el tráfico se enruta en función de los parámetros de host y de ruta de acceso especificados en el mapa de URL.

Según estos dos enfoques, los nombres de host (como se configuran en las reglas de host) que están asociados con un par de puerto y VIP de destino o con un puerto de destino (cuando la VIP es 0.0.0.0), deben ser únicos en tu configuración de la malla de servicios. Es decir, no puedes tener dos servicios diferentes con conjuntos de backends distintos que tengan el mismo nombre de host.

Sin importar el método seleccionado, el tráfico a la VIP a la resuelve el nombre de host o el FQDN de tu servicio y el puerto en el que escucha tu servicio deben interceptarse y redireccionarse al proxy de sidecar. Consulta Configura una sola VM de Compute Engine para Traffic Director a fin de obtener todos los detalles de la configuración del host.

Cada regla de reenvío en una red de VPC debe tener una combinación única de dirección IP y puerto por red de VPC, incluida la dirección 0.0.0.0. Si creas más de una regla de reenvío con la misma combinación de dirección IP y puerto en una red de VPC en particular, solo la primera regla de reenvío es válida. Las demás reglas se ignoran.

Para evitar perder tráfico, sigue la sección Configuración avanzada de la interceptación de tráfico.

Configuración avanzada de la interceptación de tráfico

Si tus VM ejecutan aplicaciones que necesitan acceso a los servicios configurados por Traffic Director, debes instalar un proxy de sidecar y configurar la interceptación de tráfico en las VM para permitir que el proxy de sidecar administre el enrutamiento de tráfico a los backends de esos servicios.

Si la interceptación de todo el tráfico de VM saliente no es aceptable para tu implementación, puedes redireccionar tráfico específico al proxy de sidecar, mientras que el resto del tráfico seguirá la ruta normal definida por la configuración de red del host.

Para lograrlo, modifica la configuración del host de VM de Compute Engine en el procedimiento Configuración de Traffic Director con VM e implementación manual de Envoy de la siguiente manera:

  1. Decide el rango de direcciones IP a las que deben resolverse los servicios controlados por Traffic Director. El tráfico dirigido a estas direcciones IP se intercepta y se redirecciona al proxy de sidecar. El rango es específico de tu implementación.

  2. En el archivo sidecar.env, establece el valor de SERVICE_CIDR en este rango. El tráfico a estas direcciones IP se redirecciona mediante netfilter a un proxy de sidecar y se balancean sus cargas según la configuración que proporciona Traffic Director.

  3. No se requiere de forma estricta que el proxy de sidecar se ejecute como un usuario dedicado que se excluye de la interceptación de tráfico. Sin embargo, se recomienda este método.

  4. Después de ejecutar la secuencia de comandos run.sh, como se indica en el procedimiento principal, iptables configura la interceptación y el redireccionamiento solo de este rango específico.

  5. Ejecuta el siguiente comando para verificar que netfilter esté configurado de forma correcta. Para ${SERVICE_CIDR}, sustituye el valor que configuraste como el rango de direcciones IP interceptado.

    sudo iptables -L -t nat | grep -E "(ISTIO_REDIRECT).+${SERVICE_CIDR})"