Nesta página, descrevemos como o GKE na AWS funciona com a AWS para escolher sub-redes para balanceadores de carga de serviço e como marcar sub-redes para serem descobertas automaticamente durante a criação do balanceador de carga de serviço.
Por que você precisa especificar sub-redes
Ao criar balanceadores de carga na nuvem, a AWS precisa saber em quais sub-redes colocá-las. A sub-rede determina as zonas de disponibilidade, os endereços IP e os endpoints do balanceador de carga.
Normalmente, os balanceadores de carga são alocados a uma sub-rede para cada zona de disponibilidade contendo 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, na sigla em inglês) e de duas sub-redes para um balanceador de carga de aplicativo (ALB, na sigla em inglês).
Todas as sub-redes da AWS são públicas (com IPs públicos e uma rota para o gateway da Internet da VPC) ou privadas (sem esses recursos). Os balanceadores de carga voltados para a Internet precisam 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 nenhuma sub-rede com tag disponível
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 os balanceadores de carga serão colocados, marque todas as sub-redes.
Descoberta automática da sub-rede
O GKE na AWS descobrirá automaticamente as sub-redes a serem usadas para um balanceador de carga listando todas as sub-redes na VPC e selecionando até uma sub-rede em cada zona de disponibilidade.
Para que o GKE na AWS descubra automaticamente uma sub-rede, ela precisa:
- receber a tag
kubernetes.io/role/elb
(para um balanceador de carga voltado para a Internet); - ter a tag
kubernetes.io/role/internal-elb
(para um balanceador de carga interno). - Não podem conter tags com o prefixo
kubernetes.io/cluster/
ou contêm a tagkubernetes.io/cluster/CLUSTER_UID
, em queCLUSTER_UID
é o UID do cluster atual.
Além disso, uma sub-rede destinada a uso com um balanceador de carga voltado para a Internet precisa ter uma rota para o gateway da 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 de sub-rede.
Incluir tags nas sub-redes para o uso pretendido
Para que o GKE na AWS descubra automaticamente uma sub-rede para um balanceador de carga, aplique uma das duas tags à sub-rede para sinalizar a disponibilidade dela. São eles:
kubernetes.io/role/elb
: aplique esta tag na sub-rede para marcá-la como disponível para um balanceador de carga voltado para a Internet. Precisa ser uma sub-rede pública com uma rota para o gateway de Internet da VPC. Defina a tag como1
. Para aplicar esse recurso, 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 essa tag à sub-rede para marcá-la como disponível para um balanceador de carga interno. Defina o valor da tag como1
. Para aplicar esse recurso, execute o seguinte comando:aws ec2 create-tags \ --resources SUBNET_ID \ --tags Key=kubernetes.io/role/internal-elb,Value=1
Substitua:
SUBNET_ID
: o ID da sub-rede que você está marcando.
Depois de atribuir uma tag kubernetes.io/role
à sub-rede, também é possível marcá-la com
uma ou mais tags kubernetes.io/cluster/CLUSTER_UID
,
em que CLUSTER_UID é o UID de um GKE no cluster da AWS.
Isso impede que qualquer cluster não listado em uma dessas tags descubra automaticamente a sub-rede para uso pelos balanceadores de carga.
Consulte a documentação
aws ec2 create-tags
da Amazon para 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 é a criação de sub-redes com tags incorretas. Isso pode fazer com que o algoritmo de descoberta automática selecione as sub-redes erradas. Para diagnosticar e resolver esse problema, faça o seguinte:
Se você estiver criando um balanceador de carga voltado para a Internet, verifique se há pelo menos uma sub-rede pública em cada uma das zonas de disponibilidade que contêm um pool de nós e se as sub-redes estão marcadas com
kubernetes.io/role/elb
. de dados.Se você estiver criando um balanceador de carga interno, verifique se há pelo menos uma sub-rede em cada uma das zonas de disponibilidade que contêm um pool de nós e se as sub-redes estão marcadas com
kubernetes.io/role/internal-elb
de dados.Verifique se as sub-redes que você quer descobrir automaticamente têm tags no formato
kubernetes.io/cluster/CLUSTER_UID
. Se uma sub-rede tiver tags que nomeiam um cluster, ela só poderá ser descoberta automaticamente pelos clusters nomeados. Para resolver isso, exclua todas as tags de nome do cluster (para permitir que a sub-rede seja descoberta automaticamente em qualquer cluster) ou adicione uma tag de nome de cluster com o GKE no UID do cluster da AWS e um valorshared
de dados.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 pode ser descoberta automaticamente. Se você receber esse aviso, verifique se as sub-redes e as tags delas estão 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=*"
VPC_ID
: substitua pelo ID do seu modelo.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óximas etapas
Saiba mais sobre balanceamento de carga de rede