Balanceamento de carga de rede

Neste tópico, mostramos como configurar um balanceador de carga L4 respaldado por um balanceador de carga padrão do Azure usando o GKE no Azure .

Quando você cria um serviço do tipo LoadBalancer, um GKE no controlador do Azure configura um balanceador de carga do Azure.

Antes de começar

Como selecionar um balanceador de carga público ou particular

Os balanceadores de carga de Serviço podem ser públicos (com IPs de front-end públicos) ou internos (acessíveis somente por meio de IPs particulares).

Por padrão, um Serviço novo é público. Para criar um balanceador de carga interno, defina a anotação service.beta.kubernetes.io/azure-load-balancer-internal como "true" no manifesto.

Como escolher uma sub-rede para balanceadores de carga internos

Ao criar um balanceador de carga interno, o GKE no Azure precisa escolher a sub-rede para colocar o balanceador de carga. Essa sub-rede do balanceador de carga de serviço padrão é escolhida nos parâmetros de criação do cluster da seguinte maneira:

  1. Se especificado e não vazio, cluster.networking.serviceLoadBalancerSubnetId
  2. Caso contrário, cluster.controlPlane.subnetId

Como alternativa, é possível especificar a sub-rede que serár usada para um determinado balanceador de carga adicionando a anotação service.beta.kubernetes.io/azure-load-balancer-internal-subnet ao Serviço. O valor dessa anotação é o nome da sub-rede.

Como criar um LoadBalancer de exemplo

Você cria um balanceador de carga criando uma implantação e expondo essa implantação com um serviço.

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

    kubectl apply -f my-deployment-50001.yaml
    
  3. Verifique se três pods estão em execução:

    kubectl get pods --selector=app=products
    
  4. Crie um Serviço do tipo LoadBalancer para sua implantação. É possível criar um balanceador de carga Standard do Azure que seja público ou interno. Escolha uma das seguintes opções:

    Copie um dos seguintes manifestos para um arquivo chamado my-lb-service.yaml.

    Pública

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    Interno

    Para criar um LoadBalancer interno, defina a anotação service.beta.kubernetes.io/azure-load-balancer-internal como "true". O YAML a seguir inclui essa anotação. yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. Crie o Serviço com kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  6. Veja o nome do host do Serviço com kubectl get service.

    kubectl get service my-lb-service
    

    A saída incluirá uma coluna EXTERNAL-IP com um endereço do balanceador de carga (público ou particular, dependendo de como o balanceador de carga foi criado).

  7. Se você criou um balanceador de carga público, será possível se conectar ao balanceador de carga com curl. Substitua external-ip pelo endereço da saída de kubectl get service da etapa anterior.

    curl http://external-ip:60000
    

    A saída será assim:

    Hello, world!
    Version: 2.0.0
    Hostname: my-deployment-50001-84b6dc5555-zmk7q
    

Limpar

Para remover o Serviço e a implantação, use kubectl delete.

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml