Usar um balanceador de carga interno com o Serviço Kubernetes do Azure (AKS)
Você pode criar e usar um balanceador de carga interno para restringir o acesso aos seus aplicativos no Serviço Kubernetes do Azure (AKS). Um balanceador de carga interno não tem um IP público e torna um serviço Kubernetes acessível apenas para aplicativos que podem alcançar o IP privado. Esses aplicativos podem estar dentro da mesma VNET ou em outra VNET através do emparelhamento VNET. Este artigo mostra como criar e usar um balanceador de carga interno com o AKS.
Importante
Em 30 de setembro de 2025, o Basic Load Balancer será aposentado. Para obter mais informações, veja o anúncio oficial. Se você estiver usando o Basic Load Balancer, certifique-se de atualizar para o Standard Load Balancer antes da data de desativação. Para obter orientação sobre atualização, visite Atualizando do Basic Load Balancer - Guidance.
Antes de começar
- Este artigo pressupõe que você tenha um cluster AKS existente. Se precisar de um cluster AKS, você pode criar um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
- Você precisa da CLI do Azure versão 2.0.59 ou posterior. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI). - Se você quiser usar uma sub-rede ou grupo de recursos existente, a identidade do cluster AKS precisa de permissão para gerenciar recursos de rede. Para obter informações, consulte Usar rede kubenet com seus próprios intervalos de endereços IP no AKS ou Configurar rede CNI do Azure no AKS. Se você estiver configurando seu balanceador de carga para usar um endereço IP em uma sub-rede diferente, verifique se a identidade do cluster AKS também tem acesso de leitura a essa sub-rede.
- Para obter mais informações sobre permissões, consulte Delegar acesso AKS a outros recursos do Azure.
Criar um balanceador de carga interno
Crie um manifesto de serviço nomeado
internal-lb.yaml
com o tipoLoadBalancer
de serviço e aazure-load-balancer-internal
anotação.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Implante o balanceador de carga interno usando o
kubectl apply
comando. Este comando cria um balanceador de carga do Azure no grupo de recursos do nó conectado à mesma rede virtual que o cluster AKS.kubectl apply -f internal-lb.yaml
Exiba os detalhes do serviço usando o
kubectl get service
comando.kubectl get service internal-app
O endereço IP do balanceador de carga interno é mostrado na
EXTERNAL-IP
coluna, conforme mostrado na saída do exemplo a seguir. Neste contexto, External refere-se à interface externa do balanceador de carga. Isso não significa que ele recebe um endereço IP público e externo. Este endereço IP é atribuído dinamicamente a partir da mesma sub-rede que o cluster AKS.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
Especificar um endereço IP
Quando você especifica um endereço IP para o balanceador de carga, o endereço IP especificado deve residir na mesma rede virtual que o cluster AKS, mas ainda não pode ser atribuído a outro recurso na rede virtual. Por exemplo, você não deve usar um endereço IP no intervalo designado para a sub-rede do Kubernetes dentro do cluster AKS. Usar um endereço IP já atribuído a outro recurso na mesma rede virtual pode causar problemas com o balanceador de carga.
Você pode usar o az network vnet subnet list
comando da CLI do Azure ou o Get-AzVirtualNetworkSubnetConfig
cmdlet do PowerShell para obter as sub-redes em sua rede virtual.
Para obter mais informações sobre sub-redes, consulte Adicionar um pool de nós com uma sub-rede exclusiva.
Se quiser usar um endereço IP específico com o balanceador de carga, você tem duas opções: definir anotações de serviço ou adicionar a propriedade LoadBalancerIP ao manifesto YAML do balanceador de carga.
Importante
Adicionar a propriedade LoadBalancerIP ao manifesto YAML do balanceador de carga está substituindo o Kubernetes upstream. Embora o uso atual permaneça o mesmo e se espere que os serviços existentes funcionem sem modificações, é altamente recomendável definir anotações de serviço. Para obter mais informações sobre anotações de serviço, consulte Anotações com suporte do Azure LoadBalancer.
- Definir anotações de serviço
- Adicione a propriedade LoadBalancerIP ao manifesto YAML do balanceador de carga
Defina anotações de serviço usando
service.beta.kubernetes.io/azure-load-balancer-ipv4
para um endereço IPv4 eservice.beta.kubernetes.io/azure-load-balancer-ipv6
para um endereço IPv6.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25 service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Exiba os detalhes do serviço usando o
kubectl get service
comando.kubectl get service internal-app
O endereço IP na coluna deve refletir o
EXTERNAL-IP
endereço IP especificado, conforme mostrado na saída de exemplo a seguir:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Para obter mais informações sobre como configurar seu balanceador de carga em uma sub-rede diferente, consulte Especificar uma sub-rede diferente.
Ligar o serviço Azure Private Link ao balanceador de carga interno
Antes de começar
- Você precisa do Kubernetes versão 1.22.x ou posterior.
- Você precisa de um grupo de recursos existente com uma VNet e uma sub-rede. Este grupo de recursos é onde você cria o ponto de extremidade privado. Se você não tiver esses recursos, consulte Criar uma rede virtual e uma sub-rede.
Criar uma conexão de serviço de Link Privado
Crie um manifesto de serviço nomeado
internal-lb-pls.yaml
com o tipoLoadBalancer
de serviço e asazure-load-balancer-internal
anotações eazure-pls-create
. Para obter mais opções, consulte o documento de design da Integração do Serviço de Link Privado do Azure.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-pls-create: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Implante o balanceador de carga interno usando o
kubectl apply
comando. Este comando cria um balanceador de carga do Azure no grupo de recursos do nó conectado à mesma rede virtual que o cluster AKS. Ele também cria um objeto Private Link Service que se conecta à configuração IP frontend do balanceador de carga associado ao serviço Kubernetes.kubectl apply -f internal-lb-pls.yaml
Exiba os detalhes do serviço usando o
kubectl get service
comando.kubectl get service internal-app
O endereço IP do balanceador de carga interno é mostrado na
EXTERNAL-IP
coluna, conforme mostrado na saída do exemplo a seguir. Neste contexto, External refere-se à interface externa do balanceador de carga. Isso não significa que ele recebe um endereço IP público e externo.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
Exiba os detalhes do objeto Private Link Service usando o
az network private-link-service list
comando.# Create a variable for the node resource group AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv) # View the details of the Private Link Service object az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
Sua saída deve ser semelhante à saída de exemplo a seguir:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Criar um ponto de extremidade privado para o serviço de link privado
Um Ponto Final Privado permite que você se conecte de forma privada ao seu objeto de serviço Kubernetes por meio do Serviço de Link Privado que você criou.
Crie o ponto de extremidade privado usando o
az network private-endpoint create
comando.# Create a variable for the private link service AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv) # Create the private endpoint $ az network private-endpoint create \ -g myOtherResourceGroup \ --name myAKSServicePE \ --vnet-name myOtherVNET \ --subnet pe-subnet \ --private-connection-resource-id $AKS_PLS_ID \ --connection-name connectToMyK8sService
Personalizações PLS via Anotações
Você pode usar as seguintes anotações para personalizar o recurso PLS:
Anotação | valor | Description | Necessário | Predefinição |
---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Booleano indicando se um PLS precisa ser criado. | Necessário | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
String especificando o nome do recurso PLS a ser criado. | Opcional | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
String especificando o nome do Grupo de Recursos onde o recurso PLS será criado | Opcional | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
String que indica a sub-rede na qual o PLS será implantado. Essa sub-rede deve existir na mesma VNET que o pool de back-end. PLS NAT IPs são alocados dentro desta sub-rede. | Opcional | Se service.beta.kubernetes.io/azure-load-balancer-internal-subnet , esta sub-rede ILB é usada. Caso contrário, a sub-rede padrão do arquivo de configuração será usada. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Número total de IPs NAT privados a alocar. | Opcional | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Uma lista separada por espaço de IPs IPv4 estáticos a serem alocados. (IPv6 não é suportado no momento.) O número total de IPs não deve ser maior do que a contagem de ip especificada em service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count . Se houver menos IPs especificados, o restante será alocado dinamicamente. O primeiro IP da lista é definido como Primary . |
Opcional | Todos os IPs são alocados dinamicamente. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
Uma lista separada por espaço de fqdns associados ao PLS. | Opcional | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" ou "false" |
Booleano indicando se o protocolo TCP PROXY deve ser habilitado no PLS para passar informações de conexão, incluindo o ID do link e o endereço IP de origem. Observe que o serviço de back-end DEVE suportar o protocolo PROXY ou as conexões falharão. | Opcional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" ou "*" |
Uma lista separada por espaço de ids de assinatura do Azure para as quais o serviço de link privado é visível. Use "*" para expor o PLS a todos os subs (Menos restritivo). |
Opcional | Lista vazia [] indicando apenas controle de acesso baseado em função: esse serviço de link privado só estará disponível para indivíduos com permissões de controle de acesso baseado em função em seu diretório. (Mais restritivo) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Uma lista separada por espaço de IDs de assinatura do Azure. Isso permite que as solicitações de conexão PE das assinaturas listadas no PLS sejam aprovadas automaticamente. Isso só funciona quando a visibilidade está definida como "*". | Opcional | [] |
Usar redes privadas
Ao criar seu cluster AKS, você pode especificar configurações avançadas de rede. Essas configurações permitem que você implante o cluster em uma rede virtual e sub-redes existentes do Azure. Por exemplo, você pode implantar seu cluster AKS em uma rede privada conectada ao seu ambiente local e executar serviços que só são acessíveis internamente.
Para obter mais informações, consulte Configurar suas próprias sub-redes de rede virtual com Kubenet ou com o Azure CNI.
Não é necessário fazer alterações nas etapas anteriores para implantar um balanceador de carga interno que usa uma rede privada em um cluster AKS. O balanceador de carga é criado no mesmo grupo de recursos que o cluster AKS, mas está conectado à sua rede virtual privada e sub-rede, conforme mostrado no exemplo a seguir:
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
Nota
A identidade do cluster usada pelo cluster AKS deve ter pelo menos a função de Colaborador de Rede no recurso de rede virtual. Você pode exibir a identidade do cluster usando o az aks show
comando, como az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity"
. Você pode atribuir a função de Colaborador de Rede usando o az role assignment create
comando, como az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor"
.
Se quiser definir uma função personalizada, você precisará das seguintes permissões:
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Network/virtualNetworks/subnets/read
Para obter mais informações, consulte Adicionar, alterar ou excluir uma sub-rede de rede virtual.
Especificar uma sub-rede diferente
Adicione a
azure-load-balancer-internal-subnet
anotação ao seu serviço para especificar uma sub-rede para o seu balanceador de carga. A sub-rede especificada deve estar na mesma rede virtual que o cluster AKS. Quando implantado, o endereço do balanceadorEXTERNAL-IP
de carga faz parte da sub-rede especificada.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
Eliminar o balanceador de carga
O balanceador de carga é excluído quando todos os seus serviços são excluídos.
Como com qualquer recurso do Kubernetes, você pode excluir diretamente um serviço, como kubectl delete service internal-app
o , que também exclui o balanceador de carga subjacente do Azure.
Próximos passos
Para saber mais sobre os serviços do Kubernetes, consulte a documentação dos serviços do Kubernetes.
Azure Kubernetes Service