nettest
de GKE en Bare Metal identifica problemas de conectividad en los objetos de Kubernetes en tus clústeres, como Pods, nodos, Services y algunos destinos externos. nettest
no verifica las conexiones de los destinos externos a los Pods, los nodos o los Services. En este documento, se describe cómo implementar y ejecutar nettest
con uno de los manifiestos, nettest.yaml
o nettest_rhel.yaml
, en el repositorio anthos-samples de GitHub. Usa nettest_rhel.yaml
si ejecutas GKE en Bare Metal en Red HatEnterprise Linux (RHEL) o CentOS. Usa nettest.yaml
si ejecutas GKE en Bare Metal en Ubuntu.
En este documento, también se describe cómo interpretar los registros que genera nettest
para identificar problemas de conectividad con los clústeres.
Acerca de nettest
La herramienta de diagnóstico nettest
consta de los siguientes objetos de Kubernetes. Cada objeto se especifica en los archivos de manifiesto YAML de nettest
.
cloudprober
: Es un DaemonSet y un Service responsable de recopilar el estado de la conexión de red, como la tasa de error y la latencia.echoserver
: Es un DaemonSet y un Service responsable de responder acloudprober
, que le proporcionan las métricas para la conectividad de red.nettest
: Es un Pod que incluye los contenedoresprometheus
ynettest
.prometheus
recopila métricas decloudprober
.nettest
consultaprometheus
y muestra los resultados de la prueba de red en el registro.
nettest-engine
: Es un ConfigMap para configurar el contenedornettest
en el Podnettest
.
El manifiesto también especifica el espacio de nombres nettest
y una ServiceAccount dedicada (junto con ClusterRole y ClusterRoleBinding) para aislar nettest
de otros recursos del clúster.
Ejecuta nettest
Implementa nettest
mediante la ejecución del siguiente comando en tu sistema operativo.
Cuando se inicia el Pod nettest
, la prueba se ejecuta de forma automática. La prueba toma unos cinco minutos en completarse.
Para el SO Ubuntu:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml
Para RHEL o CentOS OS:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest_rhel.yaml
Obtén los resultados de la prueba
Una vez finalizada la prueba, lo que debería tomar alrededor de cinco minutos después de que se implementa el manifiesto nettest
, ejecuta el siguiente comando para ver los resultados de nettest
:
kubectl -n nettest logs nettest -c nettest
Mientras nettest
se está ejecutando, envía mensajes como los siguientes 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
Si nettest
se ejecuta de forma correcta sin identificar ninguna falla de conectividad, verás la siguiente entrada de registro:
I0211 21:58:34.689290 1 validate_metrics.go:78] Metric validation passed!
Si nettest
encontró problemas de conexión, escribe entradas de registro como las siguientes:
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
Aunque el umbral predeterminado es del uno por ciento (1.000000
), las tasas de error de hasta el cinco por ciento se pueden ignorar de forma segura. Por ejemplo, la tasa de error de la conectividad de la dirección IP 192.168.3.248
a la echoserver-hostnetwork_10.200.0.2_8080
en el ejemplo anterior es de alrededor del dos por ciento (2.007046
). Este es un ejemplo de un problema de conectividad informado que puedes ignorar.
Interpreta los resultados de la prueba
Cuando nettest
finalice y encuentre un problema de conectividad, verás la siguiente entrada en los registros del Pod nettest
:
"Error rate in percentage": probe from {src} to {dst} has value 100.000000, threshold is 1.000000
Aquí, {src}
y {dst}
pueden ser de la siguiente manera:
echoserver
: Es la conexión al Pod desde y hacia el Pod en el nodo.- IP del nodo: Es la conexión desde y hacia el nodo.
- IP del servicio (consulta el siguiente texto para obtener más información)
Además, {dst}
también puede ser:
google.com
: Es una conexión externa.dns
: Es la conexión a un Service que no eshostNetwork
a través de DNS, es decir,echoserver-non-hostnetwork.nettest.svc.cluster.local
.Los detalles de la IP de servicio se encuentran en entradas de sondeo con formato JSON en el registro, como se muestra en el siguiente ejemplo. En el siguiente ejemplo de sondeo, se muestra que
172.26.27.229:80
es la dirección deservice-clusterip
. Hay dos sondeos con este valor detargets
: uno para el Pod (pod-service-clusterip
) y otro para el nodo (node-service-clusterip
).probe { name: "node-service-clusterip" … targets { host_names: "172.26.27.229:80" }
Valida tus correcciones
Cuando hayas resuelto todos los problemas de conectividad informados, quita el Pod nettest
y vuelve a aplicar el manifiesto de nettest
para volver a ejecutar las pruebas de conectividad.
Por ejemplo, si quieres volver a ejecutar nettest
para Ubuntu, ejecuta los siguientes comandos:
kubectl -n nettest delete pod nettest
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml
Limpia nettest
Cuando termines de realizar las pruebas, ejecuta los siguientes comandos para quitar todos los recursos de nettest
:
kubectl delete namespace nettest
kubectl delete clusterroles nettest:nettest
kubectl delete clusterrolebindings nettest:nettest