Solucionar problemas de políticas de rede do Kubernetes para o Amazon EKS - Amazon EKS

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
  1. Abra o console do Amazon EKS.

  2. No painel de navegação à esquerda, selecione Clusters e o nome do cluster para o qual você deseja configurar o complemento Amazon VPC CNI.

  3. Escolha a guia Add-ons (Complementos).

  4. Selecione a caixa no canto superior direito da caixa do complemento e depois escolha Edit (Editar).

  5. Na página Configurar nome do complemento:

    1. Selecione a versão v1.14.0-eksbuild.3 ou posterior na lista suspensa Versão.

    2. Expanda Definições de configuração opcionais.

    3. 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.

<shared id="consolelong"/> mostrando o complemento VPC CNI com a política de rede e os logs do CloudWatch na configuração opcional.
AWS CLI
  1. 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.

  1. 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.

  1. Abra o aws-node DaemonSet no editor.

    kubectl edit daemonset -n kube-system aws-node
  2. Substitua false por true no argumento do comando --enable-policy-event-logs=false em args: no contêiner do aws-network-policy-agent no manifesto do daemonset do aws-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/cluster-name/cluster/ e para clusters do K8S autogerenciados, os logs serão colocados em /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
  1. Abra o console do Amazon EKS.

  2. No painel de navegação à esquerda, selecione Clusters e o nome do cluster para o qual você deseja configurar o complemento Amazon VPC CNI.

  3. Escolha a guia Add-ons (Complementos).

  4. Selecione a caixa no canto superior direito da caixa do complemento e depois escolha Edit (Editar).

  5. Na página Configurar nome do complemento:

    1. Selecione a versão v1.14.0-eksbuild.3 ou posterior na lista suspensa Versão.

    2. Expanda Definições de configuração opcionais.

    3. 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
  1. 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.

  1. 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
  1. Abra o aws-node DaemonSet no editor.

    kubectl edit daemonset -n kube-system aws-node
  2. Substitua false por true nos dois argumentos do comando --enable-policy-event-logs=false e --enable-cloudwatch-logs=false em args: no contêiner aws-network-policy-agent no manifesto aws-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ó.