Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- 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.
- Cambio a registros almacenados. Filtra la tabla
ContainerNetworkLogspor 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. - 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.
- 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.
- Colección de melodías. Si recopiló en exceso durante el incidente, reduzca el alcance de su
ContainerNetworkLogCRD o aplique unContainerNetworkMetricfiltro 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.
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.
Punto de decisión.
- Si los errores se concentran en pods de CoreDNS, vaya al panel DNS (carga de trabajo) con
kube-system / corednsseleccionado: 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.
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.
-
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.
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.
DROPPEDsignifica que un FQDN o una directiva de red bloquean la consulta.FORWARDEDcon un valor que no esNOERRORDnsRcode(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.
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
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.
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.
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.
Mapa térmico de caídas entrantes/salientes. Identifica qué pares de pods específicos pierden tráfico.
Caídas totales acumuladas por "Pod" de origen. Rank ordena a los delincuentes para que sepa qué réplica examinar primero.
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.
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.
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.
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í.
Causas comunes:
- Fijación de clientes de servicio
sessionAffinity: ClientIPa 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 .
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.
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).
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.
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 |
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.
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).
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.
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.
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
ContainerNetworkLogCRD 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.logen 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
ContainerNetworkLogspara 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.
-
Azure Log Analytics (administrado, recomendado): Container Insights envía registros a la tabla
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
includeFiltersestrecho para obtener los mejores resultados.Visualización: utiliza los Flow Logs - Analytics Tier o Flow Logs - Basic Tier en Azure>Insights>Containers>Networking.
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.
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-systemde 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
ContainerNetworkLogyContainerNetworkMetriclos 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
ContainerNetworkLogssegú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
ContainerNetworkLogCRD. 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 L7en el clúster como en unaCiliumNetworkPolicycon reglas L7. CCNP no admite reglas L7. Consulte Aplicar directivas L7. - Métricas DNS vacías en Cilium. La visibilidad de DNS requiere una
CiliumNetworkPolicycon una regladns(normalmente en conjunto contoFQDNs). 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.comoapp*.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)
- Introducción a la plataforma:¿Qué es Advanced Container Networking Services para AKS?
- Configuración de observabilidad:Configuración de observabilidad de la red de contenedores
- Métricas de red de contenedor:Introducción a las métricas de red de contenedor
- Registros de red de contenedor:Visión general de los registros de red de contenedor y Configurar registros de red de contenedor
- Filtrado de métricas (Cilium):Configuración del filtrado de métricas de red de contenedor
Diagnóstico controlado por inteligencia artificial
- Container Network Insights Agent (versión preliminar):Introducción y configuración del agente
- Servidor MCP de AKS:servidor de protocolo de contexto de modelo de AKS
Seguridad de red de contenedor (Cilium)
- Filtrado FQDN:Conceptos y Aplicar políticas de filtrado FQDN
- Directiva de nivel 7:Conceptos y aplicación de directivas L7
- TLS mutuo (Cilium):Conceptos y configuración de TLS mutuo
- Cifrado en tránsito:Conceptos de cifrado de WireGuard
Plano de datos y plataforma
- Azure CNI con tecnología de Cilium:Configure Azure CNI con tecnología de Cilium
- Rendimiento del enrutamiento de host de eBPF:rendimiento de red de contenedor con enrutamiento de host eBPF
- Planes de tabla de Log Analytics:Elija un plan de tabla según el uso de datos
Herramientas de código abierto
- Retina:retina.sh y el repositorio Microsoft Retina GitHub
- Hubble (proyecto de Cilium):Documentación de Hubble