Diagnóstico y resolución de problemas de red de AKS con Advanced Container Networking Services

Esta guía le guía a través del diagnóstico y resolución de problemas de redes reales en Azure Kubernetes Service (AKS) mediante Servicios de red de contenedores avanzadas (ACNS). Cada cuaderno de estrategias comienza a partir de un síntoma (errores de DNS, caídas de paquetes, desequilibrio de tráfico, errores L7), muestra qué señal comprobar primero y le indica cuándo profundizar en los registros.

La guía se organiza en torno a tareas, no características. Lea el modelo mental una vez y, a continuación, vaya directamente al manual de estrategias que coincida con su síntoma.

Lo que esta guía le ayuda a resolver

  • Errores de resolución DNS en pods (NXDOMAIN, SERVFAIL, falta de respuestas).
  • Caídas de paquetes causadas por directivas de red mal configuradas, seguimiento de conexiones o degradación de la conectividad.
  • Desequilibrio del tráfico entre pods o espacios de nombres (pods activos, distribución de carga desigual).
  • Errores de aplicación L7 (HTTP 4xx/5xx, errores de gRPC, caídas de Kafka).
  • Planeamiento de la capacidad y la supervisión del estado de la red en todo el clúster.
  • Control de costos de observabilidad a través de la recopilación específica de métricas y registros.

Modelo mental: cómo encajan las métricas, los registros y el filtrado.

ACNS proporciona tres señales. Cada una responde a una pregunta diferente.

Señal Respuestas Más adecuado para Dónde reside
Métricas de red de contenedor ¿Qué ocurre, a qué escala? Detección de anomalías, paneles, alertas, planeamiento de capacidad Azure Managed Prometheus + Grafana
Registros de red de contenedor (almacenados)(solo Cilium) ¿Por qué sucedió? ¿Qué contenedores, qué veredicto? Análisis de causa principal, tendencias históricas, cumplimiento Log Analytics área de trabajo (ContainerNetworkLogs tabla), paneles del portal de Azure o cualquier recopilador compatible con OpenTelemetry (Splunk, Datadog, etc.)
Registros de red de contenedor (a petición)(solo Cilium) ¿Qué está sucediendo ahora? Depuración en tiempo real durante un incidente activo Hubble CLI, Hubble UI
Filtrado de métricas(solo Cilium) ¿Qué señales necesito realmente? Definición de ámbito para cargas de trabajo críticas, control de costes ContainerNetworkMetric CRD
Filtros de registro y agregación(solo Cilium) ¿Qué flujos necesito realmente? Limitación de la captura de registros a tráfico crítico, control de costos ContainerNetworkLog CRD
Container Network Insights Agent(Preview) ¿Dónde empiezo? Análisis de causas raíz impulsado por IA a través de métricas, flujos de Hubble, políticas de Cilium, CoreDNS y contadores de kernel y NIC a nivel de host Aplicación web en clúster, a la que se accede a través del explorador

Nota:

Los registros de red de contenedor (almacenados y a petición), el CRD, el ContainerNetworkLog filtrado de registros y la agregación de registros de flujo requieren el plano de datos de Cilium. En los clústeres que no son de Cilium, use métricas de red de contenedor para la evaluación y recurra a la telemetría de red a nivel de clúster para una investigación más profunda.

Para obtener una referencia de características más profunda, consulte Métricas de red de contenedor, Registros de red de contenedor y Configuración del filtrado de métricas.

Flujo de solución de problemas estándar

Use este bucle para cualquier incidente de red:

  1. Comience en los paneles de métricas. Confirme la anomalía: un aumento repentino de caídas, fallos, reinicios de TCP o fallos de DNS. Identifique el nodo, el espacio de nombres o la carga de trabajo afectados.
  2. Cambio a registros almacenados. Filtra la tabla ContainerNetworkLogs por el espacio de nombres y la ventana de tiempo del paso 1. Los registros indican el veredicto, el motivo de rechazo, las cargas de trabajo de origen y destino, y los códigos de estado L7 que las métricas no llevan.
  3. Transmita en vivo con registros bajo demanda. Si el problema es intermitente o ya se ha corregido en los datos almacenados, use la CLI de Azure o la interfaz de usuario de Docker para capturar flujos activos para esa carga de trabajo.
  4. Valide la corrección. Vuelva a comprobar el mismo panel de métricas y vuelva a ejecutar la misma consulta KQL. La anomalía debería desaparecer.
  5. Colección de melodías. Si recopiló en exceso durante el incidente, reduzca el alcance de su ContainerNetworkLog CRD o aplique un ContainerNetworkMetric filtro para capturar solo lo que necesita en el futuro.

Tip

