Verificar que mTLS está habilitado

Una vez que hayas agregado aplicaciones a una malla ambient, puedes validar fácilmente que mTLS está habilitado entre tus cargas de trabajo usando uno o más de los siguientes métodos:

Validar mTLS usando las configuraciones de ztunnel de la carga de trabajo

Usando el conveniente comando istioctl ztunnel-config workloads, puedes ver si tu carga de trabajo está configurada para enviar y aceptar tráfico HBONE a través del valor de la columna PROTOCOL. Por ejemplo:

$ istioctl ztunnel-config workloads
NAMESPACE    POD NAME                                IP         NODE                     WAYPOINT PROTOCOL
default      details-v1-857849f66-ft8wx              10.42.0.5  k3d-k3s-default-agent-0  None     HBONE
default      kubernetes                              172.20.0.3                          None     TCP
default      productpage-v1-c5b7f7dbc-hlhpd          10.42.0.8  k3d-k3s-default-agent-0  None     HBONE
default      ratings-v1-68d5f5486b-b5sbj             10.42.0.6  k3d-k3s-default-agent-0  None     HBONE
default      reviews-v1-7dc5fc4b46-ndrq9             10.42.1.5  k3d-k3s-default-agent-1  None     HBONE
default      reviews-v2-6cf45d556b-4k4md             10.42.0.7  k3d-k3s-default-agent-0  None     HBONE
default      reviews-v3-86cb7d97f8-zxzl4             10.42.1.6  k3d-k3s-default-agent-1  None     HBONE

Tener HBONE configurado en tu carga de trabajo no significa que tu carga de trabajo rechazará cualquier tráfico de texto plano. Si quieres que tu carga de trabajo rechace el tráfico de texto plano, crea una política PeerAuthentication con el modo mTLS establecido en STRICT para tu carga de trabajo.

Validar mTLS desde las métricas

Si has instalado Prometheus, puedes configurar el reenvío de puertos y abrir la interfaz de usuario de Prometheus usando el siguiente comando:

$ istioctl dashboard prometheus

En Prometheus, puedes ver los valores de las métricas de TCP. Primero, selecciona Gráfico e ingresa una métrica como: istio_tcp_connections_opened_total, istio_tcp_connections_closed_total, istio_tcp_received_bytes_total o istio_tcp_sent_bytes_total. Por último, haz clic en Ejecutar. Los datos contendrán entradas como:

istio_tcp_connections_opened_total{
  app="ztunnel",
  connection_security_policy="mutual_tls",
  destination_principal="spiffe://cluster.local/ns/default/sa/bookinfo-details",
  destination_service="details.default.svc.cluster.local",
  reporter="source",
  request_protocol="tcp",
  response_flags="-",
  source_app="curl",
  source_principal="spiffe://cluster.local/ns/default/sa/curl",source_workload_namespace="default",
  ...}

Valida que el valor de connection_security_policy esté establecido en mutual_tls junto con la información de identidad de origen y destino esperada.

Validar mTLS desde los registros

También puedes ver el registro de ztunnel de origen o destino para confirmar que mTLS está habilitado, junto con las identidades de los pares. A continuación se muestra un ejemplo del registro de ztunnel de origen para una solicitud del servicio curl al servicio details:

2024-08-21T15:32:05.754291Z info access connection complete src.addr=10.42.0.9:33772 src.workload="curl-7656cf8794-6lsm4" src.namespace="default"
src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.42.0.5:15008 dst.hbone_addr=10.42.0.5:9080 dst.service="details.default.svc.cluster.local"
dst.workload="details-v1-857849f66-ft8wx" dst.namespace="default" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-details"
direction="outbound" bytes_sent=84 bytes_recv=358 duration="15ms"

Valida que los valores de src.identity y dst.identity sean correctos. Son las identidades utilizadas para la comunicación mTLS entre las cargas de trabajo de origen y destino. Consulta la sección verificación del tráfico de ztunnel a través de los registros para obtener más detalles.

Validar con el panel de control de Kiali

Si tienes Kiali y Prometheus instalados, puedes visualizar la comunicación de tu carga de trabajo en la malla ambient usando el panel de control de Kiali. Puedes ver si la conexión entre dos cargas de trabajo tiene el icono del candado para validar que mTLS está habilitado, junto con la información de identidad del par:

Panel de control de Kiali
Panel de control de Kiali

Consulta el documento Visualizar la aplicación y las métricas para obtener más detalles.

Validar con tcpdump

Si tienes acceso a tus nodos de trabajo de Kubernetes, puedes ejecutar el comando tcpdump para capturar todo el tráfico en la interfaz de red, con el enfoque opcional en los puertos de la aplicación y el puerto HBONE. En este ejemplo, el puerto 9080 es el puerto del servicio details y 15008 es el puerto HBONE:

$ tcpdump -nAi eth0 port 9080 or port 15008

Deberías ver el tráfico cifrado en la salida del comando tcpdump.

Si no tienes acceso a los nodos de trabajo, puedes usar la imagen del contenedor netshoot para ejecutar fácilmente el comando:

$ POD=$(kubectl get pods -l app=details -o jsonpath="{.items[0].metadata.name}")
$ kubectl debug $POD -i --image=nicolaka/netshoot -- tcpdump -nAi eth0 port 9080 or port 15008
¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!