Google Distributed Cloud nettest ti consente di identificare i problemi di connettività tra gli oggetti Kubernetes nei tuoi cluster, inclusi pod, nodi, servizi e target esterni. nettest non testa le connessioni in entrata da target esterni a oggetti del cluster interni.
Puoi eseguire il deployment e l'esecuzione di nettest utilizzando i manifest del repository GitHub anthos-samples, quindi interpretare i log generati per diagnosticare gli errori di comunicazione del 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 Service responsabili della raccolta dello stato della connessione di rete, ad esempio il tasso di errore e la latenza.echoserver: un DaemonSet e un servizio responsabili di rispondere acloudprober, fornendo le metriche per la connettività di rete.nettest: un pod contenente i containerprometheusenettest.prometheusraccoglie le metriche dacloudprober.nettestesegue query suprometheuse visualizza i risultati del test di rete nel log.
nettest-engine: un ConfigMap per configurare il containernettestnel 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 il comando seguente per il tuo sistema operativo.
All'avvio del pod nettest, il test viene eseguito automaticamente. Il 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
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 visualizzare i risultati di nettest:
kubectl -n nettest logs nettest -c nettest
Durante l'esecuzione, nettest 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 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
Anche se la soglia predefinita è l'1% (1.000000), i tassi di errore fino al 5% possono essere ignorati senza problemi. Ad esempio, la percentuale di errori 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 problema di connettività segnalato che puoi ignorare.
Interpreta i risultati del test
Quando nettest termina e rileva un problema di connettività, nel 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:
echoserverIP pod: la connessione da o verso un pod sul nodo.- IP del nodo: la connessione da o verso il nodo.
- IP del servizio (per i dettagli, consulta il testo seguente)
Inoltre, {dst} può anche essere:
google.com: una connessione esterna.dns: la connessione a un servizio nonhostNetworktramite DNS, ovveroechoserver-non-hostnetwork.nettest.svc.cluster.local.I dettagli dell'IP del servizio si trovano nelle voci di probe formattate in 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" }
Convalida le correzioni
Dopo aver risolto 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 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
Pulisci 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
Passaggi successivi
Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud. Puoi anche consultare Assistenza per ulteriori informazioni sulle risorse di assistenza, tra cui:
- Requisiti per l'apertura di una richiesta di assistenza.
- Strumenti per aiutarti a risolvere i problemi, ad esempio la configurazione dell'ambiente, i log e le metriche.
- Componenti supportati.