Supervisión del tráfico de cargas de trabajo de Kubernetes con la observabilidad de la red de contenedores - Amazon EKS

Ayude a mejorar esta página

Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.

Supervisión del tráfico de cargas de trabajo de Kubernetes con la observabilidad de la red de contenedores

Amazon EKS ofrece características de observabilidad de la red mejoradas que proporcionan información más detallada sobre el entorno de redes de contenedores. Estas capacidades lo ayudan a comprender, supervisar y solucionar mejor los problemas de su entorno de red de Kubernetes en AWS. Con una observabilidad de la red de contenedores mejorada, puede aprovechar las métricas detalladas relacionadas con la red para detectar mejor y proactivamente las anomalías en el tráfico de clústeres, los flujos entre zonas de disponibilidad y los servicios de AWS. Con estas métricas, puede medir el rendimiento del sistema y visualizar las métricas subyacentes con su pila de observabilidad preferida.

Además, Amazon EKS ahora ofrece visualizaciones de supervisión de la red en la consola de AWS que aceleran y mejoran la solución de problemas precisa para un análisis más rápido de la causa raíz. También puede aprovechar estas capacidades visuales para identificar los recursos con un mayor consumo y los flujos de red que causan las retransmisiones y los tiempos de espera de las retransmisiones, lo que elimina los puntos ciegos durante los incidentes.

Amazon CloudWatch Network Flow Monitor permite el uso de estas capacidades.

Casos de uso

Medición del rendimiento de la red para detectar anomalías

Varios equipos estandarizan una pila de observabilidad que les permite medir el rendimiento del sistema, visualizar las métricas del sistema y alarmarse en caso de que se supere un umbral específico. La observabilidad de la red de contenedores en EKS se alinea con esto, ya que expone las métricas clave del sistema que puede extraer para ampliar la observabilidad del rendimiento de la red del sistema en los pods y nodos de trabajo.

Uso de las visualizaciones de la consola para una solución de problemas más precisa

En caso de que se active una alarma en su sistema de supervisión, puede que desee centrarse en el clúster y la carga de trabajo en los que se originó el problema. Para ello, puede usar las visualizaciones de la consola de EKS, que reducen el ámbito de la investigación al clúster y aceleran la divulgación de los flujos de red responsables de la mayoría de las retransmisiones, los tiempos de espera de las retransmisiones y el volumen de datos transferidos.

Seguimiento de los recursos con mayor consumo en su entorno de Amazon EKS

Muchos equipos ejecutan EKS como base para sus plataformas, lo que lo convierte en el punto central de la actividad de red de un entorno de aplicaciones. Con las capacidades de supervisión de red de esta característica, puede hacer un seguimiento de las cargas de trabajo responsables de la mayor parte del tráfico (medido por el volumen de datos) dentro del clúster, entre zonas de disponibilidad, así como del tráfico a destinos externos dentro de AWS (DynamoDB y S3) y fuera de la nube de AWS (Internet o en las instalaciones). Además, puede supervisar el rendimiento de cada uno de estos flujos en función de las retransmisiones, los tiempos de espera de las retransmisiones y los datos transferidos.

