Como escolher sub-redes IP específicas a serem usadas para pods no meu cluster do Amazon EKS?

7 minuto de leitura
0

Quero usar sub-redes ou intervalos de IPs personalizados para meus pods no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Às vezes, pods não usam todas as sub-redes disponíveis no seu cluster do Amazon EKS. Isso acontece quando algumas sub-redes de nós não têm endereços IP disponíveis, mas outras sub-redes na Amazon Virtual Private Cloud (Amazon VPC) permanecem subutilizadas.

Os nós e pods no Amazon EKS usam endereços IP do mesmo espaço de endereço: os intervalos de IPs CIDR associados à VPC do cluster. Especificamente, o Amazon EKS atribui IPs para pods da mesma sub-rede do nó de processamento em que os pods estão programados.

Por exemplo, digamos que o nó-1 seja lançado na sub-rede-1. Ou seja, a interface da rede elástica primária do nó está na sub-rede-1. Posteriormente, o pod-A pode ser implantado e programado para o nó-1. Por padrão, o plug-in CNI da Amazon VPC aloca interfaces de rede elástica secundárias e IPs na sub-rede-1 para atribuir um endereço IP ao pod-A.

Como resultado, os usuários não têm controle direto sobre a alocação personalizada de pods a sub-redes IP porque os pods e os nós usam a mesma sub-rede. Se os nós tiverem capacidade computacional suficiente para executar muitos pods, estes poderão usar todos os endereços IP disponíveis na sub-rede de nós. Os nós não conseguem ser executados devido a endereços IP esgotados na sub-rede de nós. Isso ocorre mesmo quando outras sub-redes na Amazon VPC podem ter endereços IP disponíveis.

Resolução

Você pode corrigir esse problema usando o componente de rede personalizado do CNI da Amazon VPC. Esse recurso permite que você defina sub-redes específicas no cluster da Amazon VPC para uso por seus pods. Ele diferencia suas sub-redes daquelas usadas pelos nós de processamento. Como um benefício adicional, você pode definir grupos de segurança para os seus pods. Consulte o Tutorial: Rede personalizada para obter mais informações sobre casos de uso de redes personalizadas.

Pré-requisito

Antes de começar, faça o seguinte:

Como prática recomendada, certifique-se de ter a versão mais recente do plug-in CNI do Amazon VPC em execução no seu cluster. Execute o comando a seguir para verificar a versão no seu cluster da Amazon VPC:

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

Observação: para obter mais informações sobre a melhor versão a ser usada, consulte Atualização do plug-in CNI do Amazon VPC para complemento autogerenciado.

Configurar sua sub-rede e intervalos de IPs personalizados

Siga estas etapas para usar o recurso de rede personalizado CNI da Amazon VPC:

1.    Ative o recurso de rede personalizado CNI da Amazon VPC:

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

2.    Crie objetos ENIConfig para definir sub-redes e grupos de segurança para os pods usarem.

Um objeto ENIConfig define uma sub-rede e uma lista de grupos de segurança. Quando um nó é anotado ou rotulado com apenas um objeto ENIConfig, todos os pods programados para esse nó usam a sub-rede e os grupos de segurança definidos nesse objeto ENIConfig.

Você pode associar um objeto ENIConfig automática ou manualmente a um nó.

Associar objetos ENIConfig a nós automaticamente

Essa opção permite somente um objeto ENIConfig (uma sub-rede) por Zona de disponibilidade (AZ). O nome ENIConfig deve ser o nome da AZ.

1.    Crie objetos ENIConfig com o nome da AZ:

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2b
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-YYYYYYYYY
EOF

2.    Permita que o CNI da Amazon VPC rotule automaticamente os nós com o objeto ENIConfig que corresponde à AZ do nó.

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

Associar objetos ENIConfig manualmente a nós

Essa opção permite vários objetos ENIConfig por zona de disponibilidade. Observe que você pode usar um nome personalizado para cada objeto ENIConfig. Certifique-se de que o nó e o objeto ENIConfig associado estejam na mesma zona de disponibilidade.

Observação: você pode anotar somente um nó com um objeto ENIConfig, mas pode anotar vários nós com o mesmo objeto ENIConfig.

1.    Crie objetos ENIConfig com nomes personalizados, da seguinte maneira:

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-1-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-2-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-ZZZZZZZZZZ
EOF

2.    Faça anotações manuais nos nós com objetos ENIConfig. Certifique-se de que o nó e a sub-rede no objeto ENIConfig associado estejam na mesma zona de disponibilidade.

kubectl annotate node ip-192-168-0-126.us-east-2.compute.internal k8s.amazonaws.com/eniConfig=my-conf-1-us-east-2a

Essa anotação manual tem precedência sobre o rótulo adicionado automaticamente pelo CNI da Amazon VPC.

Inicie novos nós para substituir o nó de processamento atual

Os nós de processamento existentes podem ter interfaces de rede elástica secundárias e IPs da sub-rede de nós antes de você ativar o recurso de rede personalizado no CNI da Amazon VPC. Por esse motivo, você deve iniciar novos nós para que eles possam alocar interfaces de rede elástica secundárias e IPs a partir das sub-redes definidas no objeto ENIConfig associado ao nó.

1.    Verifique se você está usando uma dessas opções de grupo de nós:

  • grupo de nós autogerenciado
  • grupo de nós gerenciados com o ID de AMI personalizado

Observação: se você estiver criando nós nesses tipos de grupos de nós, continue com a Etapa 2 para definir manualmente o número máximo de pods para os seus nós. Se você estiver iniciando nós no grupo de nós gerenciados sem especificar uma AMI personalizada, o Amazon EKS atualizará automaticamente o número máximo de pods para os seus nós. Consulte Grupos de nós gerenciados para obter mais informações.

2.    Determine o número máximo de pods por nó. Ao usar redes personalizadas, a interface de rede primária do nó não é usada para IPs de pods. Para determinar o valor máximo de pods usando o script da calculadora de pods máximos, consulte Máximo de pods recomendado pelo Amazon EKS para cada tipo de instância do EC2.

Observação: use o sinalizador cni-custom-networking-enabled com o script acima para iniciar pods em uma sub-rede diferente da sua própria instância.

3.    Atualize o script de dados do usuário nos seus novos nós para incluir os sinalizadores necessários. Por exemplo:

#!/bin/bash
/etc/eks/bootstrap.sh my_cluster_name --use-max-pods false --kubelet-extra-args '--max-pods=20'

Observação: substitua my_cluster_name pelo nome do cluster do EKS. Para obter mais informações sobre a funcionalidade de Bootstrap, consulte awslabs/amazon-eks-ami no site do GitHub.

4.    Recrie os pods para usar a nova configuração de rede personalizada do pod.

Considerações adicionais

  • Por padrão, o tráfego de pods para endereços IP externos ao CIDR do cluster da VPC usa a interface principal e o endereço IP do nó. Portanto, esse tráfego não usa a sub-rede e os grupos de segurança definidos no ENIConfig. Em vez disso, o tráfego usa os grupos de segurança e a sub-rede da interface de rede primária do nó. Consulte SNAT para pods para obter mais informações.
  • Se você também usa grupos de segurança para pods, o grupo de segurança especificado em uma SecurityGroupPolicy será usado em vez do grupo de segurança especificado nos objetos ENIConfig**.**
  • Consulte Simplificar a rede personalizada CNI para obter as atualizações mais recentes no site do GitHub.
  • Para adicionar mais intervalos CIDR de IPs à sua VPC, siga as etapas em Como usar vários intervalos CIDR no Amazon EKS?

AWS OFICIAL
AWS OFICIALAtualizada há um ano