Comprobar la conectividad del clúster con nettest

Google Distributed Cloud nettest identifica problemas de conectividad en los objetos de Kubernetes de tus clústeres, como pods, nodos, servicios y algunos destinos externos. nettest no comprueba las conexiones de destinos externos a pods, nodos o servicios. 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 de GitHub anthos-samples. Usa nettest_rhel.yaml si ejecutas Google Distributed Cloud en Red Hat Enterprise Linux (RHEL). Usa nettest.yaml si ejecutas Google Distributed Cloud en Ubuntu.

En este documento también se describe cómo interpretar los registros generados por nettest para identificar problemas de conectividad con sus 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 nettest.

  • cloudprober: un DaemonSet y un servicio responsables de recoger el estado de la conexión de red, como la tasa de errores y la latencia.
  • echoserver: un DaemonSet y un servicio responsables de responder a cloudprober, proporcionándole las métricas de conectividad de red.
  • nettest: un pod que contiene los contenedores prometheus y nettest.
    • prometheus recoge métricas de cloudprober.
    • nettest consultas prometheus y muestra los resultados de la prueba de red en el registro.
  • nettest-engine: un ConfigMap para configurar el contenedor nettest en el pod nettest.

El manifiesto también especifica el espacio de nombres nettest y una cuenta de servicio dedicada (junto con ClusterRole y ClusterRoleBinding) para aislar nettest de otros recursos del clúster.

Ejecutar nettest

Implementa nettest ejecutando el siguiente comando para tu sistema operativo. Cuando se inicie el nettest Pod, la prueba se ejecutará automáticamente. La prueba tarda unos cinco minutos en completarse.

En Ubuntu:

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

Para RHEL:

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

Obtener los resultados de la prueba

Una vez que se haya completado la prueba (lo que debería llevar unos cinco minutos después de que se haya implementado el manifiesto nettest), ejecuta el siguiente comando para ver los resultados nettest:

kubectl -n nettest logs nettest -c nettest

Mientras nettest está en ejecución, envía mensajes como el siguiente 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 correctamente sin identificar ningún fallo de conectividad, verás la siguiente entrada de registro:

I0211 21:58:34.689290       1 validate_metrics.go:78] Metric validation passed!

Si nettest encuentra 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 1 % (1.000000), se pueden ignorar de forma segura las tasas de error de hasta el 5 %. Por ejemplo, la tasa de errores de conectividad de la dirección IP 192.168.3.248 a echoserver-hostnetwork_10.200.0.2_8080 en el ejemplo anterior es de aproximadamente el 2 % (2.007046). Este es un ejemplo de un problema de conectividad notificado que puedes ignorar.

Interpretar los resultados de la prueba

Cuando nettest termina y detecta un problema de conectividad, verás la siguiente entrada en los registros de nettest Pod:

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

Aquí, {src} y {dst} pueden ser:

  • echoserver IP de Pod: la conexión hacia o desde un Pod en el nodo.
  • IP del nodo: la conexión hacia o desde el nodo.
  • IP de servicio (consulta el texto siguiente para obtener más información)

Además, {dst} también puede ser:

  • google.com: una conexión externa.
  • dns: la conexión a un servicio que no es de 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 las entradas de sondeo con formato JSON del registro, como 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 sondas con este valor de targets: una para el pod (pod-service-clusterip) y otra para el nodo (node-service-clusterip).

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

Validar las correcciones

Cuando hayas solucionado todos los problemas de conectividad notificados, quita el nettest Pod y vuelve a aplicar el manifiesto de nettest para volver a ejecutar las pruebas de conectividad.

Por ejemplo, para volver a ejecutar nettest en 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

Limpiar nettest

Cuando hayas terminado de hacer pruebas, ejecuta los siguientes comandos para quitar todos los recursos nettest:

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

Siguientes pasos

Si necesitas más ayuda, ponte en contacto con el servicio de atención al cliente de Cloud. También puedes consultar la sección Obtener asistencia para obtener más información sobre los recursos de asistencia, incluidos los siguientes:

  • Requisitos para abrir un caso de asistencia.
  • Herramientas para ayudarte a solucionar problemas, como la configuración de tu entorno, los registros y las métricas.
  • Componentes admitidos.