Controlla la connettività del cluster con nettest

L'elemento nettest di GKE su Bare Metal identifica i problemi di connettività negli oggetti Kubernetes nei tuoi cluster, come pod, nodi, servizi e alcuni target esterni. nettest non controlla le connessioni da destinazioni esterne a pod, nodi o servizi. Questo documento descrive come eseguire il deployment di nettest ed eseguirlo con uno dei manifest, nettest.yaml o nettest_rhel.yaml, nel repository GitHub di anthos-samples. Utilizza nettest_rhel.yaml se esegui GKE su Bare Metal su Red HatEnterprise Linux (RHEL) o CentOS. Utilizza nettest.yaml se esegui GKE su Bare Metal 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 viene specificato nei file manifest YAML nettest.

  • cloudprober: un DaemonSet e un Service responsabili della raccolta dello stato della connessione di rete, ad esempio la percentuale di errori e la latenza.
  • echoserver: un DaemonSet e un Service responsabili di rispondere a cloudprober, fornendo le metriche per la connettività di rete.
  • nettest: un pod contenente i container prometheus e nettest.
    • prometheus raccoglie metriche da cloudprober.
    • nettest esegue una query su prometheus e visualizza i risultati del test di rete nel log.
  • nettest-engine: un oggetto 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 questo comando per il tuo sistema operativo. All'avvio del pod nettest, il test viene eseguito automaticamente. Il test richiede circa cinque minuti.

Per il sistema operativo Ubuntu:

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

Per OS RHEL o CentOS:

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

Visualizza i risultati del test

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

kubectl -n nettest logs nettest -c nettest

Mentre nettest è in esecuzione, invia messaggi come il seguente 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à, vedrai 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, scriverà le 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

Anche se la soglia predefinita è di uno percento (1.000000), le percentuali di errore fino al cinque percento possono essere ignorate in modo sicuro. Ad esempio, la percentuale di errori di 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 trova un problema di connettività, vedrai la seguente voce nei log del pod nettest:

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

Qui, {src} e {dst} possono essere:

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

Inoltre, {dst} può anche essere:

  • 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 per l'IP di servizio si trovano in voci 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, una per il pod (pod-service-clusterip) e una per il Nodo (node-service-clusterip).

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

Convalidare le correzioni

Una volta risolti tutti i problemi di connettività segnalati, rimuovi il pod nettest e applica nuovamente il manifest nettest per eseguire nuovamente i test di connettività.

Ad esempio, per rieseguire 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 i comandi seguenti per rimuovere tutte le risorse nettest:

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