Neste tópico, mostramos como configurar um AWS Elastic Load Balancer (ELB) com o GKE na AWS.
Quando você cria um Serviço do tipo LoadBalancer
, um controlador do GKE na AWS configura um
ELB clássico ou de rede na AWS.
Você também pode seguir o Guia de início rápido para criar um ELB clássico externo no console do Google Cloud ou Criar um balanceador de carga de aplicativo (ALB) da AWS.
Antes de começar
Antes de começar a usar o GKE na AWS, verifique se você executou as seguintes tarefas:
- Conclua os Pré-requisitos.
- Instale um serviço de gerenciamento.
- Crie um cluster de usuário.
- No diretório
anthos-aws
, useanthos-gke
para alternar o contexto para o cluster de usuário.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Substitua CLUSTER_NAME pelo nome do cluster de usuário. - Tenha a ferramenta de linha de comando
curl
ou uma ferramenta semelhante instalada.
Como selecionar um balanceador de carga externo ou interno
O GKE na AWS cria um balanceador de carga externo, na sub-rede pública, ou interno, na sub-rede privada, dependendo de uma anotação para o recurso LoadBalancer.
Se você selecionar um balanceador de carga externo, ele poderá ser acessado pelos endereços IP permitidos nos grupos de segurança do pool de nós e pelo controle de acesso à rede da sub-rede. (ACLs).
Como escolher um tipo de balanceador de carga
Escolha se você quiser criar um balanceador de carga clássico (ELB clássico) ou um balanceador de carga de rede (NLB, na sigla em inglês). 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.
Como criar um LoadBalancer
Você cria um balanceador de carga criando uma implantação e expondo essa implantação com um serviço.
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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
Verifique se três pods estão em execução:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Crie um Serviço do tipo
LoadBalancer
para sua implantação. É possível criar um ELB clássico ou de rede na sua sub-rede pública ou particular. Escolha uma das seguintes opções:- Um ELB clássico na sub-rede pública
- Um NLB na sub-rede pública
- Um ELB clássico na sub-rede particular
- Um NLB na sub-rede particular
Em seguida, copie o seguinte manifesto para um arquivo chamado
my-lb-service.yaml
.Público (clássico)
apiVersion: v1 kind: Service metadata: name: my-lb-service spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
Público (NLB)
Você cria 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
Particular (clássico)
Para criar um LoadBalancer particular, defina 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
Particular (NLB)
Crie um NLB particular 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 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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
Veja o nome do host do Serviço com
kubectl get service
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get service my-lb-service \ --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
A saída é semelhante a
elb-id.elb.aws-region.amazonaws.com
.Se você tiver criado um balanceador de carga externo e tiver acesso à sub-rede VPC pública, será possível se conectar ao balanceador de carga com
curl
. Substitua external-ip pelo IP da saída dekubectl get service
da etapa anterior.curl external-ip:60000
A saída será assim:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Limpeza
Para remover o Serviço e a implantação, use kubectl delete
.
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-lb-service.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-deployment-50001.yaml
Solução de problemas
Se não for possível acessar um endpoint do balanceador de carga, tente incluir tags nas sub-redes.
A seguir
Siga o Guia de início rápido para criar um ELB externo externamente no Console do Google Cloud.
Crie um balanceador de carga de aplicativo da AWS (ALB, na sigla em inglês).
Leia a documentação do GKE no Google Cloud sobre como expor aplicativos usando serviços.