Nesta página, descrevemos como configurar um balanceador de carga L4 com um endpoint de balanceador de carga elástico (ELB) ou balanceador de carga de rede (NLB) da AWS.
Para mais informações sobre os outros tipos de balanceadores de carga que podem ser usados com o GKE na AWS, consulte Visão geral do balanceador de carga.
Esta página é destinada a especialistas em redes que querem instalar, configurar e oferecer suporte a equipamentos de rede. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud , consulte Tarefas e funções de usuário comuns do GKE.
Antes de começar
- Crie um cluster
e configure kubectlpara se conectar a ele.
- Marque as sub-redes do balanceador de carga de serviço. Isso é necessário para a descoberta automática de sub-rede.
- Decida se você precisa de um ELB clássico ou de rede.
- Decida se você precisa de um balanceador de carga interno ou voltado para a Internet.
Escolher um tipo de balanceador de carga
O GKE na AWS cria um balanceador de carga de serviço como um balanceador de carga elástico
clássico (ELB clássico) ou um NLB da AWS. Por padrão,
o GKE na 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 balanceador de carga, consulte
Tipos de balanceador de carga
na documentação da AWS.
Escolher um balanceador de carga interno ou voltado para a Internet
Os balanceadores de carga de serviço podem ser voltados para a Internet (com um nome DNS resolvível publicamente) ou internos (somente acessíveis na VPC).
Por padrão, os novos balanceadores de carga estão voltados para a Internet. Para criar um balanceador de carga interno, defina a anotação service.beta.kubernetes.io/aws-load-balancer-internal como "true" no manifesto.
Não é possível aplicar a anotação aws-load-balancer-internal a um Serviço já
existente. Para alternar entre configurações internas e voltadas para a Internet,
é necessário excluir e recriar o LoadBalancer atual.
Escolher as sub-redes
Ao criar balanceadores de carga, a AWS precisa saber em quais sub-redes colocá-las. Por padrão, essas sub-redes são descobertas automaticamente entre as sub-redes na VPC. Isso exige que as sub-redes tenham tags específicas. Para ver detalhes da descoberta automática e da inclusão de tags, consulte Sub-redes do balanceador de carga.
Como alternativa, é possível especificar sub-redes de balanceador de carga com uma anotação adicionando
a anotação service.beta.kubernetes.io/aws-load-balancer-subnets ao
Serviço. O valor dessa anotação é uma lista separada por vírgulas
de IDs de sub-rede
ou nomes de sub-rede, por exemplo,
subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.
Criar um exemplo de balanceador de carga
Para criar um serviço do tipo load balancer, crie e exponha uma implantação com serviço. No exemplo a seguir, você criará um balanceador de carga de amostra.
- Crie a implantação. Os contêineres nesta implantação detectam atividade na porta 50001. Salve o seguinte YAML em um arquivo chamado - 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 implantação com - kubectl apply:- kubectl apply -f my-deployment-50001.yaml
- Verifique se três pods estão em execução: - kubectl get pods --selector=app=products
- Crie um Serviço do tipo - LoadBalancerpara sua implantação.
- Decida o tipo de balanceador de carga que você precisa: - Um ELB clássico voltado para a Internet
- Um NLB voltado para a Internet
- Um ELB clássico interno
- Um NLB interno
 - Escolha a guia que atenda aos seus requisitos e copie o manifesto nele para um arquivo chamado - my-lb-service.yaml.- Clássico voltado 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 voltado para a Internet- Crie um NLB definindo a anotação - service.beta.kubernetes.io/aws-load-balancer-typecomo- nlb. O YAML a seguir inclui essa 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- Para criar um LoadBalancer interno, defina a anotação - service.beta.kubernetes.io/aws-load-balancer-internalcomo- "true". O YAML a seguir inclui essa 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- LB 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 a seguir inclui as duas 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 o nome do host do Serviço com - kubectl get service.- kubectl get service my-lb-service- A saída incluirá uma coluna - EXTERNAL-IPcom um endereço do balanceador de carga (público ou particular, dependendo de como o balanceador de carga foi criado).
- Se você criou um balanceador de carga voltado para a Internet, é possível se conectar ao balanceador de carga com - curlusando o seguinte comando:- curl http://EXTERNAL_IP:60000- Substitua - EXTERNAL_IPpelo endereço da coluna EXTERNAL-IP na etapa anterior.
A saída será assim:
```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```
Como fazer a limpeza
Para remover o serviço e a implantação, use o comando kubectl delete:
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml
Próximas etapas
- Saiba mais sobre a documentação do GKE no Google Cloud sobre como expor aplicativos usando serviços.