Este tópico mostra como configurar um AWS Elastic Load Balancer (ELB) com o GKE no AWS.
Quando cria um serviço do tipo LoadBalancer
, um controlador do GKE on AWS configura um ELB clássico ou de rede na AWS.
Também pode seguir o Início rápido para criar um ELB clássico externo a partir da consola Google Cloud ou criar um equilibrador de carga de aplicações (ALB) da AWS.
Antes de começar
Antes de começar a usar o GKE on AWS, certifique-se de que realizou as seguintes tarefas:
- Cumpra os pré-requisitos.
- Instale um serviço de gestão.
- Crie um cluster de utilizadores.
- No diretório do
anthos-aws
, useanthos-gke
para mudar o contexto para o cluster de utilizadores. Substitua CLUSTER_NAME pelo nome do cluster de utilizadores.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Ter a ferramenta de linha de comandos
curl
ou uma ferramenta semelhante instalada.
Selecionar um balanceador de carga externo ou interno
O GKE on AWS cria um balanceador de carga externo (na sua sub-rede pública) ou interno (na sua sub-rede privada) consoante uma anotação ao recurso LoadBalancer.
Se selecionar um equilibrador de carga externo, este fica acessível pelos endereços IP permitidos nos grupos de segurança do conjunto de nós e nas listas de controlo de acesso (ACLs) da sub-rede.
Escolher um tipo de balanceador de carga
Escolha se quer criar um balanceador de carga clássico (ELB clássico) ou um balanceador de carga de rede (NLB). Para mais informações sobre as diferenças entre os tipos de balanceadores de carga, consulte Tipos de balanceadores de carga na documentação da AWS.
Criar um LoadBalancer
Cria um balanceador de carga criando uma implementação e expondo essa implementação com um serviço.
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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
Verifique se estão a ser executados três pods:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
Crie um serviço do tipo
LoadBalancer
para a sua implementação. Pode criar um ELB clássico ou de rede na sua sub-rede pública ou privada. 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 privada
- Um NLB na sub-rede privada
Em seguida, copie o seguinte manifesto para um ficheiro denominado
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
NLB Public
Cria 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 privado
Crie um LoadBalancer privado 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 privado
Crie um NLB privado 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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
Veja o nome de anfitrião 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'}"
O resultado é semelhante a
elb-id.elb.aws-region.amazonaws.com
.Se criou um balanceador de carga virado para o exterior e tem acesso à sub-rede da VPC pública, pode ligar-se ao balanceador de carga com
curl
. Substitua external-ip pelo IP da saída dekubectl get service
do passo anterior.curl external-ip:60000
O resultado é semelhante ao seguinte:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
Limpar
Para remover o serviço e a implementaçã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
Resolução de problemas
Se não conseguir aceder a um ponto final do balanceador de carga, experimente etiquetar as suas sub-redes.
O que se segue
Siga o início rápido para criar um ELB clássico virado para o exterior a partir da Google Cloud consola.
Leia a documentação do GKE on Google Cloud sobre como expôr aplicações através de serviços.