I cluster Anthos su Bare Metal nettest
identificano i problemi di connettività negli oggetti Kubernetes nei cluster, come pod, nodi, servizi e alcune destinazioni esterne. nettest
non controlla le connessioni dai target esterni ai pod, ai nodi o ai servizi. Questo documento descrive come eseguire il deployment ed eseguire nettest
con uno dei manifest, nettest.yaml
o nettest_rhel.yaml
, nel repository anthos-samples. Utilizza nettest_rhel.yaml
se esegui Cluster Anthos su Bare Metal su Red HatEnterprise Linux (RHEL) o CentOS. Utilizza nettest.yaml
se esegui Cluster Anthos on bare metal su Ubuntu.
In questo documento viene inoltre spiegato come interpretare i log generati da nettest
per identificare problemi di connettività con i tuoi 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 di connessione della rete, come frequenza di errore e latenza.echoserver
: un DaemonSet e un servizio responsabili di rispondere acloudprober
, fornendogli le metriche per la connettività di rete.nettest
: un pod contenente i containerprometheus
enettest
.prometheus
raccoglie le metriche dacloudprober
.nettest
esegue una query suprometheus
e visualizza i risultati del test di rete nel log.
nettest-engine
: un ConfigMap per configurare il containernettest
nel podnettest
.
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.
Quando il pod nettest
viene avviato, 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 il sistema operativo RHEL o CentOS:
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 dopo il deployment del manifest nettest
, esegui questo comando per vedere i risultati di nettest
:
kubectl -n nettest logs nettest -c nettest
Quando 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 alcun errore 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 sicurezza. 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 per cento (2.007046
). Questo è un esempio di un problema di connettività segnalato che puoi ignorare.
Interpretare i risultati del test
Quando nettest
termina e rileva 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
In questo caso, {src}
e {dst}
possono essere:
echoserver
IP del pod: la connessione da/verso un pod sul nodo.- IP del nodo: la connessione da/per 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 nonhostNetwork
attraverso DNS, ovveroechoserver-non-hostnetwork.nettest.svc.cluster.local
.I dettagli relativi all'IP di servizio si trovano nelle voci del probe in formato JSON nel log, come nell'esempio seguente. Il seguente esempio di probe mostra che
172.26.27.229:80
è l'indirizzo diservice-clusterip
. Esistono due probe con questo valoretargets
: 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 eseguire nuovamente i test di connettività.
Ad esempio, per eseguire nuovamente 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 dei test, esegui questi comandi per rimuovere tutte le risorse nettest
:
kubectl delete namespace nettest
kubectl delete clusterroles nettest:nettest
kubectl delete clusterrolebindings nettest:nettest