Guia para atualizar o AWS Load Balancer Controller após migração do Kubernetes 1.21 para 1.22

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:

CURSOSCONSULTORIA

Anterior Descubra o DevSecOps: Segurança e eficiência no desenvolvimento de software
Próxima Guia Rápido: Como Fazer Deploy de uma API Python na Cloud Usando Containers

About author

Você pode gostar também

Infraestrutura TI

Descubra o Opensearch: a ferramenta opensource para análise de logs e monitoramento

Heeey! Podemos nos referir ao Opensearch como um fork do Elasticsearch e Kibana 7.10. Basicamente, o Opensearch é uma ferramente de monitoração de aplicação e análise de logs totalmente opensource

Destaques

Descubra como implementar uma governança ágil na Cloud com o novo ebook da 4Linux

Com conteúdo relevante e vanguardista, a proposta deste ebook é apresentar modelos para se implementar uma governança ágil na Cloud (AWS – Azure – GCP) usando o conceito de IDP.

Infraestrutura TI

Descubra como o Puppet pode otimizar a administração de sistemas Open Source

  Durante muito tempo o cotidiano do sysadmin de soluções Open Source foi regido por scripts caseiros que, aparentemente, eram capazes de solucionar todas as questões do dia a dia