Como impedir que regras do grupo de segurança, receptores ou outras alterações sejam revertidas em um balanceador de carga no Amazon EKS?

5 minuto de leitura
0

Quando tento fazer alterações no meu balanceador de carga do Amazon Elastic Kubernetes Service (Amazon EKS), as alterações são revertidas automaticamente.

Breve descrição

Quando você usa o AWS Load Balancer Controller para criar um serviço de balanceamento de carga ou um recurso de entrada, o controlador configura vários parâmetros padrão. Isso inclui todos os parâmetros que você não especifica no arquivo de manifesto, como um caminho de verificação de integridade, tempo limite padrão ou regras do grupo de segurança.

No entanto, você pode usar uma chamada de API da AWS para alterar diretamente a configuração padrão. Você pode fazer essa chamada de API a partir do console do Amazon Elastic Compute Cloud (Amazon EC2), da AWS Command Line Interface (AWS CLI) ou de outra ferramenta de terceiros. Nesse caso, o controlador reverte essas alterações para seus valores originais durante a próxima reconciliação do cluster. Para obter mais informações, consulte Controladores e reconciliação no site da API Kubernetes Cluster.

Os seguintes problemas geralmente 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 são revertidas automaticamente para 0.0.0.0/0 ou desaparecem.
  • O balanceador de carga exclui ou adiciona automaticamente as regras do receptor.
  • Os valores personalizados de tempo limite de inatividade são revertidos automaticamente para os valores padrão.
  • O certificado é revertido automaticamente para a versão anterior.
  • Você não pode atualizar o caminho da verificação de integridade porque o Amazon EKS reverteu seus valores.
  • O Amazon EKS modifica as funções por meio das propriedades do balanceador de carga.

Para solucionar esses problemas, primeiro determine o que fez com que seu balanceador de carga fizesse essas alterações. Especificamente, encontre a chamada de API relevante para o recurso alterado e a ferramenta que fez a chamada. Em seguida, implemente suas alterações no arquivo de manifesto.

Observação: na resolução a seguir, um “balanceador de carga” se refere a um serviço de balanceamento de carga, como Network Load Balancer ou Classic Load Balancer. Ou um balanceador de carga pode ser um recurso de entrada, como o Application Load Balancer.

Resolução

Para definir o estado esperado de um balanceador de carga, você deve especificar as alterações nas anotações do arquivo de manifesto. Caso contrário, as anotações forçarão as alterações a reverterem para os valores padrão inalterados.

Se você tentar usar uma chamada de API da AWS para alterar diretamente esses valores, o controlador considerará isso uma alteração fora da banda. Durante a próxima reconciliação, o controlador reverte as alterações em seus valores originais para sincronizar com a configuração do manifesto de serviço do Kubernetes. Dependendo do atributo revertido pelo controlador, isso pode resultar em um longo tempo de inatividade para seu serviço.

O AWS Load Balancer Controller usa vários caminhos de lógica para reconciliação. Os cenários a seguir podem fazer com que os pods aws-load-balancer-controller sejam reiniciados:

  • Uma atualização para o plano de controle, o nó de processamento ou a plataforma
  • Uma atualização de instância devido a problemas subjacentes, como falha de hardware ou problemas de integridade
  • Qualquer atividade que resulte em uma chamada de API de atualização, exclusão ou correção 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. No entanto, esse recurso não funciona nas versões 2.4.7 e anteriores do Amazon EKS.

Nesses casos, o AWS Load Balancer Controller inicia a reconciliação, e seu balanceador de carga se refere à configuração mais recente do arquivo de manifesto. Se você já fez alguma alteração em seu balanceador de carga por meio de uma chamada de API, essas alterações serão revertidas.

Identifique a origem das mudanças

Encontre a chamada de API relacionada ao recurso atualizado. Pesquise no AWS CloudTrail o período em que as alterações 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.

Por exemplo, se o controlador reverter as regras do SecurityGroup, você verá que a API RevokeSecurityGroupIngress é invocada. Em seguida, você pode usar o evento correspondente do CloudTrail para identificar o usuário da API. Se o controlador usar funções WorkerNode, você verá a função de nó que fez a chamada de API:

....
"type": "AssumedRole",
"arn": "arn:aws:sts::***********:assumed-role/eksctl-mycluster-NodeInstanceRole/i-***********",
"sessionContext": {
    "sessionIssuer": {
        "type": "Role",
        "arn": "arn:aws:iam::***********: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-****",
        "ipPermissions": {
            "items": [{
                        "ipProtocol": "tcp",
                        "fromPort": 443,
                        "toPort": 443,
                        "groups": {},
                        "ipRanges": {
                            "items": [{
                                "cidrIp": "0.0.0.0/0"
                            }]
                        }]

Se você usar funções dedicadas para o AWS Load Balancer Controller, verá o perfil do Identity and Access Management (IAM) da AWS da conta de serviço.

Evite mudanças indesejadas

Não faça alterações fora de banda em nenhum parâmetro do seu balanceador de carga. Isso inclui alterações do console do Amazon EC2, da AWS CLI ou de qualquer ferramenta que chame diretamente as APIs da AWS.

Por exemplo, você deseja atualizar as regras do grupo de segurança. Use as anotações .spec.loadBalancerSourceRanges ou service.beta.kubernetes.io/load-balancer-source-ranges. Você pode usar essas anotações para restringir os endereços IP CIDR de um balanceador de carga. Para obter mais informações sobre essas anotações, consulte Controle de acesso no site do AWS Load Balancer Controller no GitHub.

Use somente anotações apropriadas no arquivo de manifesto para atualizar valores de tempo limite, caminhos de verificação de integridade, ARNs de certificados e outras propriedades. Para ver todas as anotações de serviço e entrada suportadas, consulte Anotações de serviço e Anotações de entrada no site do AWS Load Balancer Controller no GitHub.

AWS OFICIAL
AWS OFICIALAtualizada há um ano