Informazioni sullo stato del client Cloud Service Mesh

Quando utilizzi Cloud Service Mesh per gestire la rete delle applicazioni, considera i seguenti due componenti principali:

  • Il livello di infrastruttura. Il livello di infrastruttura, ad esempio i proxy sidecar di Envoy o le librerie gRPC proxyless, è configurato per gestire la rete per conto delle applicazioni.
  • Il piano di controllo, Cloud Service Mesh. Il piano di controllo genera la configurazione per il livello di infrastruttura e la distribuisce.

Quando un proxy Envoy o la libreria gRPC viene inizializzato, utilizza le API xDS per connettersi a Cloud Service Mesh. Il proxy o la libreria agisce come client di Cloud Service Mesh. Dopo che è stata stabilita una connessione tra il client e Cloud Service Mesh, Cloud Service Mesh restituisce le informazioni di configurazione al client e aggiorna la configurazione in base alle esigenze.

A volte è utile capire quali client sono connessi a Cloud Service Mesh o ispezionare la configurazione generata da Cloud Service Mesh per i suoi client. Ad esempio, potresti voler eseguire il debug di un problema o capire in che modo le azioni che hai intrapreso durante la configurazione di Cloud Service Mesh influiscono sulla configurazione visualizzata dai tuoi clienti.

Cloud Service Mesh supporta l'API Client Status Discovery Service (CSDS). Utilizzi un client CSDS per eseguire query su questa API. In questo modo, puoi vedere quali client sono connessi a Cloud Service Mesh e ispezionare la configurazione generata da Cloud Service Mesh per i suoi client.

Il client CSDS è uno strumento open source che puoi ottenere dal repository Envoy. Il seguente diagramma illustra come il client CSDS esegue query su Cloud Service Mesh per informazioni sull'API CSDS di Cloud Service Mesh.

Utilizzo dell'API CSDS per ottenere informazioni di configurazione sui client Cloud Service Mesh.
Utilizzo dell'API CSDS per ottenere informazioni di configurazione sui client Cloud Service Mesh (fai clic per ingrandire)

Il client CSDS si connette a Cloud Service Mesh e presenta un numero di progetto e un nome di rete, insieme a un insieme di credenziali. Cloud Service Mesh può quindi rispondere con informazioni sui vari client Cloud Service Mesh a cui è connesso.

Per saperne di più sul client CSDS, consulta il file README.

Prerequisiti

Per connetterti all'API CSDS, devi disporre di un client CSDS. Puoi ottenere il client in due modi:

  1. Puoi compilare il client utilizzando Cloud Shell.
  2. Puoi compilare il client su una macchina di sviluppo locale.

Crea il client CSDS utilizzando Cloud Shell

Per utilizzare Cloud Shell per compilare il client CSDS, segui questi passaggi:

  1. Reimposta Cloud Shell seguendo le istruzioni riportate in Disattivazione o reimpostazione di Cloud Shell. In questo modo, le configurazioni esistenti non interferiranno con la compilazione.
  2. Nella console Google Cloud, apri una nuova sessione Cloud Shell.
  3. Esegui il seguente comando per ottenere il codice sorgente utilizzato per compilare il client CSDS:

    git clone https://github.com/envoyproxy/envoy-tools.git
    
  4. Vai alla directory del client CSDS ed esegui i seguenti comandi:

    cd envoy-tools/csds-client/
    make init
    make build
    
  5. Al termine della compilazione, testa il servizio con il seguente comando:

    csds-client -help
    

Se la compilazione è riuscita, viene visualizzato il testo di aiuto per il client.

Crea il client CSDS su una macchina di sviluppo locale

Puoi scaricare e compilare un client CSDS su una macchina locale seguendo le istruzioni riportate nel file README nel repository open source. Per farlo, devi anche avere configurato Go e lo strumento make nel tuo ambiente. Se preferisci non farlo, utilizza le istruzioni precedenti per Cloud Shell, in cui sono forniti Go e lo strumento make.

Prerequisiti aggiuntivi

  1. Assicurati che l'ID nodo di ogni cliente sia univoco all'interno del mesh di servizi. Se più client condividono lo stesso ID nodo, viene restituita una sola configurazione, ovvero quella del client che si è connesso più di recente a Cloud Service Mesh.

    Se utilizzi i pacchetti di riferimento di Google, non è necessario impostare manualmente l'ID nodo nei file di bootstrap; un ID nodo viene generato automaticamente. Se non utilizzi i pacchetti di riferimento, devi impostare manualmente l'ID nodo in ciascuno dei file di bootstrap.

  2. Assicurati di disporre dell'accesso a un account utente con le autorizzazioni IAM (Identity and Access Management) necessarie per configurare Cloud Service Mesh. Le istruzioni riportate di seguito utilizzano Google Cloud CLI per generare e fornire automaticamente le credenziali necessarie al client CSDS. In alternativa, puoi utilizzare il client CSDS e fornire le credenziali direttamente.

Determina quali client sono attualmente connessi a Cloud Service Mesh

Puoi utilizzare il client CSDS per determinare quali client sono collegati alla configurazione di Cloud Service Mesh.

Per ottenere queste informazioni, devi disporre dei seguenti dettagli:

  • L'ID del progetto da cui sono state generate le credenziali.

  • Se utilizzi le API di routing dei servizi, una delle seguenti, a seconda della risorsa recuperata dal client xDS:

    • Il nome della risorsa Mesh
    • Il parametro scope nella risorsa Gateway
  • Se utilizzi le API precedenti, il nome della rete VPC specificata durante la configurazione di Cloud Service Mesh. Questa rete è quella specificata dalla regola di inoltro della mappa di regole di routing.

API di routing dei servizi

  1. Da un account con le autorizzazioni corrette, esegui il seguente comando:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. Crea un nuovo file in formato YAML con i seguenti contenuti.

    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"
    

    Sostituisci i seguenti valori:

    • PROJECT_NUMBER: l'ID del progetto
    • MESH_OR_SCOPE: se il client xDS recupera una risorsa Mesh, utilizza un prefisso mesh: seguito dal nome effettivo del mesh. Se il client xDS recupera una risorsa Gateway, utilizza un prefisso scope: seguito dal nome del parametro di ambito
  1. Esegui il client CSDS, che utilizza le credenziali generate dallgcloud CLI. Sostituisci PATH_TO_CSDS_REQUEST_YAML_FILE con il percorso del file YAML che hai creato nel passaggio precedente.

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

    Dovresti vedere un output simile al seguente:

    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
    

    La colonna Client ID mostra gli ID client dei client connessi a Cloud Service Mesh. Questi ID client vengono forniti utilizzando il campo node_id nel file di bootstrap utilizzato da Envoy o gRPC senza proxy quando si connettono a Cloud Service Mesh.

API precedenti

  1. Da un account con le autorizzazioni corrette, esegui il seguente comando:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. Crea un nuovo file in formato YAML con i seguenti contenuti.

    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"
    

    Sostituisci i seguenti valori:

    • PROJECT_NUMBER: l'ID univoco del progetto Google Cloud
    • NETWORK_NAME: la rete VPC specificata dalla regola di inoltro della mappa di regole di routing
  3. Esegui il client CSDS, che utilizza le credenziali generate dallgcloud CLI. Sostituisci PATH_TO_CSDS_REQUEST_YAML_FILE con il percorso del file YAML che hai creato nel passaggio precedente.

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

    Dovresti vedere un output simile al seguente:

    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
    

    La colonna Client ID mostra gli ID client dei client connessi a Cloud Service Mesh. Questi ID client vengono forniti utilizzando il campo node_id nel file di bootstrap utilizzato da Envoy o gRPC senza proxy quando si connettono a Cloud Service Mesh.

Controllare la configurazione di un client Cloud Service Mesh specifico

Puoi ispezionare la configurazione inviata da Cloud Service Mesh a un determinato cliente utilizzando l'ID client ottenuto nella sezione precedente.

Puoi esaminare la configurazione dettagliata del proto della risorsa per determinare la versione dell'API xDS utilizzata da quel cliente specifico. Ad esempio, se nella configurazione visualizzi envoy.api.v2.Cluster, significa che il client utilizza l'API v2. Se nella configurazione viene visualizzato envoy.api.v3.Cluster, significa che il client utilizza l'API v3. È supportata solo la versione 3 di xDS. Per informazioni su come eseguire la migrazione dalla versione 2 alla versione 3, consulta Eseguire la migrazione da xDS v2 a xDS v3.

API di routing dei servizi

  1. Aggiorna il file YAML creato in Determinare quali client sono attualmente connessi a Cloud Service Mesh. Aggiungi un campo node-id che utilizzi l'ID client come valore.

    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"
    

    Sostituisci i seguenti valori:

    • CLIENT_ID: l'ID del client di cui stai controllando la configurazione, ad esempio projects/000000/networks/mesh:mesh1/nodes/00000000-0000-0000-0000-00000000~127.0.0.1
    • PROJECT_NUMBER: l'ID univoco del progetto Google Cloud
    • MESH_OR_SCOPE: se il client xDS recupera una risorsa Mesh, utilizza un prefisso mesh: seguito dal nome effettivo del mesh. Se il client xDS recupera una risorsa Gateway, utilizza un prefisso scope: seguito dal nome del parametro di ambito
  2. Esegui il client CSDS. L'esecuzione del client genera un file JSON. Questo file contiene la configurazione inviata al client 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
    

    Sostituisci i seguenti valori:

    • PATH_TO_CSDS_REQUEST_YAML_FILE: il percorso del file YAML
    • FILENAME.JSON: un nome per il file che contiene l'output del client CSDS

    Dovresti vedere un output simile al seguente:

    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
    

    Puoi esaminare una configurazione xDS dettagliata esaminando il file JSON. Questa uscita contiene lo stato delle singole configurazioni xDS inviate da Cloud Service Mesh al client utilizzando uno stream gRPC aggregato (ADS).

API precedenti

  1. Aggiorna il file YAML creato in Determinare quali client sono attualmente connessi a Cloud Service Mesh. Aggiungi un campo node-id che utilizzi l'ID client come valore.

    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"
    

    Sostituisci i seguenti valori:

    • CLIENT_ID: l'ID del client di cui stai controllando la configurazione, ad esempio f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6
    • PROJECT_NUMBER: l'ID univoco del progetto Google Cloud
    • NETWORK_NAME: la rete VPC specificata dalla regola di inoltro della mappa di regole di routing
  2. Esegui il client CSDS. L'esecuzione del client genera un file JSON. Questo file contiene la configurazione inviata al client 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
    

    Sostituisci i seguenti valori:

    • PATH_TO_CSDS_REQUEST_YAML_FILE: il percorso del file YAML
    • FILENAME.JSON: un nome per il file che contiene l'output del client CSDS

    Dovresti vedere un output simile al seguente:

    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
    

    Puoi esaminare una configurazione xDS dettagliata esaminando il file JSON. Questa uscita contiene lo stato delle singole configurazioni xDS inviate da Cloud Service Mesh al client utilizzando uno stream gRPC aggregato (ADS).

Valori di stato

La tabella seguente elenca i valori dello stato di configurazione xDS che potresti visualizzare.

Valore Descrizione
UNKNOWN (Valore predefinito) ⁣Le informazioni sullo stato non sono disponibili o sono sconosciute.
SYNCED Cloud Service Mesh ha inviato la configurazione al client e ha ricevuto un ACK dal client.
ERROR ⁣Cloud Service Mesh ha inviato la configurazione al client e ha ricevuto un messaggio NACK dal client.
STALE Cloud Service Mesh ha inviato la configurazione al client, ma non ha ricevuto un ACK o un NACK dal client.
NOT_SENT La configurazione non è stata inviata.
N/A Il client CSDS non ha incluso l'ID nodo. Tutti gli stream collegati vengono restituiti, ma lo stato della configurazione non è disponibile.

Visualizzazione e monitoraggio

Lo strumento open source del client CSDS offre funzionalità aggiuntive che potresti voler utilizzare, come la visualizzazione e il monitoraggio continuo. Per ulteriori informazioni su queste funzionalità, consulta il file README nel repository open source.

Messaggio di errore

Quando attivi l'API Cloud Service Mesh solo nel tuo progetto, dal client CSDS potresti visualizzare il seguente messaggio di errore:

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

Questo è un comportamento previsto. La configurazione di Cloud Service Mesh è basata su reti. Se non hai ancora creato una rete ed esegui il client CSDS, viene visualizzato questo messaggio di errore.

Limitazioni

  • Le informazioni sugli endpoint non sono incluse nella risposta CSDS perché queste informazioni non sono disponibili nell'API CSDS v3.
  • L'ID nodo di ogni cliente deve essere univoco all'interno del mesh di servizi. Se più client condividono lo stesso ID nodo, viene restituita una sola configurazione, ovvero la configurazione del client che si è connesso più di recente a Cloud Service Mesh.
  • A volte potresti visualizzare una barra inversa (\) nel campo ID nodo del file YAML. In questo caso, esegui la fuga dalla barra sinistra utilizzando un'altra barra sinistra quando esegui una query sull'API CSDS per informazioni sulla configurazione. Si tratta di un problema noto.

Passaggi successivi