Balanceamento de carga de rede

Este tópico mostra como configurar um equilibrador de carga da camada 4 (L4) suportado por um equilibrador de carga padrão do Azure através do GKE no Azure .

Quando cria um serviço do tipo LoadBalancer, um controlador do GKE no Azure configura um Azure Load Balancer.

Antes de começar

Selecionar um balanceador de carga público ou privado

Os balanceadores de carga de serviço podem ser públicos, com IPs de front-end públicos, ou internos, acessíveis apenas através de IPs privados.

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

Escolher a sub-rede para balanceadores de carga internos

Ao criar um balanceador de carga interno, o GKE no Azure tem de selecionar a sub-rede na qual colocar o balanceador de carga. Esta sub-rede do equilibrador de carga do serviço predefinido é escolhida nos parâmetros de criação do cluster da seguinte forma:

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

Em alternativa, pode especificar a sub-rede a usar para um determinado equilibrador de carga adicionando a anotação service.beta.kubernetes.io/azure-load-balancer-internal-subnet ao serviço. O valor desta anotação é o nome da sub-rede.

Criar um LoadBalancer de exemplo

Cria um balanceador de carga criando uma implementação e expondo essa implementação com um serviço.

  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. Pode criar um Azure Standard Load Balancer público ou interno. Escolha uma das seguintes opções.

    Copie um dos seguintes manifestos para um ficheiro com o nome my-lb-service.yaml.

    Público

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

    Internos

    Cria um LoadBalancer interno definindo a anotação service.beta.kubernetes.io/azure-load-balancer-internal como "true". O YAML seguinte inclui esta 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 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).

  7. Se criou um balanceador de carga público, pode estabelecer ligação ao balanceador de carga com curl. Substitua external-ip pelo endereço da saída de kubectl get service do passo anterior.

    curl http://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.

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