Características

  1. Métricas de rendimiento: esta característica le permite extraer las métricas del sistema relacionadas con la red para los pods y los nodos de trabajo directamente desde el agente de Network Flow Monitor (NFM) que se ejecuta en su clúster de EKS.

  2. Mapa de servicios: esta característica visualiza de forma dinámica la intercomunicación entre las cargas de trabajo del clúster, lo que le permite revelar rápidamente las métricas clave (retransmisiones [RT], tiempos de espera de retransmisiones [RTO] y datos transferidos [DT] asociadas a los flujos de red entre los módulos que se comunican.

  3. Tabla de flujos: con esta tabla, puede supervisar los recursos con mayor consumo en las cargas de trabajo de Kubernetes de su clúster desde tres ángulos diferentes: vista de servicio de AWS, vista de clúster y vista externa. Para cada vista, puede ver las retransmisiones, los tiempos de espera de las retransmisiones y los datos transferidos entre el pod de origen y su destino.

    • Vista de servicio de AWS: muestra los recursos con mayor consumo de los servicios de AWS (DynamoDB y S3)

    • Vista de clúster: muestra los recursos con mayor consumo dentro del clúster (del este ← al → oeste)

    • Vista externa: muestra los recursos con mayor consumo de los destinos externos al clúster fuera de AWS

Introducción

Para comenzar, active la observabilidad de la red de contenedores en la consola de EKS para un clúster nuevo o existente. De este modo, se automatizará la creación de dependencias de Network Flow Monitor (NFM) (recursos de ámbito y supervisión). Además, tendrá que instalar el complemento Agente de Network Flow Monitor. Como alternativa, puede instalar estas dependencias mediante la AWS CLI, las API de EKS (para el complemento), las API de NFM o infraestructura como código (como Terraform). Una vez establecidas estas dependencias, puede configurar la herramienta de supervisión que prefiera para extraer las métricas de rendimiento de la red de los pods y nodos de trabajo desde el agente de NFM. Para visualizar la actividad de la red y el rendimiento de las cargas de trabajo, puede ir a la consola de EKS, en la pestaña “Red” del panel de observabilidad del clúster.

Al utilizar Network Flow Monitor en EKS, puede mantener su flujo de trabajo de observabilidad y la pila de tecnología actuales y, al mismo tiempo, aprovechar un conjunto de características adicionales que le permiten comprender y optimizar aún más la capa de red de su entorno de EKS. Puede obtener más información sobre los precios de Network Flow Monitor aquí.

Requisitos previos y notas importantes

  1. Como se mencionó anteriormente, si habilita la observabilidad de la red de contenedores desde la consola de EKS, las dependencias de recursos de NFM subyacentes (ámbito y supervisión) se crearán automáticamente en su nombre y se le guiará durante el proceso de instalación del complemento de EKS para NFM.

  2. Si desea activar esta característica mediante infraestructura como código (IaC) como Terraform, tendrá que definir las siguientes dependencias en su IaC: ámbito de NFM, supervisión de NFM, complemento de EKS para NFM. Además, tendrá que otorgar los permisos pertinentes al complemento de EKS mediante Pod Identity o roles de IAM para cuentas de servicio (IRSA).

  3. Debe ejecutar como mínimo la versión 1.1.0 para el complemento de EKS del agente de NFM.

  4. Debe utilizar la versión 6.21.0 o una posterior del Proveedor de AWS de Terraform para admitir los recursos de Network Flow Monitor.

Permisos de IAM necesarios

Complemento de EKS para el agente de NFM

Puede usar la política administrada de AWS CloudWatchNetworkFlowMonitorAgentPublishPolicy con Pod Identity. Esta política contiene permisos para que el agente de NFM envíe informes de telemetría (métricas) al punto de conexión de Network Flow Monitor.

{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "networkflowmonitor:Publish" ], "Resource" : "*" } ] }

Observabilidad de la red de contenedores en la consola de EKS

Se requieren los siguientes permisos para activar la característica y visualizar el mapa de servicios y la tabla de flujos en la consola.

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "networkflowmonitor:ListScopes", "networkflowmonitor:ListMonitors", "networkflowmonitor:GetScope", "networkflowmonitor:GetMonitor", "networkflowmonitor:CreateScope", "networkflowmonitor:CreateMonitor", "networkflowmonitor:TagResource", "networkflowmonitor:StartQueryMonitorTopContributors", "networkflowmonitor:StopQueryMonitorTopContributors", "networkflowmonitor:GetQueryStatusMonitorTopContributors", "networkflowmonitor:GetQueryResultsMonitorTopContributors" ], "Resource": "*" } ] }

Uso de la AWS CLI, la API de EKS y la API de NFM

