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
-
-
Abra la consola de Amazon EKS
. -
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.
-
Elija la pestaña Complementos.
-
Seleccione la casilla situada en la parte superior derecha del cuadro y, a continuación, elija Edit (Editar).
-
En la página Configurar el
nombre del complemento
:-
Seleccione la versión
v1.14.0-eksbuild.3
o posterior en la lista desplegable Versión. -
Seleccione Ajustes de configuración opcionales.
-
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.
- AWS CLI
-
-
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.-
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.-
Abra el
DaemonSet
deaws-node
en el editor.kubectl edit daemonset -n kube-system aws-node
-
Sustituya el
false
portrue
en el argumento del comando--enable-policy-event-logs=false
en elargs:
del contenedoraws-network-policy-agent
en el manifiesto del daemonset deaws-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/
y, en el caso de los clústeres K8S autoadministrados, los registros se colocarán encluster-name
/cluster//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
-
-
Abra la consola de Amazon EKS
. -
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.
-
Elija la pestaña Complementos.
-
Seleccione la casilla situada en la parte superior derecha del cuadro y, a continuación, elija Edit (Editar).
-
En la página Configurar el
nombre del complemento
:-
Seleccione la versión
v1.14.0-eksbuild.3
o posterior en la lista desplegable Versión. -
Seleccione Ajustes de configuración opcionales.
-
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
-
-
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.-
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
-
-
Abra el
DaemonSet
deaws-node
en el editor.kubectl edit daemonset -n kube-system aws-node
-
Sustituya
false
portrue
en los dos argumentos de comando--enable-policy-event-logs=false
y--enable-cloudwatch-logs=false
deargs:
del contenedoraws-network-policy-agent
en el manifiesto del daemonset deaws-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.