Quero manter as alterações que faço nas regras do grupo de segurança, nos receptores ou em outros parâmetros no meu balanceador de carga no Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Observação: na resolução a seguir, um "balanceador de carga" se refere aos serviços de balanceamento de carga e aos recursos de entrada. Por exemplo, o Network Load Balancer é um serviço de balanceamento de carga e o Application Load Balancer é um recurso de entrada.
Você deve especificar alterações nas anotações do arquivo de manifesto para alterar os parâmetros padrão do seu balanceador de carga. Esses parâmetros incluem caminhos de verificação de integridade, valores de tempo limite padrão, nomes de recursos da Amazon (ARNs) de certificados e regras de grupos de segurança.
Os seguintes problemas ocorrem devido a alterações revertidas do balanceador de carga no Amazon EKS:
- As regras personalizadas do grupo de segurança do balanceador de carga revertem para 0.0.0.0/0 ou desaparecem.
- O balanceador de carga exclui ou adiciona regras de receptor.
- Seus valores de tempo limite de inatividade personalizados são revertidos para os valores padrão.
- Seu certificado SSL/TLS reverte automaticamente para a versão anterior.
- Não é possível atualizar seu caminho de verificação de integridade.
- O Amazon EKS modifica os perfis por meio das propriedades do balanceador de carga.
- Seu serviço passa por um tempo de inatividade.
Para solucionar esses problemas, primeiro determine a operação da API que altera seu recurso e a ferramenta que fez a chamada. Em seguida, implemente novamente suas alterações no arquivo de manifesto.
Resolução
Quando você altera a configuração padrão do seu balanceador de carga com uma operação de API da AWS, o controlador reverte suas alterações durante a próxima reconciliação do cluster. O controlador reverte as alterações que você faz em ferramentas que chamam operações de API da AWS, como o console do Amazon Elastic Compute Cloud (Amazon EC2) e a AWS Command Line Interface (AWS CLI). Para mais informações, consulte Controllers (Controladores) no site do Kubernetes.
Os cenários a seguir fazem com que o AWS Load Balancer Controller ative reconciliações de cluster e reinicie os pods aws-load-balancer-controller:
- Atualizações para o ambiente de gerenciamento, o nó de processamento ou a plataforma
- Problemas subjacentes, como falhas de hardware ou problemas de integridade, que fazem com que sua instância do EC2 seja atualizada
- Atividades que resultam em atualizações, exclusão ou patches de chamadas de API nos pods do controlador
- Reconciliação automática e periódica
Observação: por padrão, o período de reconciliação do controlador é de 1 hora. O Amazon EKS não oferece suporte à reconciliação periódica nas versões 2.4.7 e anteriores do Amazon EKS.
Verificar se o controlador reverteu as alterações
Encontre a chamada de API relacionada ao recurso atualizado. Analise seu histórico de eventos do AWS CloudTrail para ver se há eventos que correspondam ao período em que as mudanças ocorreram. Para todas as chamadas de API do AWS Load Balancer, consulte a referência da API do Elastic Load Balancing (ELB). Para chamadas de API do Amazon EC2, consulte a referência da API do Amazon EC2.
Se você usar perfis dedicados para o AWS Load Balancer Controller, o evento conterá o perfil do serviço do AWS Identity and Access Management (AWS IAM) da conta da AWS que fez a chamada da API. Se o controlador usar os perfis WorkerNode, o evento conterá o perfil do nó que fez a chamada da API. O evento de exemplo a seguir indica que o usuário eksctl-mycluster-nodegr-NodeInstanceRole chamou a operação RevokeSecurityGroupIngress para atualizar os parâmetros da sua instância:
...."type": "AssumedRole",
"arn": "arn:aws:sts::123456789012:assumed-role/eksctl-mycluster-NodeInstanceRole/i-0ab1c2d3e4f5a6b7c",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"arn": "arn:aws:iam::123456789012:role/eksctl-mycluster-nodegr-NodeInstanceRole",
"userName": "eksctl-mycluster-nodegr-NodeInstanceRole"
},
...
"eventName": "RevokeSecurityGroupIngress",
"userAgent": "elbv2.k8s.aws/v2.4.5 aws-sdk-go/1.42.27 (go1.19.3; linux; amd64)",
"requestParameters": {
"groupId": "sg-0ab1c2d3e4f5a6b7c",
"ipPermissions": {
"items": [{
"ipProtocol": "tcp",
"fromPort": 443,
"toPort": 443,
"groups": {},
"ipRanges": {
"items": [{
"cidrIp": "0.0.0.0/0"
}]
}
}]
}
}
}
Atualizar as anotações para manter as alterações
Depois de identificar a alteração feita por uma operação de API que o controlador reverteu, atualize as anotações de entrada em seu arquivo de manifesto para recriar essa alteração.
Importante: ao recriar a alteração, use somente anotações no arquivo de manifesto compatível com o Amazon EKS para atualizar seus parâmetros. Para obter listas de anotações aceitas pelo Amazon EKS, consulte Service annotations (Anotações de serviço) e Ingress annotations (Anotações de entrada) no site do AWS Load Balancer Controller GitHub.