#!/bin/bash # Script to create required Network Flow Monitor resources set -e CLUSTER_NAME="my-eks-cluster" CLUSTER_ARN="arn:aws:eks:{Region}:{Account}:cluster/{ClusterName}" REGION="us-west-2" AGENT_NAMESPACE="amazon-network-flow-monitor" echo "Creating Network Flow Monitor resources..." # Check if Network Flow Monitor agent is running in the cluster echo "Checking for Network Flow Monitor agent in cluster..." if kubectl get pods -n "$AGENT_NAMESPACE" --no-headers 2>/dev/null | grep -q "Running"; then echo "Network Flow Monitor agent exists and is running in the cluster" else echo "Network Flow Monitor agent not found. Installing as EKS addon..." aws eks create-addon \ --cluster-name "$CLUSTER_NAME" \ --addon-name "$AGENT_NAMESPACE" \ --region "$REGION" echo "Network Flow Monitor addon installation initiated" fi # Get Account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) echo "Cluster ARN: $CLUSTER_ARN" echo "Account ID: $ACCOUNT_ID" # Check for existing scope echo "Checking for existing Network Flow Monitor Scope..." EXISTING_SCOPE=$(aws networkflowmonitor list-scopes --region $REGION --query 'scopes[0].scopeArn' --output text 2>/dev/null || echo "None") if [ "$EXISTING_SCOPE" != "None" ] && [ "$EXISTING_SCOPE" != "null" ]; then echo "Using existing scope: $EXISTING_SCOPE" SCOPE_ARN=$EXISTING_SCOPE else echo "Creating new Network Flow Monitor Scope..." SCOPE_RESPONSE=$(aws networkflowmonitor create-scope \ --targets "[{\"targetIdentifier\":{\"targetId\":{\"accountId\":\"${ACCOUNT_ID}\"},\"targetType\":\"ACCOUNT\"},\"region\":\"${REGION}\"}]" \ --region $REGION \ --output json) SCOPE_ARN=$(echo $SCOPE_RESPONSE | jq -r '.scopeArn') echo "Scope created: $SCOPE_ARN" fi # Create Network Flow Monitor with EKS Cluster as local resource echo "Creating Network Flow Monitor..." MONITOR_RESPONSE=$(aws networkflowmonitor create-monitor \ --monitor-name "${CLUSTER_NAME}-monitor" \ --local-resources "type=AWS::EKS::Cluster,identifier=${CLUSTER_ARN}" \ --scope-arn "$SCOPE_ARN" \ --region $REGION \ --output json) MONITOR_ARN=$(echo $MONITOR_RESPONSE | jq -r '.monitorArn') echo "Monitor created: $MONITOR_ARN" echo "Network Flow Monitor setup complete!" echo "Monitor ARN: $MONITOR_ARN" echo "Scope ARN: $SCOPE_ARN" echo "Local Resource: AWS::EKS::Cluster (${CLUSTER_ARN})"

Uso de la infraestructura como código (IaC)

Terraform

Si utiliza Terraform para administrar su infraestructura en la nube de AWS, puede incluir las siguientes configuraciones de recursos para activar la observabilidad de la red de contenedores en su clúster.

Ámbito de NFM

data "aws_caller_identity" "current" {} resource "aws_networkflowmonitor_scope" "example" { target { region = "us-east-1" target_identifier { target_type = "ACCOUNT" target_id { account_id = data.aws_caller_identity.current.account_id } } } tags = { Name = "example" } }

Supervisión de NFM