¿Prefiere describir el problema en lugar de navegar por los paneles? Container Network Insights Agent (versión preliminar) automatiza los pasos 1 a 3 clasificando su problema, recopilando evidencia a través de kubectl, Cilium, Hubble, CoreDNS, y estadísticas de red a nivel de host, y devolviendo un RCA estructurado con comandos correctivos. Complementa esta guía en lugar de reemplazarla: el agente le ofrece un primer paso rápido; los cuadernos de estrategias aquí le permiten validar o profundizar. El agente es de solo lectura; usted deberá aplicar la corrección por su cuenta.

Nota:

Las métricas de ACNS no miden la latencia. Utilice las métricas de rendimiento de aplicaciones de Azure Monitor o la telemetría de la malla de servicio para el análisis de latencia. ACNS expone el volumen de tráfico, los recuentos de caídas, los motivos de caídas, los estados TCP, los reinicios de TCP, los recuentos de consultas y respuestas DNS, y los códigos y veredictos de los flujos L4/L7.

Tableros de control integrados de un vistazo

Configúrelos una vez con Configurar la observabilidad de la red de contenedores. Se hará referencia a ellos en las guías.

Panel de control Use cuando necesite...
Clústeres Obtenga una vista global de los bytes y paquetes reenviados y descartados por nodo.
DNS (clúster) Detectar problemas de DNS en todo el clúster.
DNS (carga de trabajo) Explore en profundidad el comportamiento de DNS de un elemento Deployment/DaemonSet (por ejemplo, CoreDNS).
Deterioro (de carga de trabajo) Consulte la tasa de caída, el motivo y la dirección de una carga de trabajo específica.
Pod Flows (Namespace) Busque cuáles pods en un namespace envían o reciben la mayor parte del tráfico o las pérdidas.
Flujos de Pod (Carga de Trabajo) Explore en profundidad los flujos L4/L7 de una carga de trabajo, incluido el restablecimiento de TCP.
Flujos de Nivel 7 (Espacio de Nombres / Carga de Trabajo) Inspeccione los flujos HTTP, gRPC y Kafka. Solo el plano de datos de Cilium requiere una directiva L7.
Registros de flujo/registros de flujo (tráfico externo) Visualice los registros de red de contenedor almacenados en Azure portal o Grafana.

Guía 1: Diagnóstico de errores de resolución DNS

Síntoma. Los pods registran errores como DNS_PROBE_FINISHED_NXDOMAIN, SERVFAILo se bloquean al resolver nombres de servicio.

Gol. Identifique si el error es ascendente (CoreDNS o solucionador externo), controlado por directivas (denegación de FQDN) o específico de la carga de trabajo.

Paso 1: Confirmar la anomalía en las métricas de DNS

Abra el panel DNS (clúster). Busque cambios repentinos en el volumen de solicitudes, el volumen de respuesta o las solicitudes que faltan %. Los paneles de resumen muestran las consultas más comunes, los códigos de respuesta más comunes y los nodos que generan más errores.

Captura de pantalla del panel del clúster DNS que resume las solicitudes, las respuestas, los errores principales y los nodos ruidosos.

Qué buscar: Aumento sostenido de las respuestas de error, una caída en las respuestas correctas o un único nodo que domina el recuento de errores. Anote la marca de tiempo de la anomalía.

Paso 2: Identificar los pods más ruidosos

Desplácese hacia abajo en el mismo panel hasta el panel que clasifica los pods según los errores DNS en todos los namespaces. Las entradas principales son los sospechosos iniciales.

Captura de pantalla del panel que muestra los pods principales que generan errores de DNS en todos los espacios de nombres.

Punto de decisión.

  • Si los errores se concentran en pods de CoreDNS, vaya al panel DNS (carga de trabajo) con kube-system / coredns seleccionado: CoreDNS o su solucionador ascendente es el problema.
  • Si los errores se concentran en una carga de trabajo de aplicación, esa carga de trabajo genera consultas incorrectas o se deniega mediante una directiva de FQDN.

Paso 3: Explorar en profundidad la carga de trabajo afectada

Abra el panel DNS (Workload) para la carga de trabajo que identificó.

  • Paneles solicitudes DNS/Respuestas DNS. Un alto Porcentaje de Solicitudes sin Respuesta indica tiempos de espera ascendentes o una sobrecarga de consultas.

    Captura de pantalla de las tendencias de solicitudes y respuestas DNS a nivel de carga de trabajo con un pico visible en torno al momento del incidente.

  • Errores de DNS por tipo. Haga coincidir el pico con un código:

    • NXDOMAIN : nombre de dominio incorrecto o obsoleto en la configuración de la aplicación.
    • SERVFAIL — problema de resolución ascendente.
    • Consulta rechazada — discrepancia de directiva FQDN o configuración de DNS.

    Captura de pantalla de los errores de DNS desglosados por tipo, que muestra un pico en los errores rechazados por consulta.

  • Direcciones IP de respuesta DNS devueltas. Confirma la tasa de resolución exitosa. Normalmente, una pérdida significa que CoreDNS no puede alcanzar el servidor upstream; un aumento repentino puede indicar una tormenta de consultas.

  • Tabla de respuesta DNS. Utilice esto para detectar patrones como "fallan los registros A, pero los registros AAAA son correctos", lo que suele indicar una mala configuración de pila en entornos solo IPv4.

    Captura de pantalla de la tabla de respuesta DNS desglosada por tipo de consulta y código devuelto.

