Resolución de problemas de políticas de red en Kubernetes para Amazon EKS - Amazon EKS

Resolución de problemas de políticas de red en Kubernetes para Amazon EKS

Puede solucionar problemas e investigar las conexiones de red que utilizan políticas de red leyendo los registros de políticas de red y ejecutando las herramientas del eBPF SDK.

Registros de políticas de red

Se registra si una política de red permite o deniega las conexiones en los registros de flujo. Los registros de políticas de red de cada nodo incluyen los registros de flujo de cada pod que tiene una política de red. Los registros de políticas de red se almacenan en /var/log/aws-routed-eni/network-policy-agent.log. A continuación se muestra un ejemplo de un archivo network-policy-agent.log:

{"level":"info","timestamp":"2023-05-30T16:05:32.573Z","logger":"ebpf-client","msg":"Flow Info: ","Src IP":"192.168.87.155","Src Port":38971,"Dest IP":"64.6.160","Dest Port":53,"Proto":"UDP","Verdict":"ACCEPT"}

Los registros de políticas de red está deshabilitados de manera predeterminada. Para habilitar los registros de políticas de red, siga estos pasos:

nota

Los registros de políticas de red requieren 1 vCPU adicional para el contenedor aws-network-policy-agent del manifiesto del daemonset de aws-node del CNI de la VPC.

Complemento de Amazon EKS

AWS Management Console
  1. Abra la consola de Amazon EKS.

  2. En el panel de navegación izquierdo, seleccione Clústeres y, a continuación, seleccione el nombre del clúster para el que desea configurar el complemento CNI de Amazon VPC.

  3. Elija la pestaña Complementos.

  4. Seleccione la casilla situada en la parte superior derecha del cuadro y, a continuación, elija Edit (Editar).

  5. En la página Configurar el nombre del complemento :

    1. Seleccione la versión v1.14.0-eksbuild.3 o posterior en la lista desplegable Versión.

    2. Seleccione Ajustes de configuración opcionales.

    3. Introduzca la clave de JSON de nivel superior "nodeAgent": y el valor en un objeto con una clave "enablePolicyEventLogs": y un valor de "true" en Valores de configuración. El texto resultante debe ser un objeto JSON válido. En el siguiente ejemplo se muestra que la política de red y los registros de políticas de red están habilitados, y que estos últimos se envían a los Registros de CloudWatch:

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true" } }

En la siguiente captura de pantalla se muestra un ejemplo de este escenario.

<shared id="consolelong"/> mostrando el complemento CNI de VPC con la política de red y los Registros de CloudWatch en la configuración opcional.
AWS CLI
  1. Ejecute el siguiente comando de AWS CLI. Reemplace my-cluster por el nombre del clúster y el ARN del rol de IAM por el rol que va a usar.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"nodeAgent": {"enablePolicyEventLogs": "true"}}'

Complemento autoadministrado

Helm

Si ha instalado Amazon VPC CNI plugin for Kubernetes mediante helm, puede actualizar la configuración para escribir los registros de políticas de red.

  1. Ejecute el siguiente comando para habilitar la política de red.

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl

Si ha instalado Amazon VPC CNI plugin for Kubernetes mediante kubectl, puede actualizar la configuración para escribir los registros de políticas de red.

  1. Abra el DaemonSet de aws-node en el editor.

    kubectl edit daemonset -n kube-system aws-node
  2. Sustituya el false por true en el argumento del comando --enable-policy-event-logs=false en el args: del contenedor aws-network-policy-agent en el manifiesto del daemonset de aws-node del CNI de VPC.

    - args: - --enable-policy-event-logs=true

Enviar los registros de políticas de red a los Registros de Amazon CloudWatch

Puede supervisar los registros de políticas de red mediante servicios como los Registros de Amazon CloudWatch. Puede usar los siguientes métodos para enviar los registros de políticas de red a los Registros de CloudWatch.

En el caso de los clústeres de EKS, los registros de políticas se ubicarán en /aws/eks/cluster-name/cluster/ y, en el caso de los clústeres K8S autoadministrados, los registros se colocarán en/aws/k8s-cluster/cluster/.

