Ajudar a melhorar esta página
Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.
Você pode usar uma política de rede do Kubernetes para restringir o tráfego de rede que entra e sai dos pods. Para obter mais informações, consulte Políticas de rede
É necessário fazer as seguintes configurações para usar esse recurso:
-
Configure aplicação de políticas na inicialização do pod. Você faz isso no contêiner
aws-node
doDaemonSet
CNI da VPC. -
Habilitar o parâmetro da política de redes para o complemento.
-
Configurar o cluster para usar as políticas de rede do Kubernetes
Antes de começar, reveja as considerações. Para ter mais informações, consulte Considerações.
Pré-requisitos
A seguir estão os pré-requisitos do recurso:
Versão mínima do cluster
Um cluster existente do Amazon EKS. Para implantar, consulte Começar a usar o Amazon EKS. O cluster deve ser da versão 1.25
ou mais recente do Kubernetes. O cluster deve estar executando uma das versões do Kubernetes e versões da plataforma listadas na tabela a seguir. Observe que qualquer versão da plataforma e do Kubernetes posterior às versões listadas também é compatível. Para verificar a versão atual do Kubernetes, substitua my-cluster
no comando a seguir pelo nome do seu cluster e execute o comando modificado:
aws eks describe-cluster --name my-cluster --query cluster.version --output text
Versão do Kubernetes | Versão da plataforma |
---|---|
|
|
|
|
|
|
Versão mínima do VPC CNI
Versão 1.14
ou mais recente do plug-in CNI da Amazon VPC para Kubernetes no cluster. É possível verificar qual é a sua versão atual com o comando a seguir.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Se a versão for anterior à 1.14
, consulte Atualização do plug-in da CNI da Amazon VPC (complemento do Amazon EKS) para atualizar para a versão 1.14
ou posterior.
Versão mínima do kernel do Linux
Os nós devem ter a versão 5.10
ou posterior do kernel do Linux. Você pode verificar qual é a sua versão atual com uname -r
. Se você usa as versões mais recentes do Amazon Linux otimizado para Amazon EKS, das AMIs do Amazon Linux otimizadas para Amazon EKS e as AMIs do Bottlerocket, elas já têm a versão do kernel exigida.
A AMI do Amazon Linux acelerada otimizada para Amazon EKS versão v20231116
ou posterior possui o kernel versão 5.10
.
Etapa 1: configurar a aplicação de políticas na inicialização dos pods
O plug-in CNI da Amazon VPC para Kubernetes configura as políticas de rede para os pods em paralelo ao provisionamento de pods. Até que todas as políticas estejam configuradas para o novo pod, os contêineres no novo pod serão iniciados com uma política de permissão padrão. Isso é denominado modo padrão. Uma política de permissão padrão significa que todo o tráfego de entrada e de saída é permitido de e para os novos pods. Por exemplo, os pods não terão nenhuma regra de firewall aplicada (todo o tráfego é permitido) até que o novo pod seja atualizado com as políticas ativas.
Com a variável NETWORK_POLICY_ENFORCING_MODE
definida como strict
, os pods que usam o plug-in CNI da VPC são iniciados com uma política de negação padrão e, em seguida, as políticas são configuradas. Isso é denominado modo estrito. No modo estrito, você deve ter uma política de rede para cada endpoint que os pods precisam acessar no cluster. Observe que esse requisito se aplica aos pods do CoreDNS. A política de negação padrão não está configurada para pods com sistemas de redes de host.
É possível alterar a política de rede padrão ao definir a variável de ambiente NETWORK_POLICY_ENFORCING_MODE
como strict
no contêiner aws-node
do DaemonSet
do plug-in CNI da VPC.
env:
- name: NETWORK_POLICY_ENFORCING_MODE
value: "strict"
Etapa 2: habilitar o parâmetro da política de redes do complemento
O recurso de política de rede usa a porta 8162
no nó para métricas por padrão. Além disso, o recurso usava uma porta 8163
para sondas de saúde. Se você executar outra aplicação nos nós ou dentro dos pods que precisa usar essas portas, a aplicação não será executada. Na versão v1.14.1
ou posterior da CNI da VPC, você pode alterar essas portas.
Use o procedimento a seguir para habilitar o parâmetro da política de redes do complemento.
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 Versão. -
Expanda Definições de configuração opcionais.
-
Insira a chave JSON
"enableNetworkPolicy":
e o valor"true"
em Valores da configuração. O texto resultante deve ser um objeto JSON válido. Se esse par de chave e valor for o único dado na caixa de texto, coloque-o entre colchetes{ }
.O seguinte exemplo tem a funcionalidade de política de rede ativada e as métricas e investigações de integridade estão configuradas com os números de porta padrão:
{ "enableNetworkPolicy": "true", "nodeAgent": { "healthProbeBindAddr": "8163", "metricsBindAddr": "8162" } }
-
Helm
Se você instalou o plug-in CNI da Amazon VPC para Kubernetes por meio do helm
, você pode atualizar a configuração para alterar as portas.
-
Execute o seguinte comando para alterar as portas. Defina o número da porta no valor da chave
nodeAgent.metricsBindAddr
ou da chavenodeAgent.healthProbeBindAddr
, respectivamente.helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 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 os números da porta nos argumentos do comando a seguir no contêiner
args:
no manifesto do daemonsetaws-network-policy-agent
do CNI doaws-node
VPC.- args: - --metrics-bind-addr=:8162 - --health-probe-bind-addr=:8163
Etapa 3: montar o sistema de arquivos Berkeley Packet Filter (BPF) em nós
É necessário montar o sistema de arquivos Berkeley Packet Filter (BPF) em cada um dos nós.
nota
Se o cluster for da versão 1.27
ou posterior, você poderá pular essa etapa, pois todas as AMIs do Amazon Linux e Bottlerocket otimizadas para o Amazon EKS 1.27
ou posterior já têm esse atributo.
Para todas as outras versões do cluster, se você atualizar o Amazon Linux otimizado para o Amazon EKS para a versão v20230703
ou posterior, ou se atualizar a AMI do Bottlerocket para a versão v1.0.2
ou posterior, poderá pular essa etapa.
-
Monte o sistema de arquivos Berkeley Packet Filter (BPF) em cada um dos nós.
sudo mount -t bpf bpffs /sys/fs/bpf
-
Em seguida, adicione o mesmo comando aos dados do usuário no modelo de inicialização para os grupos do Amazon EC2 Auto Scaling.
Etapa 4: configurar o cluster para usar as políticas de rede do Kubernetes
Configure o cluster para usar as políticas de rede do Kubernetes. É possível configurar isso para um complemento do Amazon EKS ou autogerenciado.
-
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 Versão. -
Expanda Definições de configuração opcionais.
-
Insira a chave JSON
"enableNetworkPolicy":
e o valor"true"
em Valores da configuração. O texto resultante deve ser um objeto JSON válido. Se esse par de chave e valor for o único dado na caixa de texto, coloque-o entre colchetes{ }
. O exemplo apresentado a seguir mostra que a política de rede está habilitada:{ "enableNetworkPolicy": "true" }
A captura de tela a seguir mostra um exemplo desse cenário.
-
-
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 '{"enableNetworkPolicy": "true"}'
Se você instalou o plug-in CNI da Amazon VPC para Kubernetes por meio do helm
, você pode atualizar a configuração para habilitar a política de rede.
-
Execute o comando a seguir para habilitar a política de rede.
helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
-
Abra o
amazon-vpc-cni
ConfigMap
no editor.kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
-
Adicione a linha a seguir aos
data
noConfigMap
.enable-network-policy-controller: "true"
Depois de adicionar a linha, o
ConfigMap
deverá ser semelhante ao exemplo a seguir.apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-network-policy-controller: "true"
-
Abra o
aws-node
DaemonSet
no editor.kubectl edit daemonset -n kube-system aws-node
-
Substitua
false
portrue
no argumento do comando--enable-network-policy=false
emargs:
no contêiner doaws-network-policy-agent
no manifesto do daemonset doaws-node
do VPC CNI.- args: - --enable-network-policy=true
-
Etapa 5. Próximas etapas
Depois de concluir a configuração, confirme se os pods aws-node
estão sendo executados no cluster.
kubectl get pods -n kube-system | grep 'aws-node\|amazon'
Veja um exemplo de saída abaixo.
aws-node-gmqp7 2/2 Running 1 (24h ago) 24h aws-node-prnsh 2/2 Running 1 (24h ago) 24h
Existem dois contêineres nos pods aws-node
na versão 1.14
e posteriores. Nas versões anteriores e quando a política de rede está desabilitada, há apenas um único contêiner nos pods do aws-node
.
Agora você pode implantar políticas de rede do Kubernetes no cluster.
Para implementar as políticas de rede do Kubernetes, você cria objetos de NetworkPolicy
do Kubernetes e implanta-os no cluster. Os objetos de NetworkPolicy
têm seu escopo definido como um namespace. Você implementa políticas para permitir ou negar tráfego entre os pods com base em seletores de rótulos, namespaces e intervalos de endereços IP. Para obter mais informações sobre a criação de objetos de NetworkPolicy
, consulte Políticas de rede
A aplicação dos objetos de NetworkPolicy
do Kubernetes é implementada usando o Extended Berkeley Packet Filter (eBPF). Em relação a implementações baseadas em iptables
, ele oferece menor latência e características de performance, incluindo menor utilização da CPU e prevenção de consultas sequenciais. Além disso, as sondas do eBPF fornecem acesso a dados contextuais ricos que ajudam a depurar problemas complexos no nível do kernel e a melhorar a observabilidade. O Amazon EKS é compatível com um exportador baseado no eBPF que aproveita as sondas para registrar em log os resultados da política em cada nó e exportar os dados para coletores de logs externos para auxiliar na depuração. Para obter mais informações, consulte a documentação do eBPF