Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Escolha o link Editar esta página no GitHub, disponível no painel direito de cada página. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Caso use Pods com instâncias do Amazon EC2, é necessário configurar o Amazon VPC CNI plugin for Kubernetes para grupos de segurança
Se você usa apenas Pods do Fargate e não tem nenhum nó do Amazon EC2 no cluster, consulte Usar uma política para grupos de segurança em um Pod do Amazon EKS.
-
Verifique a versão atual de Amazon VPC CNI plugin for Kubernetes com o comando a seguir:
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Veja um exemplo de saída abaixo.
v1.7.6
Se a versão do Amazon VPC CNI plugin for Kubernetes for anterior à
1.7.7
, atualize o plugin para a versão1.7.7
ou posterior. Para ter mais informações, consulte Atribuir IPs a Pods com a CNI da Amazon VPC. -
Adicione a política do IAM gerenciada pelo AmazonEKSVPCResourceController
ao perfil de cluster que está associado ao seu cluster do Amazon EKS. A política permite que a função gerencie interfaces de rede, seus endereços IP privados e seu anexo e desprendimento de e para instâncias de rede. -
Recupere o nome do perfil do IAM do cluster e armazene-o em uma variável. Substitua
my-cluster
pelo nome do cluster.cluster_role=$(aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2)
-
Anexe a política ao perfil.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController --role-name $cluster_role
-
-
Habilite o complemento Amazon VPC CNI para gerenciar interfaces de rede para Pods, definindo a variável
ENABLE_POD_ENI
comotrue
no DaemonSetaws-node
. Depois que essa configuração estiver definida comotrue
, para cada nó no cluster, o complemento cria um recurso personalizadocninode
. O controlador de recursos da VPC cria e anexa uma interface de rede especial chamada Interface de rede com a descriçãoaws-k8s-trunk-eni
.kubectl set env daemonset aws-node -n kube-system ENABLE_POD_ENI=true
nota
A interface de rede de tronco está incluída no número máximo de interfaces de rede suportadas pelo tipo de instância. Para obter uma lista do número máximo de interfaces de rede com suporte por cada tipo de instância, consulte IP addresses per network interface per instance type (Endereços IP por interface de rede por tipo de instância) no Guia do usuário do Amazon EC2. Se o nó já tiver o número máximo de interfaces de rede padrão anexadas a ele, o controlador de recursos da VPC reservará um espaço. Você terá que reduzir seus Pods de execução o suficiente para que o controlador desconecte e exclua uma interface de rede padrão, crie a interface de rede de tronco e anexe-a à instância.
-
Você pode ver quais de seus nós possuem um recurso personalizado do
CNINode
com o comando a seguir. SeNo resources found
for retornado, aguarde alguns segundos e tente de novo. A etapa anterior requer a reinicialização do Amazon VPC CNI plugin for Kubernetes Pods`, o que leva alguns segundos.kubectl get cninode -A NAME FEATURES ip-192-168-64-141.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}] ip-192-168-7-203.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}]
Se você estiver usando versões do VPC CNI anteriores a
1.15
, rótulos de nós foram usados em vez do recursoCNINode
personalizado. Você pode ver quais do seus nós têm o rótulo de nóaws-k8s-trunk-eni
definido comotrue
com o comando a seguir. SeNo resources found
for retornado, aguarde alguns segundos e tente de novo. A etapa anterior requer a reinicialização dos Amazon VPC CNI plugin for Kubernetes Pods, o que demora vários segundos.kubectl get nodes -o wide -l vpc.amazonaws.com/has-trunk-attached=true -
Depois que a interface de rede de tronco for criada, os Pods receberão endereços IP secundários a partir das interfaces de tronco ou de rede padrão. A interface de tronco é excluída automaticamente se o nó for excluído.
Quando você implanta um grupo de segurança para um Pod em uma etapa superior, o controlador de recursos da VPC cria uma interface de rede especial chamada interface de rede da ramificação, com uma descrição de
aws-k8s-branch-eni
e associa os grupos de segurança a ela. As interfaces de rede da ramificação são criadas como um adicional para as interfaces de rede padrão e de tronco conectadas ao nó.Se você estiver usando testes de liveness ou prontidão, também precisará desabilitar o TCP early demux, de modo que o
kubelet
possa se conectar a Pods em interfaces de rede de ramificações usando TCP. Para desativar o TCP early demux, execute o seguinte comando:kubectl patch daemonset aws-node -n kube-system \ -p '{"spec": {"template": {"spec": {"initContainers": [{"env":[{"name":"DISABLE_TCP_EARLY_DEMUX","value":"true"}],"name":"aws-vpc-cni-init"}]}}}}'
nota
Se você estiver usando o
1.11.0
ou posterior do complemento Amazon VPC CNI plugin for Kubernetes e definir quePOD_SECURITY_GROUP_ENFORCING_MODE
=standard
, conforme descrito na próxima etapa, não será necessário executar o comando anterior. -
Se o cluster usar
NodeLocal DNSCache
ou se você desejar usar a política de rede do Calico com Pods que têm seus próprios grupos de segurança ou se tiver serviços do Kubernetes do tipoNodePort
eLoadBalancer
que usam destinos de instâncias com umexternalTrafficPolicy
definido comoLocal
para Pods aos quais deseja atribuir grupos de segurança, você deverá estar usando a versão1.11.0
ou posterior do complemento Amazon VPC CNI plugin for Kubernetes e habilitar a seguinte configuração:kubectl set env daemonset aws-node -n kube-system POD_SECURITY_GROUP_ENFORCING_MODE=standard
IMPORTANTE: as regras do grupo de segurança Pod não são aplicadas ao tráfego entre Pods ou entre Pods e services, como
kubelet
ounodeLocalDNS
, que estão no mesmo nó. Os pods que usam grupos de segurança diferentes no mesmo nó não podem se comunicar porque estão configurados em sub-redes diferentes, e o roteamento está desativado entre essas sub-redes. O tráfego de saída de Pods para endereços fora da VPC é o endereço de rede convertido no endereço IP da interface de rede primária da instância (a menos que você também tenha definidoAWS_VPC_K8S_CNI_EXTERNALSNAT=true
). Para esse tráfego, as regras nos grupos de segurança da interface de rede principal são utilizadas, e não as regras nos grupos de segurança do Pod’s. ** Para que essa configuração seja aplicada a Pods existentes, é necessário reiniciar os Pods ou os nós que nos quais esses Pods estão sendo executados. -
Para saber como usar uma política de grupos de segurança no Pod, consulte Usar uma política para grupos de segurança em um Pod do Amazon EKS.