Información sobre el estado del cliente de Traffic Director

Cuando uses Traffic Director para controlar las herramientas de redes de tu aplicación, considera los siguientes dos componentes principales:

  • La capa de la infraestructura. La capa de infraestructura, como proxies de sidecar de Envoy o bibliotecas de gRPC sin proxy, está configurada para manejar las redes en nombre de tus aplicaciones.
  • El plano de control, Traffic Director. El plano de control genera una configuración para la capa de infraestructura y la distribuye a ella.

Cuando se inicializa un proxy de Envoy o la biblioteca de gRPC, se usan las API de xDS para conectarse a Traffic Director. El proxy o la biblioteca actúan como cliente para Traffic Director. Después de establecer una conexión entre el cliente y Traffic Director, Traffic Director envía la información de configuración al cliente y la actualiza según sea necesario.

A veces es útil comprender qué clientes están conectados a Traffic Director o inspeccionar la configuración que genera Traffic Director para sus clientes. Por ejemplo, es posible que desees depurar un problema o comprender cómo las acciones que realizaste cuando configuraste Traffic Director afectan la configuración que ven tus clientes.

Traffic Director es compatible con la API del Servicio de descubrimiento de estado de cliente (CSDS). Debes usar un cliente CSDS para consultar esta API. Esto te permite ver qué clientes están conectados a Traffic Director e inspeccionar la configuración que Traffic Director genera para sus clientes.

El cliente de CSDS es una herramienta de código abierto que puedes obtener en el repositorio de Envoy. En el siguiente diagrama, se ilustra cómo el cliente de CSDS consulta Traffic Director para obtener información sobre la API de CSDS de Traffic Director.

Uso de la API de CSDS para obtener información de configuración sobre los clientes de Traffic Director.
Uso de la API de CSDS para obtener información de configuración sobre los clientes de Traffic Director (haz clic para ampliar)

El cliente de CSDS se conecta a Traffic Director y presenta un número de proyecto y un nombre de red, junto con un conjunto de credenciales. Luego, Traffic Director puede responder con información sobre los distintos clientes de Traffic Director a los que está conectado.

Para obtener más información sobre el cliente CSDS, consulta el archivo README.

Requisitos previos

Para conectarte a la API de CSDS, necesitas un cliente de CSDS. Puedes obtener el cliente de dos maneras:

  1. Puedes compilar el cliente mediante Cloud Shell.
  2. Puedes compilar el cliente en una máquina de desarrollo local.

Compila el cliente CSDS con Cloud Shell

Para usar Cloud Shell a fin de compilar el cliente de CSDS, haz lo siguiente:

  1. Restablece Cloud Shell mediante las instrucciones que aparecen en Inhabilita o restablece Cloud Shell. Esto garantiza que la configuración existente no interfiera en tu compilación.
  2. En la consola de Google Cloud, abre una sesión de Cloud Shell nueva.
  3. Ejecuta el siguiente comando a fin de obtener el código fuente que usas para compilar el cliente de CSDS:

    git clone https://github.com/envoyproxy/envoy-tools.git
    
  4. Navega al directorio del cliente de CSDS y ejecuta los siguientes comandos:

    cd envoy-tools/csds-client/
    make init
    make build
    
  5. Una vez que se complete la compilación, pruébala con el siguiente comando:

    csds-client -help
    

Si la compilación tiene éxito, verás el texto de ayuda para el cliente.

Compila el cliente de CSDS en una máquina de desarrollo local

Puedes descargar y compilar un cliente de CSDS en una máquina local; para ello, sigue las instrucciones del archivo README en el repositorio de código fuente. Para hacerlo, también debes tener Go y la herramienta de make configurados en tu entorno. Si prefieres no hacer esto, usa las instrucciones anteriores para Cloud Shell, en las que se te proporcionan Go y la herramienta de make.

Requisitos previos adicionales

  1. Asegúrate de que el ID de nodo de cada cliente sea único dentro de la malla de servicios. Si varios clientes comparten el mismo ID de nodo, solo se muestra una configuración: la configuración del cliente que se conectó más recientemente a Traffic Director.

    Si usas los paquetes de referencia de Google, no necesitas configurar manualmente el ID del nodo en tus archivos de arranque; se genera un ID de nodo para ti. Si no usas los paquetes de referencia, debes configurar manualmente el ID del nodo en cada uno de tus archivos de arranque.

  2. Asegúrate de tener acceso a una cuenta de usuario que tenga los permisos de Identity and Access Management (IAM) necesarios para configurar Traffic Director. En las siguientes instrucciones, se usa Google Cloud CLI para generar y proporcionar de forma automática las credenciales que necesita el cliente de CSDS. Como alternativa, puedes usar el cliente de CSDS y proporcionar las credenciales directamente.

Determina qué clientes están conectados actualmente a Traffic Director

Puedes usar el cliente de CSDS para determinar qué clientes están conectados a tu configuración de Traffic Director.

