Configurar um Load Balancer de Serviço
As configurações do Load Balancer são realizadas através de Annotations no recurso Service.
Alterar as configurações do Load Balancer manualmente podem torná-lo inutilizável pelo Cluster Kubernetes. Configure-o apenas através de ferramentas como kubectl.
As configurações de Load Balancer são diferentes para as versões v3 e v1 do produto de Kubernetes.
Clique aqui para mais informações sobre as versões do produto de Kubernetes.
v3
Abaixo estão listadas as Annotations suportadas pelo Load Balancer no produto de Kubernetes versão v3.
Visibilidade (Externo e Interno)
Define a visibilidade do Load Balancer durante a criação do Service.
Annotation: magalu.cloud/load-balancer-visibility.
Valor padrão: external.
Valores:
external: O Load Balancer será exposto à Internet através de um IP público. O IP público será reservado do pool de IPs da Magalu Cloud e será associado ao Load Balancer.internal: O Load Balancer receberá um IP interno da VPC. Essa abordagem permite que você consiga expor a aplicação internamente sem que ela seja acessível através da Internet.
O exemplo abaixo cria um Load Balancer de serviço interno:
cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
name: nginx-internal
annotations:
magalu.cloud/load-balancer-visibility: internal
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
EOF
Verifique o IP interno do Load Balancer com o comando abaixo:
kubectl get service nginx-internal -w
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-internal LoadBalancer 10.104.18.78 <pending> 80:32392/TCP 22s
nginx-internal LoadBalancer 10.104.18.78 172.18.32.9 80:32392/TCP 30s
Retenção do IP Público
Define a política de reaproveitamento do IP público durante a exclusão de um Load Balancer de serviço.
Annotation: magalu.cloud/public-ip-reclaim-policy.
Valor padrão: delete.
Valores:
retain: Durante a exclusão do Service, o IP público associado ao Load Balancer não será excluído e poderá ser reutilizado. O IP público também será retido caso a Annotationmagalu.cloud/load-balancer-public-ip-idseja explicitamente usada.delete: O IP público associado ao Load Balancer será removido durante a exclusão do Service.
No exemplo abaixo, o Service é criado com a Annotation magalu.cloud/public-ip-reclaim-policy, utilizando o valor retain.
cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
name: nginx
annotations:
magalu.cloud/public-ip-reclaim-policy: retain
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
EOF
Verifique as informações do Service:
kubectl get service nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.101.170.119 201.23.69.201 80:31198/TCP 34s
É possível consultar as informações do IP público através da CLI da MGC. Verificamos que o seu status atual é in_use.
mgc network public-ips list | grep '201.23.69.201' -C10
[...]
- created_at: 2025-11-21T15:10:52.576443
description: Public IP for Load Balancer.
error: null
external_id: null
id: 9812d66c-f1ee-4210-aac1-64740d9fce31
port_id: null
project_type: default
public_ip: 201.23.69.201
# definição do status
status: in_use
tenant_id: 00000000-0000-0000-0000-000000000000
updated: 2025-11-21T15:10:52.576444
vpc_id: 00000000-0000-0000-0000-000000000000
[...]
Após deletar o Service, podemos verificar que o IP ainda está listado, mas agora seu status é created:
kubectl delete service nginx
mgc network public-ips list | grep '201.23.69.201' -C10
[...]
- created_at: 2025-11-21T15:10:52.576443
description: Public IP for Load Balancer.
error: null
external_id: null
id: 9812d66c-f1ee-4210-aac1-64740d9fce31
port_id: null
project_type: default
public_ip: 201.23.69.201
# definição do status
status: created
tenant_id: 00000000-0000-0000-0000-000000000000
updated: 2025-11-21T15:13:20.965765
vpc_id: 00000000-0000-0000-0000-000000000000
[...]
Utilizando um IP Público Existente
Para criar um Load Balancer de serviço utilizando um IP público existente é necessário ter um IP público reservado com o status de created.
Caso deseje criar um IP público, confira a documentação aqui.
Annotation: magalu.cloud/load-balancer-public-ip-id.
Valor padrão: "".
Valores:
"": Com o valor vazio, o Service cria um IP público durante a criação do Load Balancer.<ip-id>: Ao passar o ID de um IP Público com o statuscreated, o Load Balancer é criado com o IP fornecido.
Aproveitando o exemplo acima, precisamos coletar o ID do IP público:
mgc network public-ips list | grep '201.23.69.201' -C10
[...]
- created_at: 2025-11-21T15:10:52.576443
description: Public IP for Load Balancer.
error: null
external_id: null
# utilize esse ID
id: 9812d66c-f1ee-4210-aac1-64740d9fce31
port_id: null
project_type: default
public_ip: 201.23.69.201
status: created
tenant_id: 00000000-0000-0000-0000-000000000000
updated: 2025-11-21T15:13:20.965765
vpc_id: 00000000-0000-0000-0000-000000000000
[...]
Com o ID em mãos, podemos criar um Load Balancer de serviço com a Annotation magalu.cloud/load-balancer-public-ip-id:
cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
name: nginx-com-ip
annotations:
magalu.cloud/load-balancer-public-ip-id: 9812d66c-f1ee-4210-aac1-64740d9fce31
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
EOF
Verifique as informações do Service:
kubectl get service nginx-com-ip -w
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-com-ip LoadBalancer 10.96.130.94 <pending> 80:32444/TCP 8s
nginx-com-ip LoadBalancer 10.96.130.94 201.23.69.201 80:32444/TCP 29s
Após a criação do Load Balancer, podemos verificar o status created no IP público:
mgc network public-ips list | grep '201.23.69.201' -C10
[...]
- created_at: 2025-11-21T15:10:52.576443
description: Public IP for Load Balancer.
error: null
external_id: null
id: 9812d66c-f1ee-4210-aac1-64740d9fce31
port_id: null
project_type: default
public_ip: 201.23.69.201
# sendo utilizado
status: in_use
tenant_id: 00000000-0000-0000-0000-000000000000
updated: 2025-11-21T15:13:20.965765
vpc_id: 00000000-0000-0000-0000-000000000000
[...]
Restringindo acesso ao Load Balancer
Ao utilizar um Load Balancer de serviço, você pode especificar as faixas de IP (CIDRs) que têm permissão para acessá-lo utilizando o campo spec.loadBalancerSourceRanges. Este campo recebe uma lista de CIDRs, utilizado pelo serviço de Load Balancer da Magalu Cloud para configurar sua lista de ACLs.
Por padrão, o acesso ao Load Balancer é liberado para todos os IPs.
Atualmente, somente endereços e faixas IPv4 podem ser configurados. Não há suporte para IPv6.
Ao utilizar o campo spec.loadBalancerSourceRanges, você obrigatoriamente precisará incluir a faixa de IPs do Cluster CIDR à lista. Para consultar esse CIDR, utilize o comando abaixo:
mgc kubernetes cluster get <cluster-id>
[...]
cluster_ipv4_cidr: 192.168.0.0/16
[...]
Com o exemplo abaixo, crie Load Balancer de serviço limitando seu acesso para o endereço 186.251.145.190 e para a faixa de IPs 201.23.12.0/24.
Caso o endereço seja um IP único, é necessário adicionar a máscara /32 ao CIDR. Portanto, o endereço 186.251.145.190 se torna 186.251.145.190/32.
cat <<EOF | kubectl apply -f -
kind: Service
apiVersion: v1
metadata:
name: nginx-com-restricoes
spec:
loadBalancerSourceRanges:
- 186.251.145.198/32
- 201.23.12.0/24
# Cluster CIDR
- 192.168.0.0/16
selector:
app: nginx
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
EOF
Verifique as informações do Service:
kubectl get service nginx-com-restricoes -w
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-com-restricoes LoadBalancer 10.101.235.48 <pending> 80:30584/TCP 4s
nginx-com-restricoes LoadBalancer 10.101.235.48 201.23.72.176 80:30584/TCP 35s
Caso o seu endereço de IP não esteja na lista, o acesso ao endereço do Load Balancer não será permitido:
curl http://201.23.72.176 --connect-timeout 2
curl: (28) Connection timeout after 2001 ms
v1
Para os Cluster do produto de Kubernetes da versão v1, todas as Annotations disponíveis estão documentadas aqui.