Informazioni sullo stato del client di Traffic Director

Quando utilizzi Traffic Director per gestire il networking delle tue applicazioni, considera i seguenti due componenti principali:

  • Il livello dell'infrastruttura. Il livello di infrastruttura, come i proxy sidecar di Envoy o le librerie gRPC senza proxy, è configurato per gestire il networking per conto delle tue applicazioni.
  • Il piano di controllo, Traffic Director. Il piano di controllo genera la configurazione per il livello dell'infrastruttura e la distribuisce.

Quando un proxy Envoy o la libreria gRPC vengono inizializzati, utilizzano le API xDS per connettersi a Traffic Director. Il proxy o la libreria agisce come client per Traffic Director. Dopo aver stabilito una connessione tra il client e Traffic Director, Traffic Director invia le informazioni di configurazione al client e aggiorna la configurazione secondo necessità.

A volte è utile comprendere quali client sono connessi a Traffic Director o ispezionare la configurazione generata da Traffic Director per i suoi client. Ad esempio, potresti voler eseguire il debug di un problema o capire in che modo le azioni eseguite durante la configurazione di Traffic Director influiscono sulla configurazione visualizzata dai client.

Traffic Director 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 Traffic Director e ispezionare la configurazione generata da Traffic Director per i suoi client.

Il client CSDS è uno strumento open source che puoi scaricare dal repository Envoy. Il seguente diagramma illustra il modo in cui il client CSDS esegue query su Traffic Director per informazioni sull'API CSDS di Traffic Director.

Utilizzo dell'API CSDS per ottenere informazioni di configurazione sui client Traffic Director.
Utilizzo dell'API CSDS per ottenere informazioni di configurazione sui client Traffic Director (fai clic per ingrandire)

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

Per ulteriori informazioni sul client CSDS, consulta il file README.

Prerequisiti

Per connetterti all'API CSDS, è necessario un client CSDS. Puoi ottenere il cliente in due modi:

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

Crea il client CSDS utilizzando Cloud Shell

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

  1. Reimposta Cloud Shell utilizzando le istruzioni in Disattivare o reimpostare Cloud Shell. Ciò garantisce che le configurazioni esistenti non interferiscano con la build.
  2. Nella console Google Cloud, apri una nuova sessione di Cloud Shell.
  3. Esegui questo comando per ottenere il codice sorgente da utilizzare per creare il client CSDS:

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

    cd envoy-tools/csds-client/
    make init
    make build
    
  5. Dopo aver completato la build, testala con il seguente comando:

    csds-client -help
    

Se la build ha esito positivo, vedrai il testo della guida del client.

Crea il client CSDS su una macchina di sviluppo locale

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

Prerequisiti aggiuntivi

  1. Assicurati che l'ID nodo di ciascun client sia univoco all'interno del mesh di servizi. Se più client condividono lo stesso ID nodo, viene restituita solo una configurazione, ovvero quella del client che si è connesso a Traffic Director.

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

  2. Assicurati di avere accesso a un account utente con le autorizzazioni IAM (Identity and Access Management) necessarie per configurare Traffic Director. Le seguenti istruzioni utilizzano Google Cloud CLI per generare e fornire automaticamente le credenziali necessarie al client CSDS. In alternativa, puoi utilizzare il client CSDS e fornire direttamente le credenziali.

Determina quali client sono attualmente connessi a Traffic Director

Puoi utilizzare il client CSDS per determinare quali client sono connessi alla tua configurazione Traffic Director.

Per ottenere queste informazioni, hai bisogno 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 opzioni, a seconda della risorsa recuperata dal client xDS:

    • Il nome della risorsa Mesh
    • Il parametro ambito sulla risorsa gateway
  • Se utilizzi le API precedenti, il nome della rete VPC specificata durante la configurazione di Traffic Director. Questa rete è quella specificata dalla regola di forwarding della mappa di regole di routing.

API di routing dei servizi

  1. Da un account che dispone delle autorizzazioni corrette, esegui questo comando:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. Crea un nuovo file nel 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 il prefisso mesh: seguito dal nome effettivo del mesh; se il client xDS recupera una risorsa gateway, utilizza il prefisso scope: seguito dal nome del parametro dell'ambito
  1. Esegui il client CSDS, che utilizza le credenziali generate da gcloud CLI. Sostituisci PATH_TO_CSDS_REQUEST_YAML_FILE con il percorso del file YAML 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 Traffic Director. Questi ID client vengono forniti utilizzando il campo node_id nel file di bootstrap utilizzato da Envoy o da gRPC proxyless quando si connettono a Traffic Director.

