Este tópico mostra como configurar um AWS Elastic Load Balancer (ELB) com o GKE na AWS.
Quando você cria um Service 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 Início rápido para criar um ELB clássico voltado para o exterior a partir do Google Cloud console 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, certifique-se de ter executado as seguintes tarefas:
- Conclua os pré-requisitos .
- Instalar um serviço de gerenciamento .
- Crie um cluster de usuários .
- No seu diretório
anthos-aws
, useanthos-gke
para alternar o contexto para seu cluster de usuários. Substitua CLUSTER_NAME pelo nome do seu cluster de usuário.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Tenha a ferramenta de linha de comando
curl
ou uma ferramenta similar instalada.
Selecionando um balanceador de carga externo ou interno
O GKE na AWS cria um balanceador de carga externo (na sua sub-rede pública) ou interno (na sua sub-rede privada), dependendo de uma anotação no 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 nas listas de controle de acesso à rede (ACLs) da sub-rede.
Escolhendo um tipo de balanceador de carga
Escolha se deseja criar um Balanceador de Carga Clássico (ELB Clássico) ou um Balanceador de Carga de Rede (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.
Criando um LoadBalancer
Você cria um balanceador de carga criando uma implantação e expondo essa implantação com um serviço.
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
: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. Você 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 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
NLB Pública
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
Privado Clássico
Crie um LoadBalancer privado 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 Privado
Você cria um NLB privado 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
:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
Visualize 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 se assemelha
elb-id .elb. aws-region .amazonaws.com
.Se você criou um balanceador de carga externo e tem acesso à sub-rede pública da VPC, pode se conectar ao balanceador de carga com
curl
. Substitua external-ip pelo IP da saída dokubectl get service
da etapa anterior.curl external-ip:60000
A saída é semelhante à seguinte:
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 você não conseguir acessar um ponto de extremidade do balanceador de carga, tente marcar suas sub-redes .
O que vem a seguir
Siga o Início rápido para criar um ELB clássico voltado para o exterior a partir do Google Cloud console.
Leia o GKE em Google Cloud documentação sobre Exposição de aplicativos usando serviços .