Para obtener esta información, necesitas los siguientes detalles:

  • El ID del proyecto a partir del cual se generaron las credenciales.

  • Si usas las APIs de enrutamiento de servicios, realiza una de las siguientes acciones, según el recurso que recupere el cliente xDS:

    • Es el nombre del recurso Mesh.
    • El parámetro scope en el recurso Gateway
  • Si usas las APIs más antiguas, el nombre de la red de VPC que especificaste cuando configuraste Traffic Director. Esta red es la que especifica la regla de reenvío del mapa de reglas de enrutamiento.

APIs de enrutamiento de servicios

  1. Desde una cuenta que tenga los permisos correctos, ejecuta el siguiente comando:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. Crea un archivo nuevo en formato YAML con el siguiente contenido.

    node_matchers:
      - node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_MESH_SCOPE_NAME
            value:
              string_match:
                exact: "MESH_OR_SCOPE"
    

    Reemplaza los siguientes valores:

    • PROJECT_NUMBER: El ID del proyecto
    • MESH_OR_SCOPE: Si el cliente xDS recupera un recurso de Mesh, usa un prefijo de mesh: seguido del nombre real de la malla. Si el cliente xDS recupera un recurso de Gateway, usa un prefijo de scope: seguido del nombre del parámetro de alcance.
  1. Ejecuta el cliente de CSDS, que usa las credenciales que genera la CLI de gcloud. Reemplaza PATH_TO_CSDS_REQUEST_YAML_FILE por la ruta de acceso al archivo YAML que creaste en el paso anterior.

    csds-client \
      -service_uri trafficdirector.googleapis.com:443 \
      -platform gcp \
      -authn_mode auto \
      -api_version v3 \
      -request_file PATH_TO_CSDS_REQUEST_YAML_FILE
    

    Debería ver un resultado similar al siguiente:

    Client ID                                          xDS stream type    Config status
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    ADS                N/A
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    LRS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    LRS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    ADS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    LRS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    ADS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    LRS                N/A
    

    En la columna Client ID, se muestran los ID de cliente de los clientes que están conectados a Traffic Director. Estos ID de cliente se proporcionan mediante el campo node_id en el archivo de arranque que usa Envoy o gRPC sin proxy cuando se conectan a Traffic Director.

APIs anteriores

  1. Desde una cuenta que tenga los permisos correctos, ejecuta el siguiente comando:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. Crea un archivo nuevo en formato YAML con el siguiente contenido.

    node_matchers:
      - node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_NETWORK_NAME
            value:
              string_match:
                exact: "NETWORK_NAME"
    

    Reemplaza los siguientes valores:

    • PROJECT_NUMBER: Es el ID único del proyecto de Google Cloud.
    • NETWORK_NAME: Es la red de VPC que especifica la regla de reenvío del mapa de reglas de enrutamiento.
  3. Ejecuta el cliente de CSDS, que usa las credenciales que genera la CLI de gcloud. Reemplaza PATH_TO_CSDS_REQUEST_YAML_FILE por la ruta de acceso al archivo YAML que creaste en el paso anterior.

    csds-client \
      -service_uri trafficdirector.googleapis.com:443 \
      -platform gcp \
      -authn_mode auto \
      -api_version v3 \
      -request_file PATH_TO_CSDS_REQUEST_YAML_FILE
    

    Debería ver un resultado similar al siguiente:

    Client ID                                          xDS stream type    Config status
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    ADS                N/A
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    LRS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    LRS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    ADS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    LRS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    ADS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    LRS                N/A
    

    En la columna Client ID, se muestran los ID de cliente de los clientes que están conectados a Traffic Director. Estos ID de cliente se proporcionan mediante el campo node_id en el archivo de arranque que usa Envoy o gRPC sin proxy cuando se conectan a Traffic Director.

Inspecciona la configuración de un cliente específico de Traffic Director

Puedes inspeccionar la configuración que envía Traffic Director a un cliente en particular mediante el ID de cliente, que obtuviste en la sección anterior.

Puedes examinar la configuración detallada del protocolo de recursos para determinar qué versión de la API de xDS está usando ese cliente específico. Por ejemplo, si ves envoy.api.v2.Cluster en la configuración, significa que el cliente usa la API v2. Si ves envoy.api.v3.Cluster en la configuración, significa que el cliente usa la API v3.