API precedenti

  1. Da un account che dispone delle autorizzazioni corrette, esegui questo comando:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. Crea un nuovo file nel 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 forwarding della mappa delle regole di routing
  3. Esegui il client CSDS, che utilizza le credenziali generate da gcloud CLI. Sostituisci PATH_TO_CSDS_REQUEST_YAML_FILE con il percorso del file YAML 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 Traffic Director. Questi ID client vengono forniti utilizzando il campo node_id nel file di bootstrap utilizzato da Envoy o da gRPC proxyless quando si connettono a Traffic Director.

Ispeziona la configurazione di un client Traffic Director specifico

Puoi esaminare la configurazione inviata da Traffic Director a un determinato client utilizzando l'ID client ottenuto nella sezione precedente.

Puoi esaminare la configurazione dettagliata del protocollo delle risorse per determinare quale versione dell'API xDS viene utilizzata dal client specifico. Ad esempio, se vedi envoy.api.v2.Cluster nella configurazione, significa che il client utilizza l'API v2. Se nella configurazione è presente envoy.api.v3.Cluster, significa che il client sta utilizzando l'API v3.

API di routing dei servizi

  1. Aggiorna il file YAML che hai creato in Determina quali client sono attualmente connessi a Traffic Director. Aggiungi un campo node-id che utilizza 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 il prefisso mesh: seguito dal nome effettivo del mesh; se il client xDS recupera una risorsa gateway, utilizza il prefisso scope: seguito dal nome del parametro dell'ambito
  2. Esegui il client CSDS. L'esecuzione del client genera un file JSON. Questo file contiene la configurazione che viene inviata al client Traffic Director.

    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 controllare una configurazione xDS dettagliata guardando il file JSON. Questo output contiene lo stato delle singole configurazioni xDS inviate da Traffic Director al client utilizzando un flusso gRPC aggregato (ADS).

API precedenti

  1. Aggiorna il file YAML che hai creato in Determina quali client sono attualmente connessi a Traffic Director. Aggiungi un campo node-id che utilizza 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 forwarding della mappa di regole di routing
  2. Esegui il client CSDS. L'esecuzione del client genera un file JSON. Questo file contiene la configurazione che viene inviata al client Traffic Director.

    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 controllare una configurazione xDS dettagliata guardando il file JSON. Questo output contiene lo stato delle singole configurazioni xDS inviate da Traffic Director al client utilizzando un flusso gRPC aggregato (ADS).

Valori di stato

Nella tabella seguente sono elencati i valori che potresti visualizzare per lo stato della configurazione xDS.

Valore Descrizione
UNKNOWN (Predefinito) ⁣Le informazioni sullo stato non sono disponibili o sono sconosciute.
SYNCED Traffic Director ha inviato la configurazione al client e ha ricevuto un ACK dal client.
ERROR ⁣Traffic Director ha inviato la configurazione al client e ha ricevuto un NACK dal client.
STALE Traffic Director ha inviato la configurazione al client, ma non ha ricevuto ACK o NACK dal client.
NOT_SENT La configurazione non è stata inviata.
N/A Il client CSDS non include l'ID nodo. Vengono restituiti tutti i flussi connessi, ma lo stato della configurazione non è disponibile.

Visualizzazione e monitoraggio

Lo strumento open source client CSDS include 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 abiliti l'API Traffic Director solo nel tuo progetto, potresti visualizzare il seguente messaggio di errore del client CSDS:

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

Questo è un comportamento previsto. L'ambito della configurazione di Traffic Director è in base alla rete. Se non hai ancora creato una rete ed esegui il client CSDS, visualizzerai questo messaggio di errore.

Limitazioni

  • Le informazioni sugli endpoint non sono incluse nella risposta CSDS perché non sono disponibili nell'API CSDS v3.
  • L'ID nodo di ciascun client deve essere univoco all'interno del mesh di servizi. Se più client condividono lo stesso ID nodo, viene restituita una sola configurazione, ovvero quella per il client che si è connesso più di recente a Traffic Director.
  • A volte potresti vedere una barra rovesciata (\) nel campo ID nodo nel file YAML. In questo caso, esegui l'escape della barra rovesciata utilizzando una barra rovesciata aggiuntiva quando esegui una query sull'API CSDS per ottenere informazioni di configurazione. Si tratta di un problema noto.

Passaggi successivi