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.
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:
- Puedes compilar el cliente mediante Cloud Shell.
- 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:
- 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.
- En la consola de Google Cloud, abre una sesión de Cloud Shell nueva.
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
Navega al directorio del cliente de CSDS y ejecuta los siguientes comandos:
cd envoy-tools/csds-client/ make init make build
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
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.
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:
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
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 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 proyectoMESH_OR_SCOPE
: Si el cliente de xDS recupera un recurso de malla, usa un prefijo demesh:
seguido del nombre real de la malla. Si el cliente de xDS recupera un recurso de puerta de enlace, usa un prefijo descope:
seguido del nombre del parámetro de alcance.
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 camponode_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
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 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 CloudNETWORK_NAME
: Es la red de VPC que especifica la regla de reenvío del mapa de reglas de enrutamiento.
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 camponode_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
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 CloudMESH_OR_SCOPE
: Si el cliente de xDS recupera un recurso de malla, usa un prefijo demesh:
seguido del nombre real de la malla. Si el cliente de xDS recupera un recurso de puerta de enlace, usa un prefijo descope:
seguido del nombre del parámetro de alcance.
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
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 CloudNETWORK_NAME
: Es la red de VPC que especifica la regla de reenvío del mapa de reglas de enrutamiento.
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?
- Para obtener información general sobre la solución de problemas de Cloud Service Mesh, consulta Soluciona problemas de implementaciones que usan Envoy.
- Para resolver problemas de configuración cuando implementas servicios de gRPC sin proxy, consulta Soluciona problemas de implementaciones que usan gRPC sin proxy.