Esta página descreve como configurar um balanceador de carga L4 com um ponto final do AWS Elastic Load Balancer (ELB) ou de um Network Load Balancer (NLB).
Para mais informações sobre os outros tipos de balanceadores de carga que pode usar com o GKE no AWS, consulte a vista geral do balanceador de carga.
Esta página destina-se a especialistas de redes que pretendam instalar, configurar e prestar apoio técnico a equipamentos de rede. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.
Antes de começar
- Crie um cluster
e configure kubectlpara se ligar a ele.
- Etiquete as sub-redes do balanceador de carga do serviço. Isto é necessário para a deteção automática de sub-redes.
- Decida se precisa de um ELB clássico ou de um ELB de rede.
- Decida se precisa de um balanceador de carga virado para a Internet ou interno.
Escolha um tipo de balanceador de carga
O GKE no AWS cria um balanceador de carga de serviço como um AWS Classic
Elastic Load Balancer (Classic ELB) ou um NLB. Por predefinição, o GKE no AWS cria um ELB clássico. Para criar um NLB, defina a anotação service.beta.kubernetes.io/aws-load-balancer-type como nlb.
Para mais informações sobre as diferenças entre os tipos de balanceadores de carga, consulte o artigo Tipos de balanceadores de carga na documentação da AWS.
Escolha um balanceador de carga interno ou virado para a Internet
Os balanceadores de carga de serviços podem estar virados para a Internet (com um nome DNS resolvível publicamente) ou ser internos (acessíveis apenas na sua VPC).
Por predefinição, os novos equilibradores de carga estão virados para a Internet. Para criar um equilibrador de carga interno, defina a anotação service.beta.kubernetes.io/aws-load-balancer-internal no seu manifesto como "true".
Não pode aplicar a anotação aws-load-balancer-internal a um serviço existente. Para alternar entre as configurações viradas para a Internet e as configurações internas, tem de
eliminar e recriar o LoadBalancer existente.
Escolha as suas sub-redes
Ao criar balanceadores de carga, a AWS precisa de saber em que sub-redes os colocar. Por predefinição, estas sub-redes são detetadas automaticamente entre as sub-redes na VPC. Isto requer que as sub-redes tenham etiquetas específicas. Para ver detalhes da deteção automática e da etiquetagem de sub-redes, consulte o artigo Sub-redes do equilibrador de carga.
Em alternativa, pode especificar sub-redes do equilibrador de carga com uma anotação, adicionando a anotação service.beta.kubernetes.io/aws-load-balancer-subnets ao serviço. O valor desta anotação é uma lista separada por vírgulas de IDs de sub-redes ou nomes de sub-redes, por exemplo, subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.
Crie um exemplo de balanceador de carga
Cria um serviço do tipo LoadBalancer criando uma implementação e expondo essa implementação com um serviço. No exemplo seguinte, cria um exemplo de equilibrador de carga.
- Crie a sua implementação. Os contentores nesta implementação ouvem na porta 50001. Guarde o seguinte YAML num ficheiro com o nome - my-deployment-50001.yaml:- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment-50001 spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/google-samples/hello-app:2.0" env: - name: "PORT" value: "50001"
- Crie a implementação com - kubectl apply:- kubectl apply -f my-deployment-50001.yaml
- Verifique se estão a ser executados três pods: - kubectl get pods --selector=app=products
- Crie um serviço do tipo - LoadBalancerpara a sua implementação.
- Decida que tipo de balanceador de carga precisa: - Um ELB clássico virado para a Internet
- Um NLB virado para a Internet
- Um ELB clássico interno
- Um NLB interno
 - Escolha o separador que corresponde aos seus requisitos e copie o manifesto no mesmo para um ficheiro com o nome - my-lb-service.yaml.- Clássico virado para a Internet- apiVersion: v1 kind: Service metadata: name: my-lb-service spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001- NLB virado para a Internet- Crie um NLB definindo a anotação - service.beta.kubernetes.io/aws-load-balancer-typecomo- nlb. O YAML seguinte inclui esta anotação.- apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001- Clássico interno- Cria um LoadBalancer interno definindo a anotação - service.beta.kubernetes.io/aws-load-balancer-internalcomo- "true". O YAML seguinte inclui esta anotação.- apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001- NLB interno- Crie um NLB interno definindo as anotações: - service.beta.kubernetes.io/aws-load-balancer-internala- "true"
- service.beta.kubernetes.io/aws-load-balancer-typea- nlb
 - O YAML seguinte inclui ambas as anotações. - apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
- Crie o serviço com - kubectl apply:- kubectl apply -f my-lb-service.yaml
- Veja a morada do serviço com o - kubectl get service.- kubectl get service my-lb-service- O resultado inclui uma coluna - EXTERNAL-IPcom um endereço do balanceador de carga (público ou privado, consoante a forma como o balanceador de carga foi criado).
- Se criou um balanceador de carga virado para a Internet, pode ligar-se ao balanceador de carga com - curlatravés do seguinte comando:- curl http://EXTERNAL_IP:60000- Substitua - EXTERNAL_IPpelo endereço da coluna EXTERNAL-IP no passo anterior.
O resultado é semelhante ao seguinte:
```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```
Limpar
Para remover o serviço e a implementação, use o comando kubectl delete:
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml
Passos seguintes
- Saiba mais sobre a Google Cloud documentação do GKE on Expor aplicações através de serviços. 
- Consulte a lista completa de anotações suportadas.