Crie um balanceador de carga de rede

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

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.

  1. 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"
    
  2. Crie a implementação com kubectl apply:

    kubectl apply -f my-deployment-50001.yaml
    
  3. Verifique se estão a ser executados três pods:

    kubectl get pods --selector=app=products
    
  4. Crie um serviço do tipo LoadBalancer para a sua implementação.

  5. 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 como nlb. 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 a nlb

    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
    
  6. Crie o serviço com kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  7. 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).

  8. 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