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
- Você deve criar um cluster e configurar
kubectl
para acessá-lo.
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:
- Se especificado e não vazio,
cluster.networking.serviceLoadBalancerSubnetId
- 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.
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"
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. 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
Crie o serviço com
kubectl apply
:kubectl apply -f my-lb-service.yaml
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).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 dokubectl 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