Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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. Estas aplicações podem estar dentro da mesma rede virtual ou noutra rede virtual através do peering de rede virtual. Este artigo mostra como criar e usar um balanceador de carga interno com o AKS.
Importante
A partir de 30 de setembro de 2025, o Azure Kubernetes Service (AKS) deixou de suportar o Basic Balanceador de Carga. Para evitar potenciais interrupções no serviço, recomendamos o uso do Balanceador de Carga Standard para novas implementações e a atualização de quaisquer implementações existentes para o Balanceador de Carga Standard. Para mais informações sobre esta descontinuação, consulte o problema do GitHub e o anúncio de descontinuação do Azure Updates. Para se manter informado sobre anúncios e atualizações, siga as notas de lançamento do AKS.
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 --versionpara localizar a versão. Se precisar de instalar ou atualizar, veja Install CLI do Azure (Instalar o CLI do Azure). - 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 Configurar a rede CNI do Azure no AKS. Se estiveres a configurar o teu balanceador de carga para usar um endereço IP numa sub-rede diferente, certifica-te de que a identidade do cluster AKS também tem
Readacesso 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 com o nome
internal-lb.yamlcom o tipo de serviçoLoadBalancere a anotaçãoazure-load-balancer-internal.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-appImplante o balanceador de carga interno usando o
kubectl applycomando. Este comando cria um balanceador de carga do Azure no grupo de recursos dos nós ligado à mesma rede virtual que o cluster AKS.kubectl apply -f internal-lb.yamlExiba os detalhes do serviço usando o
kubectl get servicecomando.kubectl get service internal-appO endereço IP do balanceador de carga interno é mostrado na
EXTERNAL-IPcoluna, 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 especifica um endereço IP para o balanceador de carga, o endereço IP deve estar disponível dentro da sub-rede usada pelo balanceador de carga. Por defeito, o balanceador de carga usa a mesma sub-rede do cluster AKS. Não use um endereço IP reservado no Azure, um endereço IP já atribuído a outro recurso, ou um endereço IP do CIDR do serviço Kubernetes.
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 única.
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
A adição da propriedade LoadBalancerIP ao manifesto YAML do balanceador de carga está a ser descontinuada em conformidade com 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 para os serviços. Para mais informações sobre anotações de serviço, consulte anotações suportadas do Balanceador de Carga do Azure.
- Definir anotações de serviço
-
Adicionar a
LoadBalancerIPpropriedade ao manifesto YAML do balanceador de carga
Defina anotações de serviço usando
service.beta.kubernetes.io/azure-load-balancer-ipv4para um endereço IPv4 eservice.beta.kubernetes.io/azure-load-balancer-ipv6para 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-appExiba os detalhes do serviço usando o
kubectl get servicecomando.kubectl get service internal-appO endereço IP na coluna
EXTERNAL-IPdeve refletir o endereço IP que especificou, conforme mostrado no exemplo de saída 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.
Ligue o Azure Private Link Service a um balanceador de carga interno do AKS
Requisitos do Private Link Service
- O seu cluster deve correr uma versão Kubernetes suportada no AKS.
- O seu cluster AKS deve usar um Balanceador de Carga Standard com o
nodeIPConfigurationtipo de pool backend. O Private Link Service não suporta o Basic Balanceador de Carga nem o tipo de pool backend baseadonodeIPem IP. Para mais informações, consulte limitações do Private Link Service. - Precisas de um grupo de recursos existente com uma rede virtual e sub-rede. Este grupo de recursos é onde se cria o endpoint privado. Se você não tiver esses recursos, consulte Criar uma rede virtual e uma sub-rede.
Importante
O Private Link Service tem as seguintes restrições:
- O Private Link Service suporta apenas tráfego IPv4 e suporta apenas os protocolos de transporte TCP e UDP.
- Se o serviço usar
externalTrafficPolicy: Local, a sub-rede do Private Link Service deve ser diferente da sub-rede pod. Para usar a mesma subrede, definaexternalTrafficPolicyparaCluster. - Se ativares o protocolo PROXY e usares
externalTrafficPolicy: Local, tens de configurar uma sonda de saúde personalizada porque a sonda de saúde padrão falha.
Para mais informações, consulte limitações do Private Link Service e restrições de integração do Azure Private Link Service.
Criar uma ligação ao Private Link Service
Crie um manifesto de serviço nomeado
internal-lb-pls.yamlcom o tipo de serviçoLoadBalancere com as anotaçõesazure-load-balancer-internaleazure-pls-create. Para obter mais opções, consulte o documento de projeto 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-appImplante o balanceador de carga interno usando o
kubectl applycomando. Este comando cria um balanceador de carga do Azure no grupo de recursos dos nós ligado à mesma rede virtual que o cluster AKS. Também cria um objeto Private Link Service que se liga à configuração IP frontend do balanceador de carga interno associado ao objeto de serviço Kubernetes.kubectl apply -f internal-lb-pls.yamlExiba os detalhes do serviço usando o
kubectl get servicecomando.kubectl get service internal-appO endereço IP do balanceador de carga interno é mostrado na
EXTERNAL-IPcoluna, 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 64mExiba os detalhes do objeto Private Link Service usando o
az network private-link-service listcomando.# 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 tableSua 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 endpoint privado para o Private Link Service
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. Substitua pls-xyz pelo nome Private Link Service devolvido no passo anterior.
Define --resource-group para o grupo de recursos alvo onde queres criar o endpoint privado. Definir --vnet-name e --subnet para a rede virtual e sub-rede que contêm o endpoint privado. Definir --private-connection-resource-id para o ID de recurso do Private Link Service recuperado em AKS_PLS_ID.
# Create variables for the Private Link Service
AKS_PLS_NAME=pls-xyz
AKS_PLS_ID=$(az network private-link-service show -g $AKS_MC_RG --name $AKS_PLS_NAME --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 do Private Link Service através de anotações
Você pode usar as seguintes anotações para personalizar o recurso PLS:
| Anotação | valor | Descrição | 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 que especifica o nome do Grupo de Recursos onde o recurso PLS é criado | Opcional | MC_resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Cadeia que indica a sub-rede na qual o PLS está implantado. Esta sub-rede deve existir na mesma rede virtual que o pool backend. 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 neste momento.) O número total de IPs não deve ser superior ao número de IPs especificado 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 de nomes de domínio totalmente qualificados associados ao PLS, separada por espaços. | 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. O serviço backend TEM de suportar o protocolo PROXY, caso contrário a ligação falha. | Opcional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" ou "*" |
Uma lista separada por espaço dos IDs de subscrição do Azure para os quais o Private Link Service é visível. Use "*" para expor o PLS a todos os subs (Menos restritivo). |
Opcional | Lista [] vazia indicando apenas controlo de acesso baseado em funções: Este Private Link Service está disponível apenas para utilizadores com as permissões Azure RBAC necessárias, incluindo utilizadores autorizados entre os inquilinos. (Mais restritivo) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Uma lista de IDs de subscrições do Azure separada por espaços cujos pedidos de ligação PE ao PLS são automaticamente aprovados. A lista de aprovação automática deve ser um subconjunto da lista de visibilidade. | Opcional | [] |
Use um balanceador de carga interno com 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 grupo de recursos de nós do seu cluster AKS e ligado à sua rede virtual privada e sub-rede, como mostrado no exemplo seguinte:
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/actionMicrosoft.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 balanceador EXTERNAL-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
Defina o valor da anotação service.beta.kubernetes.io/azure-load-balancer-internal-subnet como a cadeia de caracteres com o nome da sub-rede, como "apps-subnet".
Eliminar o balanceador de carga
O balanceador de carga é eliminado quando eliminas todos os seus serviços Kubernetes.
Tal como acontece com qualquer recurso do Kubernetes, pode excluir diretamente um serviço, como kubectl delete service internal-app, 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.