Criando um balanceador de carga

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:

  • Instalar um serviço de gerenciamento .
  • Crie um cluster de usuários .
  • No seu diretório anthos-aws , use anthos-gke para alternar o contexto para seu cluster de usuários.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Substitua CLUSTER_NAME pelo nome do seu cluster de usuário.
  • 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.

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

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-deployment-50001.yaml
    
  3. Verifique se três Pods estão em execução:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    
  4. 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 como nlb . 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 para nlb

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

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-lb-service.yaml
    
  6. 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 .

  7. 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 do kubectl 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