Trabalhando com o complemento Amazon VPC CNI plugin for Kubernetes do Amazon EKS
O complemento Amazon VPC CNI plugin for Kubernetes é implantado em cada nó do Amazon EC2 em seu cluster do Amazon EKS. O complemento cria interfaces de rede elásticas e as anexa aos nós do Amazon EC2. O complemento também atribui um endereço IPv4
ou IPv6
privado da sua VPC a cada Pod e serviço.
Uma versão do complemento é implantada com cada nó do Fargate em seu cluster, mas você não a atualiza em nós do Fargate. Há outros plug-ins de CNI compatíveis disponíveis para uso em clusters do Amazon EKS, mas esse é o único plug-in de CNI compatível com o Amazon EKS.
A tabela a seguir lista a versão mais recente do complemento do Amazon EKS disponível para cada versão do Kubernetes.
Versão do Kubernetes | 1.29 |
1.28 |
1.27 |
1.26 |
1.25 |
1.24 |
1.23 |
---|---|---|---|---|---|---|---|
Tipo Amazon EKS de versão da CNI da VPC | v1.18.0-eksbuild.1 |
v1.18.0-eksbuild.1 |
v1.18.0-eksbuild.1 |
v1.18.0-eksbuild.1 |
v1.18.0-eksbuild.1 |
v1.18.0-eksbuild.1 |
v1.18.0-eksbuild.1 |
Importante
Se você estiver gerenciando esse complemento automaticamente, as versões na tabela podem não ser as mesmas que as versões autogerenciadas disponíveis. Para obter mais informações sobre como atualizar o tipo autogerenciado desse complemento, consulte Atualização do complemento autogerenciado.
Pré-requisitos
-
Um cluster existente do Amazon EKS. Para implantar, consulte Conceitos básicos do Amazon EKS.
-
Um provedor OpenID Connect (OIDC) do AWS Identity and Access Management (IAM) existente para o cluster. Para determinar se você tem ou para criar uma, consulte Criar um provedor OIDC do IAM para o cluster.
-
Um perfil do IAM com a política do IAM AmazonEKS_CNI_Policy (se o cluster usar a família
IPv4
) ou uma política IPv6 (se o seu cluster usar a famíliaIPv6
) anexada a ela. Para ter mais informações, consulte Configuração do Amazon VPC CNI plugin for Kubernetes a fim de usar perfis do IAM para contas de serviço (IRSA). -
Se você estiver usando a versão
1.7.0
ou posterior do Amazon VPC CNI plugin for Kubernetes e usar políticas de segurança de Pod personalizadas, consulte Excluir política de segurança de Pod padrão do Amazon EKSPolítica de segurança de pods. -
Importante
As versões do Kubernetes
v1.16.0
do Amazon VPC CNI plugin for parav1.16.1
removeram a compatibilidade com as versões1.23
e anteriores do Kubernetes. A versão VPC CNIv1.16.2
restaura a compatibilidade com as versões1.23
e anteriores do Kubernetes com a especificação CNIv0.4.0
.As versões
v1.16.0
do Amazon VPC CNI plugin for do Kubernetes parav1.16.1
implementam a versãov1.0.0
da especificação CNI. A especificação CNIv1.0.0
tem suporte de clusters do EKS que executam as versõesv1.24
ou posteriores do Kubernetes. A versãov1.16.0
av1.16.1
da VPC CNI e a especificação CNIv1.0.0
não são compatíveis com a versãov1.23
ou posterior do Kubernetes. Para obter mais informações sobre a versãov1.0.0
da especificação CNI, consulte Container Network Interface (CNI) Specificationem
Considerações
-
As versões são especificadas como
major-version.minor-version.patch-version-eksbuild.build-number
. -
Verifique a compatibilidade de versão para cada atributo
Alguns recursos de cada versão do Kubernetes do Amazon VPC CNI plugin for exigem determinadas versões do Kubernetes. Ao utilizar diferentes recursos do Amazon EKS, se uma versão específica do complemento for necessária, então ela será anotada na documentação de recursos. A menos que você tenha um motivo específico para executar uma versão anterior, recomendamos que execute a versão mais recente.
Criar o complemento do Amazon EKS
Crie o tipo do Amazon EKS do complemento.
-
Veja qual versão do complemento está atualmente instalada no cluster.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Veja um exemplo de saída abaixo.
v1.12.6-eksbuild.2
-
Veja qual tipo de complemento está atualmente instalado no cluster. Dependendo da ferramenta com a qual você criou o cluster, talvez você não tenha o tipo de complemento do Amazon EKS instalado em seu cluster atualmente. Substitua
my-cluster
pelo nome do cluster.$
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textSe um número de versão for retornado, você tem o tipo de complemento do Amazon EKS instalado no cluster, e não precisa completar as etapas restantes deste procedimento. Se um erro for retornado, você não tem o tipo de complemento do Amazon EKS instalado no cluster. Conclua as etapas restantes desse procedimento para instalá-lo.
-
Salve a configuração do complemento instalado atualmente.
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
Crie o complemento usando o AWS CLI. Se você quiser usar o AWS Management Console ou
eksctl
para criar o complemento, consulte Criar um complemento e especifiquevpc-cni
como o nome do complemento. Copie o conteúdo a seguir no seu dispositivo. Faça as seguintes modificações no comando, conforme necessário, e execute o comando modificado.-
Substitua o
pelo nome do cluster.my-cluster
-
Substitua
pela versão mais recente listada na tabela de versões mais recentes da versão do cluster.v1.18.0-eksbuild.1
-
Substitua
111122223333
pelo ID da sua conta eAmazonEKSVPCCNIRole
pelo nome do perfil do IAM existente que você criou. A especificação de um perfil exige que você tenha um provedor OpenID Connect (OIDC) do IAM para o cluster. Para determinar se você já tem um ou se precisa criar um para o seu cluster, consulte Criar um provedor OIDC do IAM para o cluster.
aws eks create-addon --cluster-name
my-cluster
--addon-name vpc-cni --addon-version
\ --service-account-role-arn arn:aws:iam::v1.18.0-eksbuild.1
111122223333
:role/AmazonEKSVPCCNIRole
Se você aplicou configurações personalizadas ao seu complemento atual que entrem em conflito com as configurações padrão do complemento Amazon EKS, a criação poderá falhar. Se a criação falhar, você receberá um erro que poderá ajudar a resolver o problema. Como alternativa, você pode adicionar
--resolve-conflicts OVERWRITE
ao comando anterior. Isso permite que o complemento substitua todas as configurações personalizadas existentes. Depois de criar o complemento, você pode atualizá-lo com suas configurações personalizadas. -
-
Confirme se a versão mais recente do complemento para a versão Kubernetes do seu cluster foi adicionada ao cluster. Substitua o
pelo nome do cluster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textPode levar alguns segundos para que a criação do complemento seja concluída.
Veja um exemplo de saída abaixo.
v1.18.0-eksbuild.1
-
Se você fez configurações personalizadas no complemento original, antes de criar o complemento Amazon EKS, use a configuração que você salvou em uma etapa anterior para atualizar o complemento Amazon EKS com as configurações personalizadas.
(Opcional) Instale
cni-metrics-helper
em seu cluster. Ele extrai a interface de rede elástica e as informações de endereço IP, agrega-as em um nível de cluster e publica as métricas no Amazon CloudWatch. Para obter mais informações, consulte cni-metrics-helperno GitHub.
Atualizar o complemento do Amazon EKS
Atualize o tipo do Amazon EKS do complemento. Se você não adicionou o tipo Amazon EKS do complemento ao cluster, adicione-o ou consulte Atualização do complemento autogerenciado, em vez de concluir esse procedimento.
-
Veja qual versão do complemento está atualmente instalada no cluster. Substitua
pelo nome do cluster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query "addon.addonVersion" --output textVeja um exemplo de saída abaixo.
v1.12.6-eksbuild.2
Se a versão retornada for a mesma da versão do Kubernetes do cluster na tabela de versões mais recente, você já tem a versão mais recente instalada no cluster e não precisa concluir o restante desse procedimento. Se você receber um erro, em vez de um número de versão no resultado, você não tem o tipo Amazon EKS do complemento instalado no cluster. Você precisa criar o complemento antes de poder atualizá-lo com este procedimento.
-
Salve a configuração do complemento instalado atualmente.
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
Atualize o complemento usando a AWS CLI. Se você quiser usar o AWS Management Console ou
eksctl
para atualizar o complemento, consulte Atualizar um complemento. Copie o conteúdo a seguir no seu dispositivo. Faça as seguintes modificações no comando, conforme necessário, e execute o comando modificado.-
Substitua o
pelo nome do cluster.my-cluster
-
Substitua
pela versão mais recente listada na tabela de versões mais recentes da versão do cluster.v1.18.0-eksbuild.1
-
Substitua
111122223333
pelo ID da sua conta eAmazonEKSVPCCNIRole
pelo nome do perfil do IAM existente que você criou. A especificação de um perfil exige que você tenha um provedor OpenID Connect (OIDC) do IAM para o cluster. Para determinar se você já tem um ou se precisa criar um para o seu cluster, consulte Criar um provedor OIDC do IAM para o cluster. -
A opção
PRESERVE
de--resolve-conflicts
mantém os valores de configuração existentes para o complemento. Se você definiu valores personalizados para as configurações do complemento e não usar essa opção, o Amazon EKS sobrescreverá seus valores pelos valores padrão. Se você usar essa opção, recomendamos testar qualquer alteração de campo e valor em um cluster que não seja de produção antes de atualizar o complemento no cluster de produção. Se você alterar esse valor paraOVERWRITE
, todas as configurações serão alteradas para os valores padrão do Amazon EKS. Se você definiu valores personalizados para qualquer configuração, eles poderão ser sobrescritos pelos valores padrão do Amazon EKS. Se você alterar esse valor paranone
, o Amazon EKS não alterará o valor de nenhuma configuração, mas a atualização poderá falhar. Se a atualização falhar, você receberá uma mensagem de erro para ajudar a resolver o conflito. -
Se você não estiver atualizando uma configuração, remova
--configuration-values '{
do comando. Se você estiver atualizando uma configuração, substitua"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
}'"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
pela configuração que você quiser definir. Neste exemplo, a variável de ambienteAWS_VPC_K8S_CNI_EXTERNALSNAT
é definida comotrue
. O valor que você especificar deve ser válido para o esquema da configuração. Se não souber qual é o esquema de configuração, executeaws eks describe-addon-configuration --addon-name vpc-cni --addon-version
, substituindov1.18.0-eksbuild.1
v1.18.0-eksbuild.1
pelo número da versão do complemento cuja configuração você deseja ver. O esquema é retornado na saída. Se você tiver alguma configuração personalizada existente, quiser remover tudo e definir os valores de todas as configurações de volta aos padrões do Amazon EKS, remova
do comando, para que“env”: {"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
fique vazio. Para obter uma explicação de cada configuração, consulte Variáveis de configuração CNI{}
no GitHub. aws eks update-addon --cluster-name
my-cluster
--addon-name vpc-cni --addon-versionv1.18.0-eksbuild.1
\ --service-account-role-arn arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
\ --resolve-conflictsPRESERVE
--configuration-values '{"env":{"AWS_VPC_K8S_CNI_EXTERNALSNAT":"true"}
}'Pode levar alguns segundos para que a atualização seja concluída.
-
-
Confirme se a versão do complemento foi atualizada. Substitua o
pelo nome do cluster.my-cluster
aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cniPode levar alguns segundos para que a atualização seja concluída.
Veja um exemplo de saída abaixo.
{ "addon": { "addonName": "vpc-cni", "clusterName": "
my-cluster
", "status": "ACTIVE", "addonVersion": "v1.18.0-eksbuild.1
", "health": { "issues": [] }, "addonArn": "arn:aws:eks:region
:111122223333
:addon/my-cluster
/vpc-cni/74c33d2f-b4dc-8718-56e7-9fdfa65d14a9
", "createdAt": "2023-04-12T18:25:19.319000+00:00", "modifiedAt": "2023-04-12T18:40:28.683000+00:00", "serviceAccountRoleArn": "arn:aws:iam::111122223333
:role/AmazonEKSVPCCNIRole
", "tags": {}, "configurationValues": "{\"env\":{\"AWS_VPC_K8S_CNI_EXTERNALSNAT\":\"true\"}
}" } }
Atualização do complemento autogerenciado
Importante
Recomendamos adicionar o tipo Amazon EKS do complemento ao seu cluster em vez de usar o tipo autogerenciado do complemento. Se você não estiver familiarizado com a diferença entre os tipos, consulte Complementos do Amazon EKS. Para obter mais informações sobre como adicionar um complemento do Amazon EKS ao cluster, consulte Criar um complemento. Se você não conseguir usar o complemento do Amazon EKS, recomendamos que você envie um problema sobre o motivo pelo qual não pode usar o repositório GitHub para roteiro de contêineres
-
Confirme que você não tem o tipo de complemento Amazon EKS instalado em seu cluster. Substitua
my-cluster
pelo nome do cluster.aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textSe uma mensagem erro for retornada, você não tem o tipo de complemento do Amazon EKS instalado no cluster. Para gerenciar automaticamente o complemento, conclua as etapas restantes neste procedimento para atualizar o complemento. Se receber um número de versão, você tem o tipo de complemento do Amazon EKS instalado no cluster. Para atualizá-lo, use o procedimento em Atualizar um complemento, em vez de usar este procedimento. Se não estiver familiarizado com a diferença entre os tipos de complemento, consulte Complementos do Amazon EKS.
-
Veja qual versão da imagem do contêiner está atualmente instalada em seu cluster.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Veja um exemplo de saída abaixo.
v1.12.6-eksbuild.2
O resultado pode não incluir o número da compilação.
-
Faça o backup de suas configurações atuais para que você possa definir as mesmas configurações após atualizar sua versão.
kubectl get daemonset aws-node -n kube-system -o yaml >
aws-k8s-cni-old.yaml
-
Para examinar as versões disponíveis e se familiarizar com as alterações feitas na versão para a qual você deseja atualizar, consulte
releases
no GitHub. Observe que recomendamos atualizar para a mesma versãomajor
.minor
.patch
listada na tabela de versões mais recentes disponíveis, mesmo se versões posteriores estiverem disponíveis no GitHub. As versões de compilação listadas na tabela não são especificadas nas versões autogerenciadas listadas no GitHub. Atualize a versão concluindo as tarefas em uma das seguintes opções:-
Se você não tiver nenhuma configuração personalizada para o complemento, execute o comando abaixo do cabeçalho
To apply this release:
no GitHub específico da versãopara a qual você está atualizando. -
Se você tiver configurações personalizadas, baixe o manifesto com o comando a seguir. Altere
https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.18.0/config/master/aws-k8s-cni.yaml
para a URL da versão no GitHub para a qual você estiver atualizando.curl -O
https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.18.0/config/master/aws-k8s-cni.yaml
Se necessário, modifique o manifesto com as configurações personalizadas do backup que você fez em uma etapa anterior e aplique o manifesto modificado ao cluster. Se seus nós não tiverem acesso aos repositórios privados do Amazon ECR do Amazon EKS dos quais as imagens são extraídas (veja as linhas que começam com
image:
no manifesto), você precisará baixar as imagens, copiá-las para seu próprio repositório e modificar o manifesto a fim de extrair as imagens do seu repositório. Para ter mais informações, consulte Copiar uma imagem de contêiner de um repositório para outro.kubectl apply -f aws-k8s-cni.yaml
-
-
Confirme se agora a nova versão está instalada em seu cluster.
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Veja um exemplo de saída abaixo.
v1.18.0
(Opcional) Instale
cni-metrics-helper
em seu cluster. Ele extrai a interface de rede elástica e as informações de endereço IP, agrega-as em um nível de cluster e publica as métricas no Amazon CloudWatch. Para obter mais informações, consulte cni-metrics-helperno GitHub.