Información sobre el estado del cliente de Cloud Service Mesh

Cuando uses Cloud Service Mesh 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, Cloud Service Mesh. 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 APIs de xDS para conectarse a Cloud Service Mesh. El proxy o la biblioteca actúan como cliente para la malla de servicios de Cloud. Después de establecer una conexión entre el cliente y Cloud Service Mesh, Cloud Service Mesh 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 Cloud Service Mesh o inspeccionar la configuración que genera Cloud Service Mesh para sus clientes. Por ejemplo, es posible que desees depurar un problema o comprender cómo las acciones que realizaste cuando configuraste Cloud Service Mesh afectan la configuración que ven tus clientes.

Cloud Service Mesh es compatible con la API de Client Status Discovery Service (CSDS). Debes usar un cliente CSDS para consultar esta API. Esto te permite ver qué clientes están conectados a Cloud Service Mesh y, además, inspeccionar la configuración que Cloud Service Mesh 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 Cloud Service Mesh para obtener información sobre la API de CSDS de Cloud Service Mesh.

Uso de la API de CSDS para obtener información de configuración sobre los clientes de Cloud Service Mesh.
Usa la API de CSDS para obtener información sobre la configuración de los clientes de la malla de servicios de Cloud (haz clic para ampliar)

El cliente de CSDS se conecta a Cloud Service Mesh y presenta un número de proyecto y un nombre de red, junto con un conjunto de credenciales. Luego, Cloud Service Mesh puede responder con información sobre los distintos clientes de Cloud Service Mesh 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 abierto. 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 Cloud Service Mesh.

    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 Cloud Service Mesh. 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 Cloud Service Mesh

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

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

  • El ID del proyecto desde el que se generaron las credenciales.

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

    • Es el nombre del recurso Mesh.
    • El parámetro scope en el recurso de puerta de enlace
  • Si usas las APIs anteriores, el nombre de la red de VPC que especificaste cuando configuraste Cloud Service Mesh. 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 el 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 de xDS recupera un recurso de malla, usa un prefijo de mesh: seguido del nombre real de la malla. Si el cliente de xDS recupera un recurso de puerta de enlace, 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 IDs de cliente de los clientes que están conectados a Cloud Service Mesh. Estos IDs 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 la malla de servicios de Cloud.

APIs más antiguas

  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 el 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: 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 IDs de cliente de los clientes que están conectados a Cloud Service Mesh. Estos IDs 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 la malla de servicios de Cloud.

Inspecciona la configuración de un cliente específico de Cloud Service Mesh

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

Puedes examinar la configuración detallada del proto de recursos para determinar qué versión de la API de xDS usa un cliente específico. Por ejemplo, si ves envoy.api.v2.Cluster en la configuración, significa que el cliente usa la API de v2. Si ves envoy.api.v3.Cluster en la configuración, significa que el cliente está usando la API de v3. Solo se admite xDS v3. Para obtener información sobre cómo migrar de v2 a v3, consulta Cómo migrar de xDS v2 a xDS v3.

APIs de enrutamiento de servicios

  1. Actualiza el archivo YAML que creaste en Determina qué clientes están conectados actualmente a Cloud Service Mesh. Agrega un campo node-id que use el ID de cliente como 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: El ID único del proyecto de Google Cloud
    • MESH_OR_SCOPE: Si el cliente de xDS recupera un recurso de malla, usa un prefijo de mesh: seguido del nombre real de la malla. Si el cliente de xDS recupera un recurso de puerta de enlace, 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 Cloud Service Mesh.

    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 al archivo YAML.
    • FILENAME.JSON: Es un nombre para el archivo que contiene el resultado del cliente de CSDS.

    Debería 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 de xDS individuales que Cloud Service Mesh envía al cliente mediante una transmisión de gRPC agregada (ADS).

APIs más antiguas

  1. Actualiza el archivo YAML que creaste en Determina qué clientes están conectados actualmente a Cloud Service Mesh. Agrega un campo node-id que use el ID de cliente como 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: 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.
  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 Cloud Service Mesh.

    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 al archivo YAML.
    • FILENAME.JSON: Es un nombre para el archivo que contiene el resultado del cliente de CSDS.

    Debería 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 de xDS individuales que Cloud Service Mesh 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 Cloud Service Mesh envió la configuración al cliente y recibió un ACK del cliente.
ERROR ⁣Cloud Service Mesh envió la configuración al cliente y recibió un NACK del cliente.
STALE Cloud Service Mesh 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 Cloud Service Mesh solo en tu proyecto:

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

Se prevé que esto suceda. La configuración de Cloud Service Mesh 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 esta información 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 Cloud Service Mesh.
  • 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?