Sub-redes do balanceador de carga

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

Por que motivo tem de especificar sub-redes

Ao criar balanceadores de carga, a AWS precisa de saber em que sub-redes os colocar. A sub-rede determina as zonas de disponibilidade, os endereços IP e os pontos finais do balanceador de carga.

Normalmente, os balanceadores de carga são atribuídos a uma sub-rede para cada zona de disponibilidade que contenha um conjunto de nós. A AWS precisa de, pelo menos, uma sub-rede disponível para criar um Network Load Balancer (NLB) e, pelo menos, duas sub-redes para um Application Load Balancer (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 estas funcionalidades). Os balanceadores de carga virados para a Internet têm de estar localizados em sub-redes públicas. Os balanceadores de carga internos podem residir em sub-redes públicas ou privadas.

Se não existirem sub-redes etiquetadas disponíveis

Se o GKE no AWS precisar de criar um balanceador de carga e não estiverem disponíveis ou não tiverem capacidade sub-redes etiquetadas, pode criar o balanceador de carga noutra sub-rede. Para evitar esta situação e controlar em que sub-redes os equilibradores de carga são colocados, deve etiquetar todas as suas sub-redes.

Deteção automática de sub-redes

O GKE no AWS descobre automaticamente as sub-redes a usar para um equilibrador de carga ao listar todas as sub-redes na VPC e selecionar até uma sub-rede de cada zona de disponibilidade.

Para que o GKE no AWS descubra automaticamente uma sub-rede, esta tem de:

  • Ter a etiqueta kubernetes.io/role/elb (para um balanceador de carga virado para a Internet)
  • Ter a etiqueta kubernetes.io/role/internal-elb (para um balanceador de carga interno)
  • Não contêm etiquetas com o prefixo kubernetes.io/cluster/ ou contêm a etiqueta kubernetes.io/cluster/CLUSTER_UID, em que CLUSTER_UID é o UID do cluster atual.

Além disso, uma sub-rede destinada a utilização com um equilibrador de carga virado para a Internet tem de ter uma rota para o gateway de Internet da VPC.

Se existirem várias sub-redes numa zona de disponibilidade que satisfaçam os requisitos do equilibrador de carga, o GKE on AWS classifica as sub-redes por ordem do respetivo ID de sub-rede.

Etiquete as suas sub-redes para a utilização pretendida

Para que o GKE no AWS descubra automaticamente uma sub-rede para um equilibrador de carga, tem de aplicar uma de duas etiquetas à sub-rede para sinalizar a respetiva disponibilidade. São eles:

  • kubernetes.io/role/elb: aplique esta etiqueta à sua sub-rede para a marcar como disponível para um balanceador de carga virado para a Internet. Tem de ser uma sub-rede pública com uma rota para o gateway de Internet da sua VPC. Defina a etiqueta como 1. Para aplicar esta etiqueta, 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 etiqueta à sua sub-rede para a marcar como disponível para um equilibrador de carga interno. Defina o valor da etiqueta como 1. Para aplicar esta etiqueta, 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 está a etiquetar

Depois de atribuir à sub-rede uma etiqueta kubernetes.io/role, também pode etiquetá-la com uma ou mais etiquetas kubernetes.io/cluster/CLUSTER_UID, em que CLUSTER_UID é o UID de um cluster do GKE no AWS. Isto impede que qualquer cluster não listado numa destas etiquetas detete automaticamente a sub-rede para utilização pelos respetivos equilibradores de carga.

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

Resolução de problemas

O problema mais comum com a configuração do equilibrador de carga são as sub-redes etiquetadas incorretamente. Isto pode fazer com que o algoritmo de deteção automática selecione as sub-redes erradas. Para diagnosticar e resolver este problema:

  • Se estiver a criar um equilibrador de carga virado para a Internet, certifique-se de que existe, pelo menos, uma sub-rede pública em cada uma das zonas de disponibilidade que contêm um conjunto de nós e que as sub-redes estão etiquetadas com kubernetes.io/role/elb.

  • Se estiver a criar um equilibrador de carga interno, certifique-se de que existe, pelo menos, uma sub-rede em cada uma das zonas de disponibilidade que contêm um conjunto de nós e que as sub-redes estão etiquetadas com kubernetes.io/role/internal-elb.

  • Verifique se as sub-redes que quer detetar automaticamente têm etiquetas do formulário kubernetes.io/cluster/CLUSTER_UID. Se uma sub-rede tiver etiquetas deste tipo a dar nome a um cluster, a sub-rede só pode ser descoberta automaticamente pelos clusters com nome. Para resolver este problema, elimine todas as etiquetas de nome do cluster (para permitir que a sub-rede seja detetada automaticamente a partir de qualquer cluster) ou adicione uma etiqueta de nome do cluster com o UID do cluster do GKE no AWS e um valor de 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 não foi possível detetar automaticamente nenhuma sub-rede. Se receber este aviso, certifique-se de que as suas sub-redes e respetivas etiquetas estão corretas e completas.

  • Para apresentar uma lista das sub-redes que podem ser descobertas automaticamente para equilibradores de carga virados 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 equilibradores de carga internos, execute:

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

Passos seguintes