Controllare la connettività del cluster con nettest

nettest di Google Distributed Cloud identifica i problemi di connettività negli oggetti Kubernetes nei cluster, come pod, nodi, servizi e alcuni target esterni. nettest non controlla le connessioni dai target esterni a pod, nodi o servizi. Questo documento descrive come eseguire il deployment ed eseguire nettest con uno dei manifest, nettest.yaml o nettest_rhel.yaml, in the anthos-samples repository GitHub. Utilizza nettest_rhel.yaml se esegui Google Distributed Cloud su Red Hat Enterprise Linux (RHEL). Utilizza nettest.yaml se esegui Google Distributed Cloud su Ubuntu.

Questo documento descrive anche come interpretare i log generati da nettest per identificare i problemi di connettività con i cluster.

Informazioni su nettest

Lo strumento di diagnostica nettest è costituito dai seguenti oggetti Kubernetes. Ogni oggetto è specificato nei file manifest YAML nettest.

  • cloudprober: un DaemonSet e un servizio responsabile della raccolta dello stato della connessione di rete, come tasso di errore e latenza.
  • echoserver: un DaemonSet e un servizio responsabile della risposta a cloudprober, fornendo le metriche per la connettività di rete.
  • nettest: un pod che contiene i container prometheus e nettest.
    • prometheus raccoglie le metriche da cloudprober.
    • nettest esegue query su prometheus e visualizza i risultati del test di rete nel log.
  • nettest-engine: un ConfigMap per configurare il container nettest nel pod nettest.

Il manifest specifica anche lo spazio dei nomi nettest e un ServiceAccount dedicato (insieme a ClusterRole e ClusterRoleBinding) per isolare nettest dalle altre risorse del cluster.

Esegui nettest

Esegui il deployment di nettest eseguendo il seguente comando per il tuo sistema operativo. Quando viene avviato il pod nettest, il test viene eseguito automaticamente. Il completamento del test richiede circa cinque minuti.

Per Ubuntu:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml

Per RHEL:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest_rhel.yaml

Ottieni i risultati del test

Una volta completato il test, che dovrebbe richiedere circa cinque minuti dopo il deployment del manifest nettest, esegui il seguente comando per visualizzare i risultati di nettest:

kubectl -n nettest logs nettest -c nettest

Durante l'esecuzione di nettest, vengono inviati messaggi come i seguenti a stdout:

I0413 03:33:04.879141       1 collectorui.go:130] Listening on ":8999"
I0413 03:33:04.879258       1 prometheus.go:172] Running prometheus controller
E0413 03:33:04.879628       1 prometheus.go:178] Prometheus controller: failed to
retries probers: Get "http://127.0.0.1:9090/api/v1/targets": dial tcp 127.0.0.1:9090:
connect: connection refused

Se nettest viene eseguito correttamente senza identificare errori di connettività, viene visualizzata la seguente voce di log:

I0211 21:58:34.689290       1 validate_metrics.go:78] Metric validation passed!

Se nettest ha rilevato problemi di connessione, scrive voci di log come le seguenti:

E0211 06:40:11.948634       1 collector.go:65] Engine error: step validateMetrics failed:
"Error rate in percentage": probe from "10.200.0.3" to "172.26.115.210:80" has value 100.000000,
threshold is 1.000000
"Error rate in percentage": probe from "10.200.0.3" to "172.26.27.229:80" has value 100.000000,
threshold is 1.000000
"Error rate in percentage": probe from "192.168.3.248" to "echoserver-hostnetwork_10.200.0.2_8080"
has value 2.007046, threshold is 1.000000

Sebbene la soglia predefinita sia dell'1% (1.000000), i tassi di errore fino al 5% possono essere ignorati in sicurezza. Ad esempio, il tasso di errore per la connettività dall'indirizzo IP 192.168.3.248 a echoserver-hostnetwork_10.200.0.2_8080 nell'esempio precedente è di circa il 2% (2.007046). Questo è un esempio di un problema di connettività segnalato che puoi ignorare.

Interpreta i risultati del test

Quando nettest termina e rileva un problema di connettività, viene visualizzata la seguente voce nei log dei pod nettest:

"Error rate in percentage": probe from {src} to {dst} has value 100.000000, threshold is 1.000000

In questo caso, {src} e {dst} possono essere:

  • IP del pod echoserver: la connessione da o verso un pod sul nodo.
  • IP del nodo: la connessione da o verso il nodo.
  • IP del servizio (vedi il testo seguente per i dettagli)

Inoltre, {dst} può essere anche:

  • google.com: una connessione esterna.
  • dns: la connessione a un servizio non hostNetwork tramite DNS, ovvero echoserver-non-hostnetwork.nettest.svc.cluster.local.

    I dettagli dell'IP del servizio sono nelle voci di probe in formato JSON nel log, come nell'esempio seguente. L'esempio di probe seguente mostra che 172.26.27.229:80 è l'indirizzo diservice-clusterip. Esistono due probe con questo valore targets, uno per il pod (pod-service-clusterip) e uno per il nodo (node-service-clusterip).

    probe {
      name: "node-service-clusterip"
      
      targets {
        host_names: "172.26.27.229:80"
      }
    

Convalida le correzioni

Dopo aver risolto tutti i problemi di connettività segnalati, rimuovi il pod nettest e riapplica il manifest nettest per eseguire di nuovo i test di connettività.

Ad esempio, per eseguire di nuovo nettest per Ubuntu, esegui i seguenti comandi:

kubectl -n nettest delete pod nettest
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml

Libera spazio nettest

Al termine del test, esegui i seguenti comandi per rimuovere tutte le risorse nettest:

kubectl delete namespace nettest
kubectl delete clusterroles nettest:nettest
kubectl delete clusterrolebindings nettest:nettest

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud. Puoi anche consultare Richiedere assistenza per ulteriori informazioni sulle risorse di assistenza, tra cui:

  • Requisiti per l'apertura di una richiesta di assistenza.
  • Strumenti per la risoluzione dei problemi, come la configurazione dell'ambiente, i log e le metriche.
  • Componenti supportati.