Ir para o conteúdo

Como escolho sub-redes de endereço IP específicas para pods no meu cluster do Amazon EKS?

6 minuto de leitura
0

Quero usar sub-redes personalizadas ou intervalos de endereços IP para meus pods no Amazon Elastic Kubernetes Service (Amazon EKS).

Resolução

Para alocar endereços IP de pod de sub-redes diferentes das sub-redes dos seus nós de processamento, use redes personalizadas.

Ativar a rede personalizada

Antes de configurar a rede personalizada, revise os seguintes comportamentos padrão:

  • Os nós e pods usam endereços IP dos mesmos intervalos CIDR em seu cluster do Amazon Virtual Private Cloud (VPC). Para adicionar mais intervalos CIDR de endereços IP à Amazon VPC, consulte Como faço para usar vários intervalos CIDR com o Amazon EKS?.
  • O Amazon EKS atribui endereços IP do pod a partir da sub-rede do nó de processamento.
  • Não é possível controlar qual sub-rede atribui endereços IP aos pods.
  • Quando nenhum endereço IP está disponível na sub-rede de um nó, os novos pods não são iniciados, mesmo quando outras sub-redes têm endereços disponíveis.
  • Todo o tráfego de pods para endereços IP fora da Amazon VPC para seu bloco CIDR de cluster do Amazon EKS usa a interface principal e o endereço IP do nó. O tráfego usa grupos de segurança e uma sub-rede da interface de rede elástica primária do nó. Ele não usa a sub-rede e os grupos de segurança que você definiu nos objetos ENIConfig.
  • Se você usa grupos de segurança para pods, os pods usam o grupo de segurança que você especificou em sua SecurityGroupPolicy. Os pods não usam o grupo de segurança que você especificou nos objetos ENIConfig.
    Observação: para mais informações sobre o roteamento de tráfego de pods, consulte Habilitar o acesso de saída à internet para pods.

Ative a rede personalizada no plug-in Container Network Interface da Amazon VPC (CNI da Amazon VPC) para Kubernetes. Use a versão do plug-in CNI da Amazon VPC que corresponda à sua versão do Kubernetes. Para acessar o plug-in, consulte amazon-vpc-cni-k8s no site do GitHub.

Execute o comando a seguir para verificar a versão em sua Amazon VPC para seu cluster do Amazon EKS:

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

Se você não tiver a versão correta do plug-in, atualize a CNI da Amazon VPC.

Execute o comando a seguir para ativar a rede personalizada:

kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true

A CNI de VPC v1.18 e versões posteriores oferecem suporte à descoberta automática de sub-redes e à alocação dinâmica de endereços com base no uso do endereço IP nas sub-redes disponíveis. Para mais informações, consulte Amazon VPC CNI introduces enhanced subnet discovery (A CNI da Amazon VPC introduz descoberta avançada de sub-redes).

Também é possível usar o plug-in CNI da Amazon VPC para:

  • Especificar as sub-redes da Amazon VPC a serem usadas em seus pods.
  • Definir grupos de segurança separados para seus pods.

Crie objetos ENIConfig

Antes de criar seus objetos ENIConfig, revise os seguintes comportamentos padrão:

  • cada objeto ENIConfig define uma sub-rede e uma lista de grupos de segurança.
  • É possível atribuir somente um objeto ENIConfig a cada nó. No entanto, é possível atribuir o mesmo objeto ENIConfig a vários nós.
  • Quando você atribui um objeto ENIConfig a um nó, os pods programados para o nó usam a sub-rede e os grupos de segurança no objeto ENIConfig.
  • O nome do seu objeto ENIConfig deve ser o nome da sua zona de disponibilidade.

Execute o comando a seguir para criar seus objetos ENIConfig:

cat EOF | kubectl apply -f -  
apiVersion: crd.k8s.amazonaws.com/v1alpha1  
kind: ENIConfig  
metadata:  
  name: example-availability-zone  
spec:  
  securityGroups:   
    - example-security-group-id  
  subnet: example-subnet-id  
EOF

Observação: substitua example-availability-zone pela sua zona de disponibilidade. Substitua example-security-group-id pelo ID do seu grupo de segurança. Substitua example-subnet-id pelo ID da sua sub-rede.

Atribuir objetos ENIConfig

Para atribuir um objeto ENIConfig a uma zona de disponibilidade, atribua automaticamente objetos ENIConfig aos seus nós. Para associar vários objetos ENIConfig à mesma zona de disponibilidade, atribua manualmente objetos ENIConfig aos seus nós.

Atribuir objetos ENIConfig automaticamente

Execute o seguinte comando:

kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone

Associar manualmente objetos ENIConfig

Importante: certifique-se de que o nó e a sub-rede no objeto ENIConfig associado estejam na mesma zona de disponibilidade.

Execute o seguinte comando:

kubectl annotate node example-node-name k8s.amazonaws.com/eniConfig=example-availability-zone

Observação: substitua example-node-name pelo identificador completo do seu nó. Substitua example-availability-zone pelo nome da zona de disponibilidade que você usou ao criar seu objeto ENIConfig.

Iniciar novos nós

Para alocar interfaces de rede secundárias e endereços IP das sub-redes de ENIConfig, você deve iniciar novos nós. Os nós atuais continuam usando sua configuração de rede original até que você os substitua.

Conclua as etapas a seguir:

  1. Verifique se você usa um ID personalizado da imagem de máquina da Amazon (AMI) com seu grupo de nós gerenciado por grupo de nós autogerenciado.
  2. Se você usar um ID de AMI personalizado, determine o máximo de pods para cada valor de nó. Você deve adicionar o parâmetro --cni-custom-networking-enabled ao executar o script max-pods-calculator.sh.
    Observação: se você não usa um modelo de lançamento ou ID de AMI, o Amazon EKS define automaticamente o número máximo de pods.
  3. Atualize o script de dados do usuário em seus novos nós para usar o número máximo de pods com base no seu sistema operacional (SO):
    Amazon Linux 2, Bottlerocket, Ubuntu 20.04 e versões posteriores, Windows Server 2019 e versões posteriores
    #!/bin/bash  
    /etc/eks/bootstrap.sh example-cluster-name --use-max-pods false --kubelet-extra-args '--max-pods=example-max-pods'
    --user-data '#!/bin/bash /etc/eks/nodeadm init \ --container-runtime containerd \ --cluster-name example-cluster-name \ --max-pods example-max-pods'
    Observação: nos comandos anteriores, substitua example-cluster-name pelo nome do seu cluster EKS. Substitua example-max-pods pelo valor máximo de pods por nó.
    Para mais informações sobre bootstrap, consulte awslabs/amazon-eks-ami no site do GitHub. Para obter mais informações sobre nodeadm, consulte Atualização do Amazon Linux 2 para o Amazon Linux 2023.
    Amazon Linux 2023 (AL2023)
  4. Recrie seus pods para usar sua nova configuração de rede personalizada.
AWS OFICIALAtualizada há um ano