Balanceamento de carga de rede

Este tópico mostra como configurar um balanceador de carga L4 apoiado por um Balanceador de Carga Padrão do Azure usando o GKE no Azure.

Quando você cria um Service do tipo LoadBalancer , um controlador do GKE no Azure configura um Azure Load Balancer .

Antes de começar

Selecionando 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 somente por meio de IPs privados.

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

Escolhendo 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 a partir dos 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, você pode especificar a sub-rede a ser 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.

Criando 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 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 :

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

    Copie um dos seguintes manifestos para um arquivo chamado 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
    

    Interno

    Crie um LoadBalancer interno definindo a anotação service.beta.kubernetes.io/azure-load-balancer-internal como "true" . O YAML a seguir 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 o endereço 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 privado, dependendo de como o balanceador de carga foi criado).

  7. Se você criou um balanceador de carga público, pode se conectar a ele com curl . Substitua external-ip pelo endereço da saída do kubectl get service da etapa anterior.

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

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