Consultar el estado del cliente de Cloud Service Mesh

Cuando usas Cloud Service Mesh para gestionar la red de tu aplicación, debes tener en cuenta los dos componentes principales siguientes:

  • La capa de infraestructura. La capa de infraestructura, como los proxies sidecar de Envoy o las bibliotecas gRPC sin proxy, se configura para gestionar la red en nombre de tus aplicaciones.
  • El plano de control, Cloud Service Mesh. El plano de control genera la configuración de la capa de infraestructura y la distribuye a esta.

Cuando se inicializa un proxy de Envoy o la biblioteca gRPC, se usan las APIs xDS para conectarse a Cloud Service Mesh. El proxy o la biblioteca actúan como cliente de Cloud Service Mesh. Una vez que se establece una conexión entre el cliente y Cloud Service Mesh, Cloud Service Mesh envía información de configuración al cliente y actualiza la configuración según sea necesario.

A veces, es útil saber qué clientes están conectados a la malla de servicios de Cloud o inspeccionar la configuración que genera la malla de servicios de Cloud para sus clientes. Por ejemplo, puede que quieras depurar un problema o entender cómo afectan a la configuración que ven tus clientes las acciones que has llevado a cabo al configurar Cloud Service Mesh.

Cloud Service Mesh admite la API Client Status Discovery Service (CSDS). Para consultar esta API, se usa un cliente de CSDS. De esta forma, puedes ver qué clientes están conectados a la malla de servicios de Cloud e inspeccionar la configuración que genera la malla de servicios de Cloud para sus clientes.

El cliente de CSDS es una herramienta de código abierto que puedes obtener del repositorio de Envoy. En el siguiente diagrama se muestra cómo consulta el cliente de CSDS a Cloud Service Mesh para obtener información sobre la API de CSDS de Cloud Service Mesh.