Paso 4: Confirmar con registros almacenados

Ejecute esta consulta KQL en el área de trabajo de Log Analytics para exponer patrones de error de DNS. Las filas agregadas conservan Verdict, los espacios de nombres, las cargas de trabajo y Layer7.dns.rcode, por lo que esta consulta funciona con la tabla (agregada) predeterminada: ContainerNetworkLogs

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| extend L4 = parse_json(Layer4), L7 = parse_json(Layer7)
| where L4.UDP.destination_port == 53
| where Reply == true
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name),
         DnsRcode    = tostring(L7.dns.rcode)
| where DnsRcode != "NOERROR"
| summarize ResponseCount = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SourceNamespace, SrcWorkload, DestinationNamespace, DstWorkload, DnsRcode, Verdict
| order by ResponseCount desc

Reemplace <start-time> y <end-time> por marcas de tiempo con el formato 2026-04-30T15:00:00Z.

Qué comprobar en los resultados:

  • Veredicto. DROPPED significa que un FQDN o una directiva de red bloquean la consulta. FORWARDED con un valor que no es NOERRORDnsRcode (por ejemplo, NXDOMAIN, SERVFAIL) significa que el resolutor ascendente devolvió un error.
  • Cargas de trabajo de origen o destino. Confirme que el tráfico se dirige a la carga de trabajo de CoreDNS prevista.
  • DnsRcode. El código de respuesta DNS identifica el modo de error de un vistazo.

Nota:

El dominio consultado real (Layer7.dns.query) y las direcciones IP de los pods individuales no están incluidos en la clave de agregación, por lo que se eliminan de las filas agregadas. Para recuperarlos, cambie a los registros a petición (consulte el paso 5).

También puede visualizar los mismos flujos en el portal de Azure en AKS cluster>Insights>Networking>Flow Logs.

Captura de pantalla de la vista del panel del registro de flujo filtrada por errores de DNS.

Paso 5: Reproducir en directo si el problema es intermitente

Si el pico ya se ha superado y no puede capturarse en los registros almacenados, use la Hubble CLI bajo demanda:

hubble observe --namespace <ns> --port 53 --type l7 --follow

Captura de pantalla de la CLI de Hubble transmitiendo flujos DNS en directo.

Paso 6: Validar la corrección

Después de actualizar la directiva FQDN, corregir la configuración de la aplicación o escalar CoreDNS, vuelva a abrir el panel DNS (carga de trabajo). La tasa de errores debe disminuir en un minuto o dos. Vuelva a ejecutar la consulta KQL para el mismo período de tiempo para confirmar que las consultas con errores han desaparecido.

Nota:

Las métricas de DNS en clústeres de Cilium requieren una directiva de red FQDN de Cilium. Consulte Configuración de una directiva FQDN. En los planos de datos que no son de Cilium, las métricas dns se recopilan de forma predeterminada.


Guía de estrategias 2: Investigación de paquetes perdidos

Síntoma. Los servicios no pueden comunicarse entre sí. Se produce un error en los sondeos. El tiempo de espera de las conexiones se agota. Los contadores de caída aumentan en los paneles de control.

Gol. Identifique si las caídas son causadas por la directiva de red, el agotamiento del seguimiento de conexiones o los problemas de conectividad ascendentes, y qué carga de trabajo es responsable.

Paso 1: Localizar las pérdidas en el espacio de nombres

Abra Flujos de Pod (Namespace) Los heatmaps muestran namespaces y pods con las tasas de caída salientes y entrantes más altas.

Captura de pantalla del panel Flujos de Pod (espacio de nombres) que resume los espacios de nombres con los ratios de pérdida más altos.

Las celdas más brillantes indican tasas de caída más altas. Anote el espacio de nombres y la ventana de tiempo.

Paso 2: Explorar en profundidad la carga de trabajo afectada

Abre Drops (carga de trabajo) y selecciona la carga de trabajo que identificaste.

  • Captura de carga de trabajo muestra caídas máximas/mínimas de paquetes salientes por segundo. Utilícelo para evaluar la gravedad.

    Captura de pantalla del panel Instantánea de la carga de trabajo que muestra las tasas de descarte salientes máximas y mínimas.

  • Tráfico de red descartado por motivo es el panel más importante. El motivo le indica qué corregir:

    • Directiva denegada : NetworkPolicy o CiliumNetworkPolicy está bloqueando el tráfico.
    • CT: Error de inserción de mapa — la tabla de seguimiento de conexiones está llena; escalar el nodo o reducir el volumen de conexiones.
    • Protocolo L3 no admitido/ Paquete no válido : la aplicación o el proxy envían tráfico con formato incorrecto.

    Captura de pantalla del tráfico descartado, desglosado por motivos, donde 'denegado por política' es la causa dominante.

  • Mapa térmico de caídas entrantes/salientes. Identifica qué pares de pods específicos pierden tráfico.

    Captura de pantalla de un mapa térmico de caídas entrantes en los pods de destino principales.

  • Caídas totales acumuladas por "Pod" de origen. Rank ordena a los delincuentes para que sepa qué réplica examinar primero.

    Captura de pantalla del total apilado de caídas salientes agrupadas por pod de origen.

