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
- 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, 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:
- 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ú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
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
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