resource "aws_networkflowmonitor_monitor" "example" { monitor_name = "eks-cluster-name-monitor" scope_arn = aws_networkflowmonitor_scope.example.scope_arn local_resource { type = "AWS::EKS::Cluster" identifier = aws_eks_cluster.example.arn } remote_resource { type = "AWS::Region" identifier = "us-east-1" # this must be the same region that the cluster is in } tags = { Name = "example" } }

Complemento de EKS para NFM

resource "aws_eks_addon" "example" { cluster_name = aws_eks_cluster.example.name addon_name = "aws-network-flow-monitoring-agent" }

¿Cómo funciona?

Métricas de desempeño

Métricas del sistema

Si ejecuta herramientas de terceros para supervisar su entorno de EKS (como Prometheus y Grafana), puede extraer las métricas del sistema compatibles directamente desde el agente de Network Flow Monitor. Estas métricas se pueden enviar a la pila de supervisión para ampliar la medición del rendimiento de la red del sistema en los pods y nodos de trabajo. Las métricas disponibles se muestran en la tabla, en Métricas del sistema compatibles.

Ilustración de la extracción de las métricas del sistema

Para activar estas métricas, anule las siguientes variables de entorno mediante las variables de configuración durante el proceso de instalación (consulte: https://aws.amazon.com/blogs/containers/amazon-eks-add-ons-advanced-configuration/):

OPEN_METRICS: Enable or disable open metrics. Disabled if not supplied Type: String Values: [“on”, “off”] OPEN_METRICS_ADDRESS: Listening IP address for open metrics endpoint. Defaults to 127.0.0.1 if not supplied Type: String OPEN_METRICS_PORT: Listening port for open metrics endpoint. Defaults to 80 if not supplied Type: Integer Range: [0..65535]

Métricas de flujos

Además, Network Flow Monitor captura los datos de los flujos de red junto con las métricas de flujos: retransmisiones, tiempos de espera de las retransmisiones y datos transferidos. Network Flow Monitor procesa estos datos y los puede ver en la consola de EKS para detectar el tráfico en el entorno del clúster y su rendimiento en función de estas métricas de flujos.

En el siguiente diagrama se muestra un flujo de trabajo en el que se pueden aprovechar ambos tipos de métricas (del sistema y de flujos) para obtener más inteligencia operativa.

Ilustración de un flujo de trabajo con diferentes métricas de rendimiento
  1. El equipo de la plataforma puede recopilar y visualizar las métricas del sistema en su pila de supervisión. Una vez implementadas las alertas, puede detectar anomalías en la red o problemas que afecten a pods o nodos de trabajo mediante las métricas del sistema del agente de NFM.

  2. Como siguiente paso, los equipos de la plataforma pueden aprovechar las visualizaciones nativas de la consola de EKS para reducir aún más el ámbito de la investigación y acelerar la solución de problemas en función de las representaciones de los flujos y las métricas asociadas.

Nota importante: La extracción de las métricas del sistema del agente de NFM y el proceso por el que el agente de NFM envía las métricas de flujos al backend de NFM son procesos independientes.

Métricas del sistema compatibles

Nota importante: las métricas del sistema se exportan en formato OpenMetrics.

Nombre de métrica Tipo Dimensiones Descripción

ingress_flow

Calibre

instance_id, iface, pod, espacio de nombres, nodo

Recuento de flujos de TCP de entrada (TcpPassiveOpens)

egress_flow

Calibre

instance_id, iface, pod, espacio de nombres, nodo

Recuento de flujos de TCP de salida (TcpActiveOpens)

ingress_packets

Calibre

instance_id, iface, pod, espacio de nombres, nodo

Recuento de paquetes de entrada (delta)

egress_packets

Calibre

instance_id, iface, pod, espacio de nombres, nodo

Recuento de paquetes de salida (delta)

ingress_bytes

Calibre

instance_id, iface, pod, espacio de nombres, nodo

Recuento de bytes de entrada (delta)

egress_bytes

Calibre

instance_id, iface, pod, espacio de nombres, nodo

Recuento de bytes de salida (delta)

bw_in_allowance_exceeded

Calibre

instance_id, eni, nodo

Paquetes puestos en cola o descartados debido al límite de ancho de banda de entrada

bw_out_allowance_exceeded

Calibre

instance_id, eni, nodo

Paquetes puestos en cola o descartados debido al límite de ancho de banda de salida

pps_allowance_exceeded

Calibre

instance_id, eni, nodo

Paquetes puestos en cola o descartados debido al límite de PPS bidireccional

conntrack_allowance_exceeded

Calibre

instance_id, eni, nodo

Paquetes descartados debido al límite de seguimiento de la conexión

linklocal_allowance_exceeded

Calibre

instance_id, eni, nodo

Paquetes descartados debido al límite de PPS del servicio de proxy local

Métricas de flujos compatibles
Nombre de métrica Tipo Descripción

Retransmisiones de TCP

Contador

Número de veces que un remitente reenvía un paquete que se perdió o se dañó durante la transmisión.

Tiempos de espera de las retransmisiones de TCP

Contador

Número de veces que un remitente inició un periodo de espera para determinar si un paquete se perdió en tránsito.

Datos (bytes) transferidos

Contador

Volumen de datos transferidos entre un origen y un destino para un flujo determinado.

Mapa de servicios y tabla de flujos

Ilustración de cómo funciona NFM con EKS
  1. Una vez instalado, el agente de Network Flow Monitor se ejecuta como un DaemonSet en cada nodo de trabajo y recopila los 500 flujos de red principales (en función del volumen de datos transferidos) cada 30 segundos.

  2. Estos flujos de red se clasifican en las siguientes categorías: Intra AZ, Inter AZ, EC2 → S3, EC2 → DynamoDB (DDB) y Sin clasificar. Cada flujo tiene 3 métricas asociadas: retransmisiones, tiempos de espera de las retransmisiones y datos transferidos (en bytes).

    • Intra AZ: flujos de red entre pods en la misma zona de disponibilidad

    • Inter AZ: flujos de red entre pods en diferentes zonas de disponibilidad

    • EC2 → S3: flujos de red de pods a S3

    • EC2 → DDB: flujos de red de pods a DDB

    • Sin clasificar: flujos de red de pods a Internet o en las instalaciones

  3. Los flujos de red de la API de contribuidores principales de Network Flow Monitor se utilizan para mejorar las siguientes experiencias en la consola de EKS:

    • Mapa de servicios: visualización de los flujos de red dentro del clúster (Intra AZ e Inter AZ).

    • Tabla de flujos: presentación en una tabla de los flujos de red dentro del clúster (Intra AZ e Inter AZ), de pods a servicios de AWS (EC2 → S3 y EC2 → DDB) y de pods a destinos externos (sin clasificar).

Los flujos de red extraídos de la API de contribuidores principales tienen un ámbito de intervalo de 1 hora y pueden incluir hasta 500 flujos de cada categoría. En el caso del mapa de servicios, esto significa que se pueden obtener y presentar hasta 1000 flujos de las categorías de flujos Intra AZ e Inter AZ en un intervalo de tiempo de 1 hora. En el caso de la tabla de flujos, esto significa que se pueden obtener y presentar hasta 3000 flujos de red de las 6 categorías de flujos de red en un intervalo de tiempo de 2 horas.

Ejemplo: mapa de servicios

Vista de implementación

Ilustración del mapa de servicios con una aplicación de comercio electrónico en la vista de implementación

Vista de pod

Ilustración del mapa de servicios con una aplicación de comercio electrónico en la vista de pod

Vista de implementación

Ilustración del mapa de servicios con una aplicación de galería de fotos en la vista de implementación

Vista de pod

Ilustración del mapa de servicios con una aplicación de galería de fotos en la vista de pod

Ejemplo: tabla de flujos

Vista de servicio de AWS

Ilustración de una vista de tabla de flujos

Vista de clúster

Ilustración de una tabla de flujos en una vista de clúster

Consideraciones y limitaciones

  • La observabilidad de la red de contenedores en EKS solo está disponible en las regiones en las que se admite Network Flow Monitor.

  • Las métricas del sistema compatibles están en formato OpenMetrics y se pueden extraer directamente del agente de Network Flow Monitor (NFM).

  • Para activar la observabilidad de la red de contenedores en EKS mediante infraestructura como código (IaC) como Terraform, es necesario definir y crear estas dependencias en las configuraciones: el ámbito de NFM, la supervisión de NFM y el agente de NFM.

  • Network Flow Monitor admite aproximadamente hasta 5 millones de flujos por minuto. Se trata de aproximadamente 5000 instancias de EC2 (nodos de trabajo de EKS) con el agente Network Flow Monitor instalado. La instalación de agentes en más de 5000 instancias puede afectar al rendimiento de la supervisión hasta que se disponga de capacidad adicional.

  • Debe ejecutar como mínimo la versión 1.1.0 para el complemento de EKS del agente de NFM.

  • Debe utilizar la versión 6.21.0 o una posterior del Proveedor de AWS de Terraform para admitir los recursos de Network Flow Monitor.

  • Para enriquecer los flujos de red con metadatos de los pods, los pods deben ejecutarse en su propio espacio de nombres de red aislado, no en el espacio de nombres de la red host.