Paso 3: Confirmar los flujos eliminados en los registros guardados

Busque las cargas de trabajo exactas de origen y destino del tráfico descartado. Verdict, DropReason, los espacios de nombres y las cargas de trabajo están en la clave de agregación, por lo tanto, esta consulta funciona con los datos agregados.

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| where Verdict == "DROPPED"
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| summarize DropCount = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SourceNamespace, SrcWorkload, DestinationNamespace, DstWorkload, DropReason, bin(TimeGenerated, 5m)
| order by TimeGenerated desc, DropCount desc

Restrinja a un espacio de nombres una vez que lo haya identificado:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| where Verdict == "DROPPED"
| where SourceNamespace == "<namespace-name>"
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| summarize DropCount = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SrcWorkload, DestinationNamespace, DstWorkload, DropReason, TrafficDirection
| order by DropCount desc

El panel Flow Logs del portal de Azure muestra los mismos datos visualmente, incluido un gráfico de dependencias de servicio que resalta las rutas de acceso bloqueadas.

Captura de pantalla del panel registros de flujo y registros de errores con una separación clara entre los flujos reenviados y eliminados.

Paso 4: Comprobación cruzada con directivas

Una vez que conozca el pod de origen y el pod de destino:

kubectl get netpol,cnp -A
kubectl describe cnp -n <namespace> <policy-name>

Comparar el flujo fallido contra las reglas de entrada/salida. La causa más común es una política de denegación predeterminada agregada sin una regla de permiso para una ruta de acceso legítima.

Paso 5: Validar la corrección

Después de ajustar la política, el Dropped Traffic by Reason gráfico debe quedar plano para política denegada. Vuelva a ejecutar la consulta KQL: DROPPED deberían dejar de aparecer los veredictos para ese par de origen/destino.

Tip

Si está investigando un incidente activo y los registros almacenados no están habilitados, ejecute hubble observe --verdict DROPPED --namespace <ns> para transmitir datos en tiempo real sin cambiar ninguna configuración del clúster.


Manual de estrategias 3: Encontrar desequilibrios de tráfico y pods calientes

Síntoma. Algunos pods de una implementación saturan la CPU o la red, mientras que otros están inactivos. Los reinicios de TCP aumentan. Los informes de latencia proceden de los usuarios (la latencia en sí no es visible en las métricas de ACNS; consulte la nota del modelo mental).

Gol. Identifique qué pods llevan tráfico desproporcionado y si los restablecimientos indican sobrecarga o configuración de carga mal equilibrada.

Paso 1: Comparar el tráfico a nivel de pod

Abra Flujos de Pod (carga de trabajo). La instantánea de carga de trabajo resume el tráfico saliente y entrante, así como los descartes.

Captura de pantalla de la instantánea de carga de trabajo que muestra el tráfico entrante y saliente total de una carga de trabajo.

El panel de tráfico por tipo de trazado muestra el patrón del tráfico a lo largo del tiempo. Una amplia brecha entre el volumen saliente y entrante suele apuntar a un cuello de botella en el flujo descendente.

Captura de pantalla del tráfico saliente desglosado por tipo de seguimiento a lo largo del tiempo.

Paso 2: Detectar pods activos con mapas térmicos

Los heatmaps a nivel de pod hacen evidente el desequilibrio. Si un pod (por ejemplo, default/tcp-client-0) aparece en los mapas térmicos salientes y entrantes con celdas que son significativamente más oscuras que las de sus réplicas, el tráfico se concentra allí.

Captura de pantalla de mapas térmicos en paralelo del tráfico saliente y entrante que muestra un pod que controla la mayor parte del tráfico.

Causas comunes:

  • Fijación de clientes de servicio sessionAffinity: ClientIP a un pod.
  • Servicio sin encabezado con resolución DNS pegajosa.
  • Hash del equilibrador de carga externo en un campo de cardinalidad baja.

Paso 3: Uso de restablecimientos de TCP como señal de saturación

Abra los paneles de métricas de restablecimiento de TCP .

