Esta página descreve como configurar um balanceador de carga L4 com um endpoint do AWS Elastic Load Balancer (ELB) ou do Network Load Balancer (NLB).
Para obter mais informações sobre outros tipos de balanceadores de carga que você pode usar com o GKE na AWS, consulte Visão geral do balanceador de carga .
Esta página é para especialistas em redes que desejam instalar, configurar e oferecer suporte a equipamentos de rede. Para saber mais sobre funções comuns e exemplos de tarefas que mencionamos em Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE Enterprise .
Antes de começar
- Crie um cluster e configure
kubectl
para 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-redes.
- 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.
Escolha um tipo de balanceador de carga
O GKE na AWS cria um balanceador de carga de serviço como um AWS Classic Elastic Load Balancer (ELB clássico) ou NLB. 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 obter 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.
Escolha 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 publicamente resolvível) ou internos (acessíveis somente dentro da sua VPC).
Por padrão, os novos balanceadores de carga sã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 seu manifesto.
Não é possível aplicar a anotação aws-load-balancer-internal
a um serviço existente. Para alternar entre as configurações internas e voltadas para a Internet, você deve excluir e recriar o LoadBalancer existente.
Escolha suas sub-redes
Ao criar balanceadores de carga, a AWS precisa saber em quais sub-redes colocá-los. Por padrão, essas sub-redes são descobertas automaticamente entre as sub-redes na VPC. Isso requer que as sub-redes tenham tags específicas. Para obter detalhes sobre descoberta automática e marcação de sub-redes, consulte Sub-redes do Balanceador de Carga .
Como alternativa, você pode especificar sub-redes do 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 ou nomes de sub-redes — por exemplo subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef
.
Crie um balanceador de carga de exemplo
Crie um Serviço do tipo LoadBalancer criando uma implantação e expondo essa implantação com um Serviço. No exemplo a seguir, você cria um balanceador de carga de exemplo.
Crie sua implantação. Os contêineres nesta implantação escutam 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
LoadBalancer
para sua implantação.Decida que tipo de balanceador de carga 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 aba que corresponde aos seus requisitos e copie o manifesto dentro dela 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-type
comonlb
. 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
Crie um LoadBalancer interno definindo a anotação
service.beta.kubernetes.io/aws-load-balancer-internal
como"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
NLB interno
Você cria um NLB interno definindo as anotações:
-
service.beta.kubernetes.io/aws-load-balancer-internal
para"true"
-
service.beta.kubernetes.io/aws-load-balancer-type
paranlb
O YAML a seguir 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 o endereço do serviço com
kubectl get service
.kubectl get service my-lb-service
A saída incluirá uma coluna
EXTERNAL-IP
com um endereço do balanceador de carga (público ou privado, dependendo de como o balanceador de carga foi criado).Se você criou um balanceador de carga voltado para a Internet, pode se conectar a ele com
curl
usando o seguinte comando:curl http://EXTERNAL_IP:60000
Substitua
EXTERNAL_IP
pelo endereço da coluna EXTERNAL-IP na etapa anterior.
A saída é semelhante à seguinte:
```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```
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óximos passos
Saiba mais sobre o GKE em Google Cloud documentação sobre Exposição de aplicativos usando serviços .
Veja a lista completa de anotações suportadas .