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
- Tem de criar um cluster
e configurar
kubectl
para aceder ao cluster.
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:
- Se for especificado e não estiver vazio,
cluster.networking.serviceLoadBalancerSubnetId
- 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.
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"
Crie a implementação com
kubectl apply
:kubectl apply -f my-deployment-50001.yaml
Verifique se estão a ser executados três pods:
kubectl get pods --selector=app=products
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
Crie o serviço com
kubectl apply
:kubectl apply -f my-lb-service.yaml
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).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 dekubectl 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