Captura de pantalla de los paneles de resumen de métricas de restablecimiento de TCP.

  • Mapa térmico de TCP RST saliente por pod de origen. Un pod de origen caliente que también genera RST está sobrecargado; la aplicación cierra las conexiones agresivamente.

    Captura de pantalla de un mapa térmico de reinicios de TCP salientes concentrados en un pod de origen.

  • Mapa térmico de TCP RST entrante por pod de destino. Normalmente, un pod que recibe RSTs de muchos orígenes significa que no puede aceptar nuevas conexiones lo suficientemente rápido (cola de espera llena, escucha lenta).

    Captura de pantalla de un mapa térmico de los restablecimientos TCP entrantes en los pods de destino principales.

  • RST total apilado por origen o destino. Las tendencias a lo largo del tiempo indican si los restablecimientos son un incidente o un nuevo estado estable.

Paso 4: Confirmar con registros

Identifique las cargas de trabajo más ocupadas por volumen de flujo total. Use las columnas de recuento de flujos agregados en lugar de count(), que solo cuenta las filas agregadas, no los flujos subyacentes:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| extend SrcWorkload = tostring(SourceWorkloads[0].name)
| summarize TotalFlows = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SourceNamespace, SrcWorkload
| top 10 by TotalFlows desc

Nota:

Las marcas TCP por paquete (como RST) no forman parte de la clave de agregación, por lo que se quitan de las filas agregadas en ContainerNetworkLogs. Para investigar los restablecimientos de TCP a nivel de flujo, use los paneles de restablecimiento de TCP anteriores más la ruta de registros bajo demanda: transmita en vivo flujos RST con hubble observe --type trace --verdict FORWARDED --tcp-flags RST.

Paso 5: Validar la corrección

Después de escalar la carga de trabajo, reequilibrar el servicio o corregir las reglas de afinidad, el mapa térmico debería mostrar un brillo más uniforme en todos los pods y la tasa de restablecimiento de TCP debería disminuir.


Cuaderno de estrategias 4: Supervisión del estado de la red en todo el clúster

Úselo cuando necesite una vista de flota: planificación de capacidad, tableros de guardia o una comprobación de estado rápida en muchos clústeres.

Abra Kubernetes/Networking/Clusters.

Captura de pantalla de la vista de flota del panel de control de Clústeres donde se reenvían bytes y paquetes a través de todos los nodos.

Señales para ver y lo que significan:

Panel Esté atento a Causa probable
Bytes/Paquetes reenviados Acantilados o picos repentinos Cuello de botella o reinicio de la carga de trabajo
Bytes/Paquetes descartados (clúster) Subida sostenida Regresión de políticas o enlace saturado
Bytes/paquetes descartados por motivo Nueva razón que aparece Nuevo problema de configuración incorrecta o de nivel de kernel
Bytes/Paquetes Descartados por Nodo Dominación de un solo nodo Hardware local de nodo, configuración incorrecta o vecino ruidoso
Distribución del estado de conexión TCP Exceso SYN_SENT o TIME_WAIT Errores de conectividad o renovación de sockets de conexiones de corta duración

Captura de pantalla de los bytes y paquetes de nivel de clúster descartados a lo largo del tiempo.

Captura de pantalla de bytes descartados agrupados por motivo de descarte.

Captura de pantalla de la distribución de estados de conexión TCP en el clúster.

Cuando algo de este panel parezca incorrecto, vaya al cuaderno de estrategias correspondiente (Cuaderno de estrategias 1 para DNS, Cuaderno de estrategias 2 para caídas, Cuaderno de estrategias 3 para pods activos).


Cuaderno de estrategias 5: Diagnóstico de errores de capa de aplicación (L7)

Síntoma. Aumento de las tasas de error HTTP 4xx/5xx. Se produce un error en las llamadas a gRPC. Los consumidores de Kafka tienen retrasos. Disponible en clústeres de Cilium con la aplicación de directivas L7 habilitada y una CiliumNetworkPolicy que incluye reglas L7 , consulte Configuración de una directiva de nivel 7.

Gol. Identifique si los errores L7 proceden de clientes mal configurados, errores del lado servidor o flujos denegados.

Nota:

La aplicación de L7 requiere que se cree o actualice el clúster con --acns-advanced-networkpolicies L7. La L7 configuración también habilita el filtrado de FQDN. Las reglas L7 no se admiten en CiliumClusterwideNetworkPolicy (CCNP) y el tráfico L7 fluye a través de un proxy de Envoy que puede agregar latencia por encima de aproximadamente 3000 solicitudes por segundo por nodo. Consulte consideraciones de políticas L7.

Paso 1: Abrir el panel L7

Use Kubernetes/Networking/L7 (Workload) para un único servicio o L7 (Namespace) para un inquilino completo.

Captura de pantalla del panel de tráfico L7 que resume los flujos HTTP, gRPC y Kafka reenviados y eliminados.

Paso 2: Separación del tráfico HTTP descartado frente al reenviado

El panel de veredictos divide el tráfico HTTP en flujos reenviados y eliminados. Un pico en HTTP descartado normalmente significa que CiliumNetworkPolicy está denegando la solicitud en L7 (por ejemplo, bloquear una ruta de acceso o un método).

