Sub-redes do balanceador de carga

Esta página descreve como o GKE na AWS funciona com a AWS para escolher sub-redes para balanceadores de carga do serviço e como marcar sub-redes para serem descobertas automaticamente durante a criação do balanceador de carga do serviço.

Por que você precisa especificar sub-redes

Ao criar balanceadores de carga, a AWS precisa saber em quais sub-redes colocá-los. A sub-rede determina as zonas de disponibilidade do balanceador de carga, os endereços IP e os endpoints.

Normalmente, os balanceadores de carga são alocados a uma sub-rede para cada zona de disponibilidade que contém um pool de nós. A AWS precisa de no mínimo uma sub-rede disponível para criar um Balanceador de Carga de Rede (NLB) e no mínimo duas sub-redes para um Balanceador de Carga de Aplicativo (ALB).

Todas as sub-redes da AWS são públicas (com IPs públicos e uma rota para o gateway de internet da VPC) ou privadas (sem esses recursos). Os balanceadores de carga voltados para a internet devem estar localizados em sub-redes públicas. Os balanceadores de carga internos podem residir em sub-redes públicas ou privadas.

Se não houver sub-redes marcadas disponíveis

Se o GKE na AWS precisar criar um balanceador de carga e nenhuma sub-rede marcada estiver disponível ou tiver capacidade, ele poderá criar o balanceador de carga em outra sub-rede. Para evitar isso e controlar em quais sub-redes seus balanceadores de carga serão colocados, você deve marcar todas as suas sub-redes.

Descoberta automática de sub-rede

O GKE na AWS descobrirá automaticamente sub-redes a serem usadas em um balanceador de carga listando todas as sub-redes na VPC e selecionando até uma sub-rede de cada zona de disponibilidade.

Para que o GKE na AWS descubra automaticamente uma sub-rede, a sub-rede deve:

  • Seja marcado com kubernetes.io/role/elb (para um balanceador de carga voltado para a Internet)
  • Seja marcado com kubernetes.io/role/internal-elb (para um balanceador de carga interno)
  • Não contenha nenhuma tag com o prefixo kubernetes.io/cluster/ ou contenha a tag kubernetes.io/cluster/ CLUSTER_UID , onde CLUSTER_UID é o UID do cluster atual.

Além disso, uma sub-rede destinada ao uso com um balanceador de carga voltado para a Internet deve ter uma rota para o gateway de Internet da VPC.

Se houver várias sub-redes em uma zona de disponibilidade que atendam aos requisitos do balanceador de carga, o GKE na AWS classificará as sub-redes em ordem pelo ID da sub-rede.

Marque suas sub-redes para o uso pretendido

Para que o GKE na AWS descubra automaticamente uma sub-rede para um balanceador de carga, você precisa aplicar uma de duas tags à sub-rede para sinalizar sua disponibilidade. São elas:

  • kubernetes.io/role/elb : aplique esta tag à sua sub-rede para marcá-la como disponível para um balanceador de carga voltado para a Internet. Esta deve ser uma sub-rede pública com uma rota para o Gateway de Internet da sua VPC. Defina a tag como 1 Para aplicar esta tag, execute o seguinte comando:

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags "Key=kubernetes.io/role/elb,Value=1"
    
  • kubernetes.io/role/internal-elb : aplique esta tag à sua sub-rede para marcá-la como disponível para um balanceador de carga interno. Defina o valor da tag como 1 Para aplicar esta tag, execute o seguinte comando:

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags Key=kubernetes.io/role/internal-elb,Value=1
    

Substitua o seguinte:

  • SUBNET_ID : o ID da sub-rede que você está marcando

Depois de atribuir à sua sub-rede uma tag kubernetes.io/role , você também pode marcá-la com uma ou mais tags kubernetes.io/cluster/ CLUSTER_UID , onde CLUSTER_UID é o UID de um cluster do GKE na AWS. Isso impede que qualquer cluster não listado em uma dessas tags descubra automaticamente a sub-rede para uso por seus balanceadores de carga.

Consulte a documentação do Amazon aws ec2 create-tags para obter mais informações sobre o comando aws ec2 create-tags .

Solução de problemas

O problema mais comum com a configuração do balanceador de carga são sub-redes marcadas incorretamente. Isso pode fazer com que o algoritmo de descoberta automática selecione as sub-redes erradas. Para diagnosticar e resolver esse problema:

  • Se você estiver criando um balanceador de carga voltado para a Internet, certifique-se de que haja pelo menos uma sub-rede pública em cada uma das zonas de disponibilidade que contêm um pool de nós e que as sub-redes estejam marcadas com kubernetes.io/role/elb .

  • Se você estiver criando um balanceador de carga interno, certifique-se de que haja pelo menos uma sub-rede em cada uma das zonas de disponibilidade que contêm um pool de nós e que as sub-redes estejam marcadas com kubernetes.io/role/internal-elb .

  • Verifique se as sub-redes que você deseja descobrir automaticamente possuem tags no formato kubernetes.io/cluster/ CLUSTER_UID . Se uma sub-rede tiver alguma dessas tags nomeando um cluster, ela só poderá ser descoberta automaticamente pelos clusters nomeados. Para resolver isso, exclua todas as tags de nome de cluster (para permitir que a sub-rede seja descoberta automaticamente em qualquer cluster) ou adicione uma tag de nome de cluster com o UID do cluster do GKE na AWS e o valor shared .

  • Verifique o histórico de eventos do Kubernetes com o seguinte comando:

    kubectl get events -A | grep LoadBalancer
    

    Por exemplo, a mensagem de evento could not find any suitable subnets for creating the ELB indica que nenhuma sub-rede pôde ser descoberta automaticamente. Se você receber esse aviso, certifique-se de que suas sub-redes e suas tags estejam corretas e completas.

  • Para listar as sub-redes que podem ser descobertas automaticamente para balanceadores de carga voltados para a Internet, execute o seguinte comando:

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/elb,Values=*"
    

    Substitua VPC_ID pelo ID da sua VPC.

  • Para listar as sub-redes que podem ser descobertas automaticamente para balanceadores de carga internos, execute:

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/internal-elb,Values=*"
    

Próximos passos