APIs de enrutamiento de servicios

  1. Actualiza el archivo YAML que creaste en Determina qué clientes están conectados actualmente a Traffic Director. Agrega un campo node-id que use el ID de cliente como su valor.

    node_matchers:
      - node_id:
          exact: "CLIENT_ID"
        node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_MESH_SCOPE_NAME
            value:
              string_match:
                exact: "MESH_OR_SCOPE_NAME"
    

    Reemplaza los siguientes valores:

    • CLIENT_ID: El ID del cliente cuya configuración estás inspeccionando, por ejemplo, projects/000000/networks/mesh:mesh1/nodes/00000000-0000-0000-0000-00000000~127.0.0.1
    • PROJECT_NUMBER: Es el ID único del proyecto de Google Cloud.
    • MESH_OR_SCOPE: Si el cliente xDS recupera un recurso de Mesh, usa un prefijo de mesh: seguido del nombre real de la malla. Si el cliente xDS recupera un recurso de Gateway, usa un prefijo de scope: seguido del nombre del parámetro de alcance.
  2. Ejecuta el cliente CSDS. Cuando se ejecuta el cliente, se genera un archivo JSON. Este archivo contiene la configuración que se envía al cliente de Traffic Director.

    csds-client \
     -service_uri trafficdirector.googleapis.com:443 \
     -platform gcp \
     -authn_mode auto \
     -api_version v3 \
     -request_file PATH_TO_CSDS_REQUEST_YAML_FILE \
     -output_file FILENAME.JSON
    

    Reemplaza los siguientes valores:

    • PATH_TO_CSDS_REQUEST_YAML_FILE: Es la ruta de acceso a tu archivo YAML.
    • FILENAME.JSON: Es un nombre para el archivo que contiene el resultado del cliente CSDS.

    Deberías ver un resultado similar al siguiente:

    Client ID                                          xDS stream type    Config status
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                LDS  SYNCED
                                                                          RDS  SYNCED
                                                                          CDS  STALE
    Config has been saved to FILENAME.JSON
    

    Puedes inspeccionar una configuración xDS detallada si consultas el archivo JSON. Este resultado contiene el estado de las configuraciones individuales de xDS que Traffic Director envía al cliente mediante una transmisión de gRPC agregada (ADS).

APIs anteriores

  1. Actualiza el archivo YAML que creaste en Determina qué clientes están conectados actualmente a Traffic Director. Agrega un campo node-id que use el ID de cliente como su valor.

    node_matchers:
      - node_id:
          exact: "CLIENT_ID"
        node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_NETWORK_NAME
            value:
              string_match:
                exact: "NETWORK_NAME"
    

    Reemplaza los siguientes valores:

    • CLIENT_ID: El ID del cliente cuya configuración estás inspeccionando, por ejemplo, f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6
    • PROJECT_NUMBER: Es el ID único del proyecto de Google Cloud.
    • NETWORK_NAME: Es la red de VPC especificada por la regla de reenvío del mapa de reglas de enrutamiento.
  2. Ejecuta el cliente CSDS. Cuando se ejecuta el cliente, se genera un archivo JSON. Este archivo contiene la configuración que se envía al cliente de Traffic Director.

    csds-client \
     -service_uri trafficdirector.googleapis.com:443 \
     -platform gcp \
     -authn_mode auto \
     -api_version v3 \
     -request_file PATH_TO_CSDS_REQUEST_YAML_FILE \
     -output_file FILENAME.JSON
    

    Reemplaza los siguientes valores:

    • PATH_TO_CSDS_REQUEST_YAML_FILE: Es la ruta de acceso a tu archivo YAML.
    • FILENAME.JSON: Es un nombre para el archivo que contiene el resultado del cliente CSDS.

    Deberías ver un resultado similar al siguiente:

    Client ID                                          xDS stream type    Config status
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                LDS  SYNCED
                                                                          RDS  SYNCED
                                                                          CDS  STALE
    Config has been saved to FILENAME.JSON
    

    Puedes inspeccionar una configuración xDS detallada si consultas el archivo JSON. Este resultado contiene el estado de las configuraciones individuales de xDS que Traffic Director envía al cliente mediante una transmisión de gRPC agregada (ADS).

Valores de estados

En la siguiente tabla, se enumeran los valores de estado de configuración xDS que puedes ver.

Valor Descripción
UNKNOWN (Predeterminado) ⁣La información del estado no está disponible o se desconoce.
SYNCED Traffic Director envió la configuración al cliente y recibió un ACK del cliente.
ERROR ⁣Traffic Director envió la configuración al cliente y recibió un NACK del cliente.
STALE Traffic Director envió la configuración al cliente, pero no recibió un ACK ni un NACK del cliente.
NOT_SENT No se envió la configuración.
N/A El cliente de CSDS no incluía el ID del nodo. Se muestran todas las transmisiones conectadas, pero el estado de la configuración no está disponible.

Visualización y supervisión

La herramienta de código abierto del cliente de CSDS tiene características adicionales que recomendamos usar, como la visualización y la supervisión continua. Para obtener más información sobre estas funciones, consulta el archivo README en el repositorio de código abierto.

Mensaje de error

Es posible que veas el siguiente mensaje de error del cliente de CSDS cuando habilites la API de Traffic Director solo en tu proyecto:

rpc error: code = NotFound desc = Requested entity was not found.

Se prevé que esto suceda. La configuración de Traffic Director tiene permisos por red. Si aún no creaste una red y ejecutas el cliente de CSDS, verás este mensaje de error.

Limitaciones

  • La información del extremo no se incluye en la respuesta de CSDS porque no está disponible en la API de CSDS v3.
  • El ID de nodo de cada cliente debe ser único dentro de la malla de servicios. Si varios clientes comparten el mismo ID de nodo, solo se muestra una configuración: la configuración del cliente que se conectó más recientemente a Traffic Director.
  • Es posible que, a veces, veas una barra inversa (\) en el campo de ID de nodo del archivo yaml. Si esto sucede, escapa la barra inversa con una barra invertida adicional cuando consultas la API de CSDS para obtener información sobre la configuración. Este es un problema conocido.

¿Qué sigue?