Captura de pantalla del tráfico HTTP saliente dividido por veredicto.

Paso 3: Realizar un seguimiento de los códigos de estado a lo largo del tiempo

El panel de código de estado indica si los errores son del lado cliente o del lado servidor. Un aumento en los códigos de error HTTP 4xx apunta a entradas incorrectas, tokens expirados o rutas de acceso denegadas. Aumento en los puntos 5xx en los errores de back-end.

Captura de pantalla de las solicitudes HTTP salientes por método y código de estado a lo largo del tiempo.

Paso 4: Buscar los pods problemáticos

El mapa térmico 4xx muestra qué pods de origen generan la mayoría de las solicitudes con errores. Normalmente, un único pod que brilla con intensidad significa un bucle de reintento de cliente atascado o una réplica configurada incorrectamente.

Captura de pantalla de un mapa térmico de solicitudes HTTP que devuelven errores 4xx, agrupados por pod de origen.

Captura de pantalla de los pods de origen principales por volumen de solicitudes HTTP junto con un mapa térmico de solicitudes descartadas.

Paso 5: Confirmar con KQL

Extraiga el tráfico HTTP desglosado por código de estado. Layer7.http.code forma parte de la clave de agregación, por lo que funciona con las filas agregadas:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| extend L7 = parse_json(Layer7)
| where isnotnull(L7.http)
| extend StatusCode  = tostring(L7.http.code),
         SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| where StatusCode startswith "4" or StatusCode startswith "5"
| summarize ErrorFlows = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount),
            UniqueCodes = dcount(StatusCode)
    by SrcWorkload, DstWorkload, StatusCode
| order by ErrorFlows desc

Para gRPC y Kafka, Layer7 lleva la carga específica del protocolo pero solo http.code y dns.rcode son claves de agregación. Filtre por Verdict y la identidad de la carga de trabajo y use registros a petición cuando necesite el método gRPC o el tema de Kafka:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| where FlowType == "L7"
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| where Verdict == "DROPPED"
| summarize DroppedFlows = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SrcWorkload, DstWorkload
| order by DroppedFlows desc

Nota:

Los atributos detallados de la capa L7 (direcciones URL HTTP, métodos gRPC, temas de Kafka, nombres de consulta DNS) no están en la clave de agregación y se eliminan de las filas agregadas. Utilice los flujos de Hubble a petición para ese nivel de detalle.

En qué centrarse durante la RCA L7

  • Volumen y forma del tráfico. Usar mapas térmicos para encontrar desequilibrio; Una réplica activa suele explicar la tasa de errores.
  • Tendencia del código de estado. 4xx frente a 5xx limita la investigación al lado cliente o servidor.
  • Veredicto.Quitado Los flujos L7 significan que una directiva L7 rechaza la solicitud; lea la directiva y confirme la intención.

Análisis en profundidad de características (cuándo utilizar cada una)

Use esta sección como referencia rápida una vez que conozca los cuadernos de estrategias.

Métricas de red de contenedor

  • Use para: detección de anomalías, paneles, alertas, planeamiento de capacidad.
  • Omitir para: causa raíz que requiere identificación (qué pod, qué ruta, qué veredicto).
  • Granularidad: nivel de nodo en todos los planos de datos; nivel de pod en Linux.
  • Cargas de trabajo sensibles a los costos: aplique el filtrado de métricas en clústeres de Cilium para mantener solo los espacios de nombres, las etiquetas y los tipos de métricas que le interesan. El filtrado se produce antes del raspado, por lo que las series no deseadas nunca llegan a Prometheus.

Registros de red de contenedores (almacenados)

  • Use para: análisis de causa raíz, tendencias históricas, cumplimiento/auditoría.

  • Plano de datos:solo Cilium. Los registros almacenados no están disponibles en clústeres que no son de Cilium.

  • Paso obligatorio: defina un ContainerNetworkLog CRD que seleccione el tráfico que desee. Sin él, no se recopilan registros. Consulte Configurar registros de red del contenedor.

  • Donde llegan los registros: de forma predeterminada, Cilium escribe registros de flujo en /var/log/acns/hubble/events.log en cada nodo (50 MB de búfer rotativo). Desde allí, tiene dos opciones de almacenamiento:

    • Azure Log Analytics (administrado, recomendado): Container Insights envía registros a la tabla ContainerNetworkLogs para consultas KQL y paneles integrados del portal de Azure.
    • Traiga su propio recopilador: dirija un agente compatible con OpenTelemetry (Splunk, Datadog, Elastic, cualquier recopilador de OTel) hacia la ruta de acceso del registro de host para reenviar flujos a su pila de observabilidad existente en lugar de Log Analytics o además de éste.
  • Control de costos: la agregación de los registros de flujo agrupa flujos similares en una ventana de 30 segundos, conservando patrones mientras reduce el volumen. Combina con includeFilters estrecho para obtener los mejores resultados.

  • Visualización: utiliza los Flow Logs - Analytics Tier o Flow Logs - Basic Tier en Azure>Insights>Containers>Networking.

    Captura de pantalla del panel de resumen de estadísticas del registro de flujo y del gráfico de dependencias del servicio.

    Captura de pantalla del panel de filtros del registro de flujo para filtrar por protocolo, espacio de nombres o veredicto.