Enviar los registros de políticas de red con el Amazon VPC CNI plugin for Kubernetes

Si habilita la política de red, se añade un segundo contenedor a los pods de aws-node para un agente de nodos. Este agente de nodos puede enviar los registros de políticas de red a los Registros de CloudWatch.

nota

El agente de nodos solo envía los registros de políticas de red. No se incluyen otros registros creados por el CNI de VPC.

Requisitos previos

  • Añada los siguientes permisos como una política individual o independiente al rol de IAM que está utilizando para el CNI de VPC.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

Complemento de Amazon EKS

AWS Management Console
  1. Abra la consola de Amazon EKS.

  2. En el panel de navegación izquierdo, seleccione Clústeres y, a continuación, seleccione el nombre del clúster para el que desea configurar el complemento CNI de Amazon VPC.

  3. Elija la pestaña Complementos.

  4. Seleccione la casilla situada en la parte superior derecha del cuadro y, a continuación, elija Edit (Editar).

  5. En la página Configurar el nombre del complemento :

    1. Seleccione la versión v1.14.0-eksbuild.3 o posterior en la lista desplegable Versión.

    2. Seleccione Ajustes de configuración opcionales.

    3. Introduzca la clave de JSON de nivel superior "nodeAgent": y el valor en un objeto con una clave "enableCloudWatchLogs": y un valor de "true" en Valores de configuración. El texto resultante debe ser un objeto JSON válido. En el siguiente ejemplo se muestra que la política de red y los registros de políticas de red están habilitados, y que estos últimos se envían a los Registros de CloudWatch:

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true", } }

En la siguiente captura de pantalla se muestra un ejemplo de este escenario.

+ image::images/console-cni-config-network-policy-logs-cwl.png [AWS Management Console mostrando el complemento CNI de VPC con la política de red y los Registros de CloudWatch en la configuración opcional .,scaledwidth=80%]

AWS CLI
  1. Ejecute el siguiente comando de AWS CLI. Reemplace my-cluster por el nombre del clúster y el ARN del rol de IAM por el rol que va a usar.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"nodeAgent": {"enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true"}}'

Complemento autoadministrado

Helm

Si ha instalado el Amazon VPC CNI plugin for Kubernetes mediante helm, puede actualizar la configuración para enviar los registros de políticas de red a los Registros de CloudWatch.

  1. Ejecute el siguiente comando para habilitar los registros de políticas de red y enviarlos a los Registros de CloudWatch.

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true --set nodeAgent.enableCloudWatchLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. Abra el DaemonSet de aws-node en el editor.

    kubectl edit daemonset -n kube-system aws-node
  2. Sustituya false por true en los dos argumentos de comando --enable-policy-event-logs=false y --enable-cloudwatch-logs=false de args: del contenedor aws-network-policy-agent en el manifiesto del daemonset de aws-node del CNI de la VPC.

    - args: - --enable-policy-event-logs=true - --enable-cloudwatch-logs=true

Enviar los registros de políticas de red con el daemonset de Fluent Bit

Si utiliza Fluent Bit en un daemonset para enviar registros desde sus nodos, puede agregar una configuración para incluir los registros de políticas de red de las políticas de red. Puede utilizar la siguiente configuración de ejemplo:

[INPUT] Name tail Tag eksnp.* Path /var/log/aws-routed-eni/network-policy-agent*.log Parser json DB /var/log/aws-routed-eni/flb_npagent.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10

SDK de eBPF incluido

El Amazon VPC CNI plugin for Kubernetes instala la colección de herramientas del SDK de eBPF en los nodos. Puede utilizar las herramientas del SDK de eBPF para identificar problemas con las políticas de red. Por ejemplo, el siguiente comando muestra los programas que se ejecutan en el nodo.

sudo /opt/cni/bin/aws-eks-na-cli ebpf progs

Para ejecutar este comando, puede utilizar cualquier método para conectarse al nodo.