Usar la API CSDS para obtener información de configuración sobre los clientes de Cloud Service Mesh.
Usar la API CSDS para obtener información de configuración sobre los clientes de Cloud Service Mesh (haga 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. 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 de 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 formas:

  1. Puedes compilar el cliente con Cloud Shell.
  2. Puedes compilar el cliente en un equipo de desarrollo local.

Compilar el cliente de CSDS con Cloud Shell

Para usar Cloud Shell y compilar el cliente de CSDS, sigue estos pasos:

  1. Restablece Cloud Shell siguiendo las instrucciones de Inhabilitar o restablecer Cloud Shell. De esta forma, las configuraciones actuales no interferirán en tu compilación.
  2. En la consola de Google Cloud , abre una nueva sesión de Cloud Shell.
  3. Ejecuta el siguiente comando para obtener el código fuente que usas para compilar el cliente de CSDS:

    git clone https://github.com/envoyproxy/envoy-tools.git
    
  4. Ve 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 haya completado la compilación, pruébala con el siguiente comando:

    csds-client -help
    

Si la compilación se realiza correctamente, verás el texto de ayuda del cliente.

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

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

Requisitos previos adicionales

  1. Asegúrate de que el ID de nodo de cada cliente sea único en la malla de servicios. Si varios clientes comparten el mismo ID de nodo, solo se devuelve una configuración: la del cliente que se haya conectado más recientemente a Cloud Service Mesh.

    Si usas los paquetes de referencia de Google, no tienes que definir manualmente el ID de nodo en tus archivos de arranque, ya que se genera automáticamente. Si no usas los paquetes de referencia, debes definir manualmente el ID de 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 Gestión de Identidades y Accesos (IAM) necesarios para configurar Cloud Service Mesh. En las siguientes instrucciones se usa la CLI de Google Cloud para generar y proporcionar automáticamente las credenciales que necesita el cliente de CSDS. También puedes usar el cliente de CSDS y proporcionar las credenciales directamente.

Determinar qué clientes están conectados 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 datos:

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

  • Si usas las APIs de enrutamiento de servicios, una de las siguientes, en función del recurso que obtenga el cliente xDS:

    • Nombre del recurso Mesh
    • El parámetro scope del recurso Gateway
  • Si usas las APIs antiguas, el nombre de la red VPC que especificaste al configurar Cloud Service Mesh. Esta red es la especificada por 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 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"
    

    Sustituye los siguientes valores:

    • PROJECT_NUMBER: el ID del proyecto
    • MESH_OR_SCOPE: si el cliente de xDS obtiene un recurso Mesh, usa el prefijo mesh: seguido del nombre de la malla. Si el cliente de xDS obtiene un recurso Gateway, usa el prefijo scope: seguido del nombre del parámetro de ámbito.
  1. Ejecuta el cliente de CSDS, que usa las credenciales generadas por gcloud CLI. Sustituye PATH_TO_CSDS_REQUEST_YAML_FILE por la ruta al archivo YAML que has creado 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 aparecer lo 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 del archivo de arranque que usan Envoy o gRPC sin proxy cuando se conectan a Cloud Service Mesh.

APIs 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 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"
    

    Sustituye los siguientes valores:

    • PROJECT_NUMBER: el ID único delGoogle Cloud proyecto
    • NETWORK_NAME: la red de VPC especificada por la regla de reenvío del mapa de reglas de enrutamiento
  3. Ejecuta el cliente de CSDS, que usa las credenciales generadas por gcloud CLI. Sustituye PATH_TO_CSDS_REQUEST_YAML_FILE por la ruta al archivo YAML que has creado 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 aparecer lo 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 del archivo de arranque que usan Envoy o gRPC sin proxy cuando se conectan a Cloud Service Mesh.

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

Para inspeccionar la configuración que Cloud Service Mesh envía a un cliente concreto, usa el ID de cliente que has obtenido en la sección anterior.

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

APIs de enrutamiento de servicios

  1. Actualiza el archivo YAML que has creado en Determinar qué clientes están conectados a Cloud Service Mesh. Añade 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"
    

    Sustituye 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 delGoogle Cloud proyecto
    • MESH_OR_SCOPE: si el cliente de xDS obtiene un recurso Mesh, usa el prefijo mesh: seguido del nombre de la malla. Si el cliente de xDS obtiene un recurso Gateway, usa el prefijo scope: seguido del nombre del parámetro de ámbito.
  2. Ejecuta el cliente de CSDS. Al ejecutar 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
    

    Sustituye los siguientes valores:

    • PATH_TO_CSDS_REQUEST_YAML_FILE: la ruta a tu archivo YAML
    • FILENAME.JSON: nombre del archivo que contiene la salida del cliente de CSDS.

    Debería aparecer lo 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 consultar una configuración xDS detallada en el archivo JSON. Esta salida contiene el estado de las configuraciones xDS individuales enviadas por Cloud Service Mesh al cliente mediante un flujo gRPC agregado (ADS).

APIs antiguas

  1. Actualiza el archivo YAML que has creado en Determinar qué clientes están conectados a Cloud Service Mesh. Añade 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"
    

    Sustituye 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 delGoogle Cloud proyecto
    • NETWORK_NAME: la red VPC especificada por la regla de reenvío del mapa de reglas de enrutamiento
  2. Ejecuta el cliente de CSDS. Al ejecutar 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
    

    Sustituye los siguientes valores:

    • PATH_TO_CSDS_REQUEST_YAML_FILE: la ruta a tu archivo YAML
    • FILENAME.JSON: nombre del archivo que contiene la salida del cliente de CSDS.

    Debería aparecer lo 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 consultar una configuración xDS detallada en el archivo JSON. Esta salida contiene el estado de las configuraciones xDS individuales enviadas por Cloud Service Mesh al cliente mediante un flujo gRPC agregado (ADS).

Valores de estado

En la siguiente tabla se indican los valores de estado de la configuración de xDS que pueden aparecer.

Valor Descripción
UNKNOWN (Valor predeterminado) ⁣La información de estado no está disponible o es desconocida.
SYNCED Cloud Service Mesh ha enviado la configuración al cliente y ha recibido un ACK del cliente.
ERROR ⁣Cloud Service Mesh ha enviado la configuración al cliente y ha recibido un NACK del cliente.
STALE Cloud Service Mesh ha enviado la configuración al cliente, pero no ha recibido un ACK ni un NACK del cliente.
NOT_SENT La configuración no se ha enviado.
N/A El cliente de CSDS no ha incluido el ID de nodo. Se devuelven todos los flujos conectados, pero el estado de configuración no está disponible.

Visualización y monitorización

La herramienta de código abierto del cliente de CSDS tiene funciones adicionales que puede usar, como la visualización y la monitorización continua. Para obtener más información sobre estas funciones, consulta el archivo README del 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 Cloud Service Mesh solo en tu proyecto:

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

Es completamente normal. La configuración de Cloud Service Mesh se limita a cada red. Si aún no has creado ninguna red y ejecutas el cliente de CSDS, verás este mensaje de error.

Limitaciones

  • La información del endpoint no se incluye en la respuesta de CSDS porque no está disponible en la API CSDS v3.
  • El ID de nodo de cada cliente debe ser único en la malla de servicios. Si varios clientes comparten el mismo ID de nodo, solo se devuelve una configuración: la del cliente que se haya conectado más recientemente a Cloud Service Mesh.
  • A veces, puede que veas una barra invertida (\) en el campo de ID de nodo del archivo YAML. Si esto ocurre, escapa la barra invertida usando una barra invertida adicional cuando consultes la API CSDS para obtener información de configuración. Se trata de un problema conocido.

Siguientes pasos