Solucionar problemas de políticas de rede do Kubernetes para o Amazon EKS
Você pode solucionar problemas e investigar conexões de rede que usam políticas de rede lendo os logs de política de rede e executando ferramentas do SDK do eBPF.
Logs da política de rede
Sejam as conexões permitidas ou negadas pelas políticas de uma rede, isso é registrado nos logs de fluxo. Os logs da política de rede de cada nó incluem os logs de fluxo para todo pod que tem uma política de rede. Os logs da política de rede são armazenados em /var/log/aws-routed-eni/network-policy-agent.log
. O seguinte exemplo é de um arquivo de 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"}
Os logs de política de rede estão desabilitados por padrão. Para habilitar os logs de política de rede, siga estas etapas:
nota
Os logs de política de rede requerem uma vCPU adicional para o contêiner aws-network-policy-agent
no manifesto aws-node
do daemonset do plug-in CNI da VPC.
Complemento do Amazon EKS
- AWS Management Console
-
-
Abra o console do Amazon EKS
. -
No painel de navegação à esquerda, selecione Clusters e o nome do cluster para o qual você deseja configurar o complemento Amazon VPC CNI.
-
Escolha a guia Add-ons (Complementos).
-
Selecione a caixa no canto superior direito da caixa do complemento e depois escolha Edit (Editar).
-
Na página Configurar
nome do complemento
:-
Selecione a versão
v1.14.0-eksbuild.3
ou posterior na lista suspensa Versão. -
Expanda Definições de configuração opcionais.
-
Insira a chave JSON de mais alto nível
"nodeAgent":
e o valor é um objeto com uma chave"enablePolicyEventLogs":
e valor de"true"
em Valores da configuração. O texto resultante deve ser um objeto JSON válido. O exemplo apresentado a seguir mostra que a política de rede e os logs de política de rede estão habilitados e que os logs de política de rede são enviados para o CloudWatch Logs:{ "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true" } }
-
-
A captura de tela a seguir mostra um exemplo desse cenário.
- AWS CLI
-
-
Execute o seguinte comando da AWS CLI. Substitua
my-cluster
pelo nome do cluster e o ARN do perfil do IAM pelo perfil que você está usando.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 autogerenciado
- Helm
-
Caso tenha instalado o Amazon VPC CNI plugin for Kubernetes por meio do
helm
, você poderá atualizar a configuração para realizar a gravação dos logs de política de rede.-
Execute o comando a seguir para habilitar a política de rede.
helm upgrade --set nodeAgent.enablePolicyEventLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
-
- kubectl
-
Caso tenha instalado o Amazon VPC CNI plugin for Kubernetes por meio do
kubectl
, você poderá atualizar a configuração para realizar a gravação dos logs de política de rede.-
Abra o
aws-node
DaemonSet
no editor.kubectl edit daemonset -n kube-system aws-node
-
Substitua
false
portrue
no argumento do comando--enable-policy-event-logs=false
emargs:
no contêiner doaws-network-policy-agent
no manifesto do daemonset doaws-node
do VPC CNI.- args: - --enable-policy-event-logs=true
-
Enviar logs de política de rede para o Amazon CloudWatch Logs
Você pode monitorar os logs da política de rede usando serviços como o Amazon CloudWatch Logs. Você pode usar os métodos a seguir para enviar os logs da política de rede para o CloudWatch Logs.
Para clusters do EKS, os logs da política estarão localizados em /aws/eks/
e para clusters do K8S autogerenciados, os logs serão colocados em cluster-name
/cluster//aws/k8s-cluster/cluster
/.
Enviar logs da política de rede com o Amazon VPC CNI plugin for Kubernetes
Se você habilitar uma política de rede, um segundo contêiner será adicionado aos pods do aws-node
para um agente do nó. Esse agente do nó pode enviar os logs da política de rede para o CloudWatch Logs.
nota
Somente os logs da política de rede são enviados pelo agente do nó. Outros logs feitos pelo VPC CNI não são incluídos.
Pré-requisitos
-
Adicione as permissões a seguir como uma seção ou uma política separada ao perfil do IAM que você está usando para o VPC CNI.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
Complemento do Amazon EKS
- AWS Management Console
-
-
Abra o console do Amazon EKS
. -
No painel de navegação à esquerda, selecione Clusters e o nome do cluster para o qual você deseja configurar o complemento Amazon VPC CNI.
-
Escolha a guia Add-ons (Complementos).
-
Selecione a caixa no canto superior direito da caixa do complemento e depois escolha Edit (Editar).
-
Na página Configurar
nome do complemento
:-
Selecione a versão
v1.14.0-eksbuild.3
ou posterior na lista suspensa Versão. -
Expanda Definições de configuração opcionais.
-
Insira a chave JSON de mais alto nível
"nodeAgent":
e o valor é um objeto com uma chave"enableCloudWatchLogs":
e valor de"true"
em Valores da configuração. O texto resultante deve ser um objeto JSON válido. O exemplo apresentado a seguir mostra que a política de rede e os logs de política de rede estão habilitados e que os logs são enviados para o CloudWatch Logs:{ "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true", } }
-
A captura de tela a seguir mostra um exemplo desse cenário.
+ image::images/console-cni-config-network-policy-logs-cwl.png[AWS Management Console exibindo o complemento VPC CNI com a política de rede e os registros do CloudWatch na configuração opcional.,scaledwidth=80%]
-
- AWS CLI
-
-
Execute o seguinte comando da AWS CLI. Substitua
my-cluster
pelo nome do cluster e o ARN do perfil do IAM pelo perfil que você está usando.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 autogerenciado
- Helm
-
Se você instalou o Amazon VPC CNI plugin for Kubernetes por meio do
helm
, poderá atualizar a configuração para enviar os logs de política de rede para o CloudWatch Logs.-
Execute o comando apresentado a seguir para habilitar logs de política de rede e enviá-los ao CloudWatch Logs.
helm upgrade --set nodeAgent.enablePolicyEventLogs=true --set nodeAgent.enableCloudWatchLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
-
- kubectl
-
-
Abra o
aws-node
DaemonSet
no editor.kubectl edit daemonset -n kube-system aws-node
-
Substitua
false
portrue
nos dois argumentos do comando--enable-policy-event-logs=false
e--enable-cloudwatch-logs=false
emargs:
no contêineraws-network-policy-agent
no manifestoaws-node
do daemonset do plug-in CNI da VPC.- args: - --enable-policy-event-logs=true - --enable-cloudwatch-logs=true
-
Enviar logs de política de rede com o daemonset Fluent Bit
Se você estiver usando Fluent Bit em um daemonset para enviar os logs dos nós, poderá adicionar configurações para incluir os logs das políticas de rede. Você pode usar o seguinte exemplo de configuração:
[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 do eBPF incluído
O SDK do Amazon VPC CNI plugin for Kubernetes instala o conjunto de ferramentas do SDK do eBPF nos nós. Você pode usar as ferramentas do SDK do eBPF para identificar problemas de políticas de rede. Por exemplo, o comando a seguir lista os programas que estão sendo executados no nó.
sudo /opt/cni/bin/aws-eks-na-cli ebpf progs
Para executar esse comando, você pode usar qualquer método de conexão com o nó.