Verifica la conectividad del clúster con nettest

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 Hat Enterprise 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 a cloudprober, que le proporcionan las métricas para la conectividad de red.
  • nettest: Es un Pod que incluye los contenedores prometheus y nettest.
    • prometheus recopila métricas de cloudprober.
    • nettest consulta prometheus y muestra los resultados de la prueba de red en el registro.
  • nettest-engine: Es un ConfigMap para configurar el contenedor nettest en el Pod nettest.

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 es hostNetwork 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 de service-clusterip. Hay dos sondeos con este valor targets, 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