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.
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:
- Puedes compilar el cliente con Cloud Shell.
- 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:
- 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.
- En la consola de Google Cloud , abre una nueva sesión de Cloud Shell.
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
Ve al directorio del cliente de CSDS y ejecuta los siguientes comandos:
cd envoy-tools/csds-client/ make init make build
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
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.
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:
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
Desde una cuenta que tenga los permisos correctos, ejecuta el siguiente comando:
gcloud auth application-default login \ --billing-project=BILLING_PROJECT_ID
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 proyectoMESH_OR_SCOPE
: si el cliente de xDS obtiene un recurso Mesh, usa el prefijomesh:
seguido del nombre de la malla. Si el cliente de xDS obtiene un recurso Gateway, usa el prefijoscope:
seguido del nombre del parámetro de ámbito.
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 camponode_id
del archivo de arranque que usan Envoy o gRPC sin proxy cuando se conectan a Cloud Service Mesh.
APIs antiguas
Desde una cuenta que tenga los permisos correctos, ejecuta el siguiente comando:
gcloud auth application-default login \ --billing-project=BILLING_PROJECT_ID
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 proyectoNETWORK_NAME
: la red de VPC especificada por la regla de reenvío del mapa de reglas de enrutamiento
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 camponode_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
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 proyectoMESH_OR_SCOPE
: si el cliente de xDS obtiene un recurso Mesh, usa el prefijomesh:
seguido del nombre de la malla. Si el cliente de xDS obtiene un recurso Gateway, usa el prefijoscope:
seguido del nombre del parámetro de ámbito.
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 YAMLFILENAME.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
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 proyectoNETWORK_NAME
: la red VPC especificada por la regla de reenvío del mapa de reglas de enrutamiento
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 YAMLFILENAME.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
- Para obtener información general sobre cómo solucionar problemas de Cloud Service Mesh, consulta el artículo Solucionar problemas de implementaciones que usan Envoy.
- Para resolver problemas de configuración al desplegar servicios gRPC sin proxy, consulta Solucionar problemas de despliegues que utilizan gRPC sin proxy.