Esta página descreve como configurar um balanceador de carga L4 com um Elastic Load Balancer (ELB) da AWS ou um endpoint de 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
kubectl
para estabelecer ligação ao mesmo. - 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 on 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 on 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 configurações viradas para a Internet e 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
LoadBalancer
para 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-type
comonlb
. 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-internal
como"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-internal
a"true"
service.beta.kubernetes.io/aws-load-balancer-type
anlb
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-IP
com 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 estabelecer ligação ao balanceador de carga com
curl
através do seguinte comando:curl http://EXTERNAL_IP:60000
Substitua
EXTERNAL_IP
pelo 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.