Guia para atualizar o AWS Load Balancer Controller após migração do Kubernetes 1.21 para 1.22
Após atualizar o cluster do Kubernetes da versão 1.21 para a 1.22, você pode precisar atualizar o AWS Load Balancer Controller (anteriormente conhecido como ALB Ingress Controller) para garantir que ele funcione corretamente com a nova versão do Kubernetes. O Kubernetes 1.22
traz a remoção de várias APIs obsoletas, exigindo ajustes nas aplicações antes da atualização para o Amazon EKS 1.22
. É fundamental seguir os pré-requisitos da versão 1.22
cuidadosamente para evitar problemas no seu cluster. As versões da API extensions/v1beta1
e networking.k8s.io/v1beta1
foram eliminadas, impactando usuários do AWS Load Balancer Controller. Para contornar isso, atualize para a versão 2.4.7
ou superior antes de migrar os clusters do Amazon EKS para a versão 1.22
.
Adicionalmente, é necessário modificar os Ingress manifests para usar a apiVersion networking.k8s.io/v1
, disponível desde o Kubernetes 1.19
. Para mais informações sobre as mudanças entre as entradas v1beta1
e v1
, consulte a documentação. O manifesto de exemplo do AWS Load Balancer Controller já adota a especificação v1
.
Pré-requisitos:
- Ter um cluster Kubernetes atualizado para a versão 1.22.
- Conhecimento básico sobre AWS, EKS, Kubernetes, Docker e Helm.
- Permissões apropriadas e acesso à conta AWS e ao cluster EKS.
- CLI do Kubernetes (kubectl) e CLI da AWS (aws) instalados e configurados.
- Helm V3 ou posterior instalado e configurado.
Configurando acesso ao Cluster EKS
Configurando as credenciais e as configurações padrão do AWS CLI .
aws configure --profile MEU_PERFIL
As informações solicitadas após a execução do comando são as seguintes:
AWS Access Key ID
: é o ID da chave de acesso da conta da AWS que você deseja usar para acessar o serviço. Ele é usado para autenticar suas solicitações de API da AWS.AWS Secret Access Key
: é a chave secreta associada à chave de acesso da conta da AWS. Ele é usado para autenticar suas solicitações de API da AWS.Default region name
: é o nome da região padrão que você deseja usar para seus recursos da AWS.Default output format
: é o formato padrão de saída que você deseja para as informações retornadas pelo AWS CLI.
Exemplo:
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Default region name [None]: us-east-1 Default output format [None]:
Ao fornecer essas informações, o AWS CLI criará um perfil nomeado “
MEU_PERFIL
” em seu arquivo de configuração. Você pode então usar o perfil “MEU_PERFIL
” ao executar comandos AWS CLI.
Configurando KubeConfig pelo AWS CLI
aws eks update-kubeconfig --profile MEU_PERFIL --name my-cluster
Ao executar este comando, o kubeconfig local será atualizado com as informações de conexão do cluster EKS “my-cluster” e você poderá usar ferramentas de linha de comando, como kubectl, para gerenciar os recursos do Kubernetes nesse cluster usando o perfil “
MEU_PERFIL
” configurado.Não esqueça da alterar
my-cluster
para o nome do seu cluster EKS.
Testando conexão
Execute o seguinte comando:
kubectl cluster-info
Resultado esperado:
Kubernetes control plane is running at https://...
CoreDNS is running at https://...
Metrics-server is running at https://...
Com o ambiente ja configurado, iremos iniciar o processo para atualização do AWS LoadBalancer Controller.
Removendo Versão Antiga do AWS Load Balancer Controller
Precisamos remover a versão antiga do AWS Load Balancer Controller
para que não haja conflitos durante o processo.
Verifique a versão atual do AWS Load Balancer Controller:
kubectl get deployment -n kube-system aws-load-balancer-controller -o wide
Faça backup dos recursos atuais do controlador, incluindo suas configurações de Ingress
e TargetGroupBinding
:
kubectl get ingress --all-namespaces -o yaml > ingress_backup.yaml
kubectl get targetgroupbinding --all-namespaces -o yaml > targetgroupbinding_backup.yaml
Remova a versão antiga do AWS Load Balancer Controller:
Substitua
vX.Y.Z
pela versão atual que está sendo executada.
kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/vX.Y.Z/docs/install/v2_2_0_full.yaml
Criar uma política do IAM
Vamos começar criando uma política do IAM para o AWS Load Balancer Controller, permitindo que ele faça chamadas para APIs da AWS em seu nome.
Baixe a política do IAM:
Execute o seguinte comando para baixar a política do IAM:
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json
Crie uma política do IAM utilizando a política baixada na etapa anterior.
Certifique-se de usar o arquivo correto antes de executar o comando.
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json \
--profile MEU_PERFIL
Buscando ID do provedor do OIDC do cluster.
O ID do provedor do OpenID Connect (OIDC) do cluster na AWS é um valor único que identifica um provedor de identidade OpenID Connect configurado para autenticar usuários no seu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).
Recupere o ID do provedor do OIDC do cluster e armazene-a em uma variável.
oidc_id=$(aws eks describe-cluster --name MY-CLUSTER \
--query "cluster.identity.oidc.issuer" --output text \
--profile MEU_PERFIL | cut -d '/' -f 5)
Determine se um provedor do OIDC do IAM com seu ID de cluster já está em sua conta. Se um resultado for retornado, significará que você já tem um provedor OIDC do IAM para o cluster. Se nenhum resultado for retornado, você deverá criar um provedor OIDC do IAM para seu cluster.
aws iam list-open-id-connect-providers \
--profile MEU_PERFIL | grep $oidc_id | cut -d "/" -f4
LB Role Trust Policy
Copie o conteúdo a seguir para o seu dispositivo. Substitua 111122223333
pelo ID da sua conta. Substitua region-code
pela Região da AWS em que está o cluster. Substitua EXAMPLED539D4633E53DE1B71EXAMPLE
pela saída retornada na etapa anterior. Após substituir o texto, execute o comando modificado para criar o arquivo load-balancer-role-trust-policy.json
.
cat >load-balancer-role-trust-policy.json <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
"oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
}
}
}
]
}
EOF
Crie a função do IAM
aws iam create-role \
--role-name AmazonEKSLoadBalancerControllerRole \
--assume-role-policy-document file://"load-balancer-role-trust-policy.json" \
--profile MEU_PERFIL
Anexando Política
Anexe a política de IAM gerenciada pelo Amazon EKS ao perfil do IAM. Substitua 111122223333
pelo ID da sua conta.
aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--role-name AmazonEKSLoadBalancerControllerRole \
--profile MEU_PERFIL
Criando ALB Controller ServiceAccount
Copie o conteúdo a seguir para o seu dispositivo. Substitua 111122223333
pelo ID da sua conta. Após substituir o texto, execute o comando modificado para criar o arquivo aws-load-balancer-controller-service-account.yaml
.
cat >aws-load-balancer-controller-service-account.yaml <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/name: aws-load-balancer-controller
name: aws-load-balancer-controller
namespace: kube-system
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKSLoadBalancerControllerRole
EOF
A conta de serviço do Kubernetes denominada aws-load-balancer-controller
é anotado com o perfil do IAM criado com o nome AmazonEKSLoadBalancerControllerRole
.
kubectl apply -f aws-load-balancer-controller-service-account.yaml
Instalando o AWS Load Balancer Controller
Vamos instalar o AWS Load Balancer Controller usando o Helm V3 ou posterior. Se você quiser implantar o controlador no Fargate, use o procedimento Helm. O procedimento Helm não depende de cert-manager porque produz um certificado autoassinado.
Adicione o repositório do eks-charts
.
helm repo add eks https://aws.github.io/eks-charts
Atualize o repositório local para confirmar que você tem os charts mais recentes.
helm repo update
Instale o AWS Load Balancer Controller.
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=MY-CLUSTER \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
Importante
O charts implantado não recebe atualizações de segurança automaticamente. Você precisa atualizar manualmente para um charts mais recente quando ele estiver disponível. Ao atualizar, altere install para upgrade no comando anterior, mas execute o comando a seguir para instalar as definições de recursos personalizados de TargetGroupBinding antes de executar o comando anterior.
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"`
Verifique se o controlador está instalado.
kubectl get deployment -n kube-system aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 84s
Reaplique seus recursos de Ingress e TargetGroupBinding a partir dos backups feitos anteriormente:
kubectl apply -f ingress_backup.yaml
kubectl apply -f targetgroupbinding_backup.yaml
Conclusão
Este documento apresenta um guia passo a passo sobre como atualizar o AWS Load Balancer Controller após a migração do Kubernetes da versão 1.21 para a 1.22. Os ajustes e precauções necessárias são destacados para garantir a continuidade e a eficiência do cluster após a atualização. Seguindo este guia, você será capaz de fazer backup e restaurar seus recursos de Ingress e TargetGroupBinding, criar e configurar as políticas e funções do IAM necessárias, e instalar a versão correta do AWS Load Balancer Controller no cluster usando o Helm. Isso permitirá que o controlador funcione corretamente com a nova versão do Kubernetes e garantirá a estabilidade e a eficiência do cluster.
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
About author
Você pode gostar também
Guia prático: Como configurar e usar o Minio Server em sua infraestrutura
Minio é um storage de objetos, de alta performance e distribuído. A grande vantagem de usá-lo, reside em sua total compatibilidade com o Amazon S3. Neste artigo explico como subir
Como instalar o Zabbix 5.0 com o TimescaleDB no Ubuntu 20.04
O TimescaleDB é uma extensão do PostgreSQL que utiliza séries temporais sobre um banco de dados SQL convencional e com isso obtemos o melhor que os dois mundos podem nos
Por que aprender Python? Descubra os motivos e vantagens
Dizem que se alguém quer trabalhar no Google, o caminho mais simples é aprender Python. Será este o único motivo? De fato, a linguagem Python é intensivamente usada pelo Google.