Controlla la connettività del cluster con nettest

I cluster Anthos su Bare Metal nettest individuano problemi di connettività negli oggetti Kubernetes nei tuoi cluster, come pod, nodi, servizi e alcune destinazioni esterne. nettest non controlla le connessioni da target esterni a pod, nodi o servizi. Questo documento descrive come eseguire il deployment ed eseguire nettest con uno dei file manifest, nettest.yaml o nettest_rhel.yaml, nel repository GitHub anthos-samples. Utilizza nettest_rhel.yaml se esegui i cluster Anthos su Bare Metal su Red HatEnterprise Linux (RHEL) o CentOS. Utilizza nettest.yaml se esegui cluster Anthos su Bare Metal su Ubuntu.

Questo documento descrive anche il modo in cui vengono interpretati 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 percentuale di errori e latenza.
  • echoserver: un DaemonSet e un servizio responsabile di rispondere a cloudprober, fornendogli le metriche per la connettività di rete.
  • nettest: un pod contenente i container prometheus e nettest.
    • prometheus raccoglie le metriche da cloudprober.
    • nettest esegue una query su prometheus e mostra 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 da altre risorse del cluster.

Esegui nettest

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

Per Ubuntu OS:

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

Per RHEL o CentOS OS:

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

Ottenere i risultati del test

Al termine del test, che dovrebbe richiedere circa cinque minuti dal deployment del manifest nettest, esegui questo comando per visualizzare i risultati nettest:

kubectl -n nettest logs nettest -c nettest

Mentre nettest è in esecuzione, invia 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 eventuali 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 rileva problemi di connessione, scrive le voci di log nel seguente modo:

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), le percentuali di errore fino al 5% possono essere ignorate in modo sicuro. Ad esempio, la percentuale 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 due percento (2.007046). Questo è un esempio di problema di connettività segnalato che puoi ignorare.

Interpretare i risultati del test

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

"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:

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

Inoltre, i {dst} possono 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 si trovano nelle voci dei probe in formato JSON nel log, come nell'esempio seguente. L'esempio di probe seguente mostra che 172.26.27.229:80 è l'indirizzo di service-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"
      }
    

Convalidare le correzioni

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

Ad esempio, per eseguire di nuovo nettest per Ubuntu, esegui questi 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

Esegui la pulizia di nettest

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

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