Registros de red de contenedor (a petición)

  • Se usa para: incidentes activos, problemas intermitentes, investigación ad hoc sin cambiar la configuración de recopilación.

  • Plano de datos: Cilium únicamente.

  • Herramientas: CLI de Hubble para el filtrado de terminales; Interfaz de usuario de Hubble para mapas de servicio a servicio visuales.

  • Sin almacenamiento persistente, sin costo adicional, sin configuración más allá de habilitar ACNS.

    Captura de pantalla de la interfaz de usuario de Hubble que muestra la visualización del flujo de servicio a servicio.

Filtrado de métricas (clústeres de Cilium)

Aplique un ContainerNetworkMetric CRD para controlar qué métricas de Hubble se exportan por nodo. Resulta útil cuando necesita una amplia observabilidad en algunos espacios de nombres críticos, pero no quiere pagar por series de flujo de cardinalidad alta en todos ellos.

Patrones comunes:

  • Mantener DNS y eliminar las métricas en todo el clúster; restringir las métricas de flujo a los espacios de nombres de producción.
  • Excluya los espacios de nombres de sistema de gran volumen como kube-system de las métricas de flujo.
  • Configure los espacios de nombres de inquilino en sus propios bloques de filtros.

Para ver ejemplos completos de CRD, consulte Configuración del filtrado de métricas de red de contenedor.


procedimientos recomendados

  • Comience ancho y luego estrecho. Habilite registros y métricas generales durante unos días, revise lo que realmente usa, luego ajuste ContainerNetworkLog y ContainerNetworkMetric los filtros.
  • Mantenga las ventanas temporales de métricas y registro alineadas. Al investigar un incidente, use la misma hora de inicio y finalización en el panel y en la consulta de KQL para que las señales se correlacionen claramente.
  • Se recomienda preferir los paneles preconstruidos. Tratan las preguntas más comunes. Normalmente, los paneles personalizados solo se necesitan una vez que haya pasado la evaluación inicial.
  • Clasificación ContainerNetworkLogs según necesidad. Cambie al nivel Básico para cargas de trabajo sensibles a los costos; use el panel de nivel Básico coincidente. Consulte tablas de planes de Log Analytics.
  • Trate los registros agregados y los registros a petición como complementos. Los registros agregados son excelentes para la detección de tendencias y patrones, pero omiten los detalles por flujo. Utilice a petición (Hubble) para la inspección detallada.
  • Valide las correcciones con el mismo panel que ha expuesto el problema. Si el mismo panel queda inactivo después de su cambio, tiene una solución definitiva.

Dificultades habituales

  • Olvidando el ContainerNetworkLog CRD. Al habilitar los registros de red de contenedor en el clúster no se recopila nada hasta que se aplique al menos un CRD que seleccione el tráfico.
  • Intentar usar registros almacenados para incidentes en tiempo real que ya han ocurrido. Si los logs no se habilitaron antes del incidente o quedaron fuera del filtro capturado, cambie a flujos de Hubble a demanda para el próximo incidente.
  • Paneles L7 vacíos en un clúster de Cilium. Las métricas L7 requieren tanto --acns-advanced-networkpolicies L7 en el clúster como en una CiliumNetworkPolicy con reglas L7. CCNP no admite reglas L7. Consulte Aplicar directivas L7.
  • Métricas DNS vacías en Cilium. La visibilidad de DNS requiere una CiliumNetworkPolicy con una regla dns (normalmente en conjunto con toFQDNs). El proxy FQDN/DNS no es compatible con DNS local de nodo ni con DNS local de AKS; usar cualquiera de estos deshabilita el proxy de DNS y las métricas resultantes. Consulte Limitaciones de filtrado de FQDN.
  • matchPattern: "*" bloquea todos los DNS. No se admite un comodín solo. Utilice un patrón comodín con carácter de comienzo, como *.example.com o app*.example.com. Consulte Aplicación de directivas de filtrado de FQDN.

Observabilidad de red incluida con Azure Monitoring

