Balanceamento de carga de rede
Nesta página, mostramos como configurar um balanceador de carga L4 com suporte de um balanceador de carga Standard do Azure usando clusters do 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
- Crie um cluster
e configure
kubectl
para acessar o cluster.
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, os clusters do GKE no Azure precisam escolher a sub-rede em que 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:
- Se especificado e não vazio,
cluster.networking.serviceLoadBalancerSubnetId
- 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.
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"
Crie a implantação com
kubectl apply
:kubectl apply -f my-deployment-50001.yaml
Verifique se três pods estão em execução:
kubectl get pods --selector=app=products
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ú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
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
Crie o Serviço com
kubectl apply
:kubectl apply -f my-lb-service.yaml
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).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 dekubectl 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
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