Al habilitar el servicio administrado de Azure Monitor para Prometheus en un clúster de AKS, las métricas básicas de supervisión de red de nodos se recopilan de forma predeterminada a través del destino networkobservabilityRetina. Esto proporciona:

  • Métricas básicas de red de nivel de nodo: visibilidad esencial del tráfico de red en el nivel de nodo
  • Destinos predeterminados de Prometheus: las métricas de observabilidad de red se extraen automáticamente mediante Azure Monitor
  • Integración de Azure Monitor: integración sin problemas con Azure Monitor; las métricas se recopilan automáticamente y se pueden visualizar en Grafana
  • No se requiere ninguna configuración adicional: se habilita automáticamente cuando se configura Prometheus administrado por Azure Monitor
  • Soporte técnico de Microsoft: compatible como parte de Azure Monitor y AKS

Nota: Esto requiere que el servicio administrado de Azure Monitor para Prometheus esté habilitado en el clúster de AKS, lo que puede tener costos asociados.

Introducción: Habilite el servicio administrado de Azure Monitor para Prometheus en el clúster de AKS mediante Azure Portal o la CLI. Las métricas de observabilidad de red se recopilarán y estarán disponibles automáticamente para su visualización en Azure Managed Grafana.

Observabilidad de red con el Software de código abierto Retina

Aunque Servicios avanzados de redes de contenedores (ACNS) es una oferta de pago que proporciona funcionalidades completas de observabilidad de red, Microsoft también admite observabilidad de red con el software de código abierto Retina, una plataforma de observabilidad de red de código abierto que proporciona funcionalidades esenciales de supervisión de red.

El software de código abierto Retina es la plataforma de observabilidad de código abierto disponible en retina.sh y GitHub. Ofrece:

  • Observabilidad de red basada en eBPF: usa tecnologías eBPF para recopilar información con una sobrecarga mínima
  • Análisis profundo del tráfico con el contexto de Kubernetes: captura y análisis completos de flujos de tráfico de red con integración completa de Kubernetes
  • Recopilación de métricas avanzadas: métricas de nivel 4, métricas de DNS y funcionalidades de captura de paquetes distribuidos
  • Extensibilidad basada en complementos: personalización y ampliación de la funcionalidad a través de una arquitectura de complemento
  • Métricas compatibles con Prometheus: exportación de métricas de red completas en formato Prometheus con modos de métrica configurables
  • Captura de paquetes distribuidos: capturas de paquetes a petición en varios nodos para una solución de problemas profunda
  • Independiente de la plataforma y CNI: funciona con cualquier clúster de Kubernetes (AKS, habilitado para Arc, local), cualquier sistema operativo (Linux/Windows) y cualquier CNI
  • Soporte técnico de la comunidad: código abierto con soporte técnico y contribuciones controlados por la comunidad
  • Autoadministrado: control completo sobre la implementación y la configuración
  • Integración de Intune: se integra con la Interfaz de Cilium para obtener información de red adicional

Introducción: Implementación del sistema operativo Retina mediante gráficos de Helm o manifiestos de Kubernetes desde el repositorio oficial de Retina. Configure Prometheus y Grafana para visualizar métricas, configurar el análisis profundo del tráfico con el contexto de Kubernetes, habilitar la captura de paquetes distribuida para la solución de problemas avanzada y personalizar la funcionalidad mediante la arquitectura basada en complementos para casos de uso específicos.

Comparación de ofertas de observabilidad de red

Offering Support Cost Administración Despliegue Casos de uso
Advanced Container Networking Services (ACNS) Soporte técnico empresarial de Microsoft Servicio de Azure de pago Totalmente administrado por Microsoft Integración de Azure con un solo clic Observabilidad empresarial administrada: flujos de red de nivel de pod, métricas de nivel de pod, métricas de DNS, registros almacenados persistentes, análisis de tráfico de nivel 7, cumplimiento de directivas de seguridad de red, informes de cumplimiento, paneles avanzados de Grafana, información con tecnología de IA
Observabilidad de red (Azure Monitor) Soporte técnico de Microsoft como parte de Azure Monitor Se incluye con Prometheus administrado de Azure Monitor (se aplican los costos de Azure Monitor) Totalmente administrado por Microsoft Automático cuando está habilitado Prometheus administrado por Azure Monitor Supervisión de red de nodos: métricas de red de nivel de clúster y no de nivel de nodo, sin visibilidad de nivel de pod, sin registros almacenados, sin análisis de DNS, adecuado para la supervisión básica de la infraestructura y los usuarios que desean una observabilidad de red mínima sin configuración adicional
Software de código abierto Retina Apoyo comunitario Código abierto y gratuito Autoadministrado Configuración manual mediante Helm/manifests en cualquier clúster de Kubernetes Observabilidad avanzada no administrada: capturas de paquetes en tiempo real, recopilación de métricas personalizadas, análisis de red profundo basado en eBPF, integración de Azure, implementaciones multinube, canalizaciones de observabilidad personalizadas, depuración avanzada con integración tcpdump/Wireshark y entornos de desarrollo y pruebas

Más información

Servicios avanzados de redes de contenedores (ACNS)

Diagnóstico controlado por inteligencia artificial

Seguridad de red de contenedor (Cilium)

Plano de datos y plataforma

Herramientas de código abierto