Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Crie e use um balanceador de carga interno para restringir o acesso aos seus aplicativos no AKS (Serviço de Kubernetes do Azure). Um balanceador de carga interno não tem um IP público e torna um serviço do Kubernetes acessível somente a aplicativos que podem alcançar o IP privado. Esses aplicativos podem estar na mesma rede virtual ou em outra rede virtual por meio do emparelhamento 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 AKS (Serviço de Kubernetes do Azure) não dá mais suporte ao Load Balancer Básico. Para evitar possíveis interrupções de serviço, recomendamos usar o Standard Load Balancer para novas implantações e atualizar quaisquer implantações existentes para o Standard Load Balancer. Para obter mais informações sobre essa desativação, consulte o problema de desativação do GitHub e o anúncio de desativação do Azure Updates. Para se manter informado sobre anúncios e atualizações, acompanhe as notas de lançamento do AKS.
Antes de começar
- Este artigo considera que já existe um cluster do AKS. Se você precisar de um cluster do AKS, crie 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. Execute
az --versionpara encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure. - Caso você deseje usar uma sub-rede ou um grupo de recursos existente, a identidade do cluster do AKS também precisa ter permissão para gerenciar os recursos de rede. Para obter informações, consulte Configurar a rede CNI do Azure no AKS. Se você estiver configurando o balanceador de carga para usar um endereço IP em uma sub-rede diferente, verifique se a identidade do cluster do AKS também tem
Readacesso a essa sub-rede.- Para obter mais informações sobre permissões, confira Delegar acesso do AKS a outros recursos do Azure.
Criar um balanceador de carga interno
Crie um manifesto de serviço denominado
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-appImplantar o balanceador de carga interno usando o comando
kubectl apply. Esse comando cria um balanceador de carga do Azure no grupo de recursos de nó conectado à mesma rede virtual que seu cluster do AKS.kubectl apply -f internal-lb.yamlExibir os detalhes do serviço usando o comando
kubectl get service.kubectl get service internal-appO endereço de IP do balanceador de carga interno é mostrado na coluna
EXTERNAL-IP, conforme mostrado na saída do exemplo a seguir. Nesse contexto, External refere-se à interface externa do balanceador de carga. Isso não significa que ele receba um endereço IP público externo. Esse endereço IP é atribuído dinamicamente da mesma sub-rede que o cluster do 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 deve estar disponível na sub-rede usada pelo balanceador de carga. Por padrão, o balanceador de carga usa a mesma sub-rede que o cluster do AKS. Não use um endereço IP reservado Azure, um endereço IP já atribuído a outro recurso ou um endereço IP do CIDR do serviço Kubernetes.
Use o comando az network vnet subnet list da CLI do Azure ou o cmdlet Get-AzVirtualNetworkSubnetConfig do PowerShell para obter as sub-redes da sua rede virtual.
Para obter mais informações sobre as sub-redes, confira Adicionar um pool de nós com uma sub-rede exclusiva.
Se você quiser usar um endereço de IP específico com o balanceador de carga, há duas opções: definir anotações de serviço ou adicionar a propriedade LoadBalancerIP ao manifesto YAML do balanceador de carga.
Importante
A inclusão da propriedade LoadBalancerIP no manifesto YAML do balanceador de carga está sendo descontinuada, em conformidade com o Kubernetes upstream. Embora o uso atual permaneça o mesmo e os serviços existentes funcionem sem modificação, é 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 Load Balancer.
- Definir as anotações de serviço
-
Adicionar a
LoadBalancerIPpropriedade ao manifesto YAML do balanceador de carga
Defina as anotações do 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-appExibir os detalhes do serviço usando o comando
kubectl get service.kubectl get service internal-appO endereço de IP na coluna
EXTERNAL-IPdeve refletir o endereço de 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 o balanceador de carga em uma sub-rede diferente, confira Especificar uma sub-rede diferente.
Conectar Link Privado do Azure Service a um balanceador de carga interno do AKS
Requisitos do serviço Link Privado
- Seu cluster deve executar uma versão do Kubernetes com suporte no AKS.
- Seu cluster AKS deve utilizar um Load Balancer Padrão com o tipo de pool de back-end
nodeIPConfiguration. O Link Privado Service não oferece suporte ao Balanceador de Carga Básico nem ao tipo de pool de back-end baseado em IPnodeIP. Para obter mais informações, consulte limitações do Link Privado Service. - Você precisa de um grupo de recursos existente com uma rede virtual e uma sub-rede. Esse grupo de recursos é o local em que você deve criar o ponto de extremidade privado. Se você não tiver esses recursos, confira Criar uma rede virtual e uma sub-rede.
Importante
Link Privado Service tem as seguintes restrições:
- Link Privado Service dá suporte apenas ao tráfego IPv4 e dá suporte apenas aos protocolos de transporte TCP e UDP.
- Se o serviço usa
externalTrafficPolicy: Local, a sub-rede do serviço Link Privado deve ser diferente da sub-rede do pod. Para usar a mesma sub-rede, definaexternalTrafficPolicycomoCluster. - Se você habilitar o protocolo PROXY e usar
externalTrafficPolicy: Local, deverá configurar uma investigação de integridade personalizada porque a investigação de integridade padrão falhará.
Para obter mais informações, consulte Link Privado limitações de serviço e restrições de integração do serviço Link Privado do Azure.
Criar uma conexão de serviço Link Privado
Crie um manifesto de serviço denominado
internal-lb-pls.yamlcom o tipo de serviçoLoadBalancere as anotaçõesazure-load-balancer-internaleazure-pls-create. Para conhecer mais opções, veja 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-appImplantar o balanceador de carga interno usando o comando
kubectl apply. Esse comando cria um balanceador de carga do Azure no grupo de recursos de nó conectado à mesma rede virtual que seu cluster do AKS. Ele também cria um objeto Link Privado Service que se conecta à configuração de IP de front-end do balanceador de carga interno associado ao objeto de serviço kubernetes.kubectl apply -f internal-lb-pls.yamlExibir os detalhes do serviço usando o comando
kubectl get service.kubectl get service internal-appO endereço de IP do balanceador de carga interno é mostrado na coluna
EXTERNAL-IP, conforme mostrado na saída do exemplo a seguir. Nesse contexto, External refere-se à interface externa do balanceador de carga. Isso não significa que ele receba um endereço IP público 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 Serviço de Link Privado usando o comando
az network private-link-service list.# 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 tableSeu resultado deve ser semelhante ao seguinte exemplo de saída:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Criar um endpoint privado para o Serviço Link Privado
Um ponto de extremidade privado permite que você se conecte de modo particular ao objeto de serviço do Kubernetes por meio do Serviço de Link Privado criado.
Criar o ponto de extremidade privado usando o comando az network private-endpoint create. Substitua pls-xyz pelo nome do serviço Link Privado retornado na etapa anterior.
Defina --resource-group para o grupo de recursos de destino no qual você deseja criar o ponto de extremidade privado. Defina --vnet-name e --subnet para a rede virtual e a sub-rede que contêm o ponto de extremidade privado. Defina --private-connection-resource-id como o ID do recurso Link Privado 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 serviço Link Privado por meio de anotações
Você pode usar as seguintes anotações para personalizar o recurso PLS:
| Anotação | Valor | Descrição | Obrigatório | Padrão |
|---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Booliano que indica se um PLS precisa ser criado. | Obrigatório | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
Cadeia de caracteres especificando o nome do recurso PLS que será criado. | Opcional | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
Cadeia de caracteres especificando o nome do Grupo de Recursos em que o recurso PLS é criado | Opcional | MC_resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Cadeia de caracteres que indica a sub-rede na qual o PLS é implantado. Essa sub-rede deve existir na mesma rede virtual que o pool de back-end. Os IPs NAT do PLS são alocados dentro dessa sub-rede. | Opcional | Se service.beta.kubernetes.io/azure-load-balancer-internal-subnet, essa sub-rede ILB será utilizada. Caso contrário, será usada a sub-rede padrão do arquivo de configuração. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Número total de IPs NAT privados a serem alocados. | 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ços de IPs estáticos IPv4 IPs que serão alocados. (Não há suporte para IPv6 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 existirem menos IPs especificados, os demais serão alocados dinamicamente. O primeiro IP da lista está 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 nomes de domínio totalmente qualificados associados ao PLS. | Opcional | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" ou "false" |
Booliano indicando se o protocolo PROXY TCP deve ser habilitado no PLS para transmitir informações de conexão, incluindo a ID do link e o endereço IP de origem. O serviço de back-end DEVE dar suporte ao protocolo PROXY ou a conexão falha. | Opcional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" ou "*" |
Uma lista, separada por espaços, de IDs de assinaturas do Azure para as quais o Serviço de link privado está 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: este Link Privado Service está disponível somente para usuários com as permissões de RBAC do Azure necessárias, incluindo usuários autorizados em diferentes locatários. (Mais restritivo) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Uma lista separada por espaços de IDs de assinatura do Azure cujas solicitações de conexão do PE ao PLS são aprovadas automaticamente. A lista de aprovação automática deve ser um subconjunto da lista de visibilidade. | Opcional | [] |
Usar um balanceador de carga interno com redes privadas
Quando você cria seu cluster do AKS, é possível especificar as configurações de rede avançadas. Essas configurações permitem implantar o cluster em uma rede virtual e nas sub-redes existentes do Azure. Por exemplo, você pode implantar o cluster do AKS em uma rede privada conectada ao ambiente local e executar serviços acessíveis apenas internamente.
Para obter mais informações, confira Configurar suas sub-redes de rede virtual com o kubenet ou com a CNI do Azure.
Não é necessário realizar nenhuma alteração nas etapas anteriores para implantar um balanceador de carga interno que usa uma rede privada em um cluster do AKS. O balanceador de carga é criado no grupo de recursos dos nós do seu cluster do AKS e conectado à sua rede virtual privada e à sua 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
Observação
A identidade do cluster usada pelo cluster do AKS deve, pelo menos, ter a função Colaborador de rede no recurso de rede virtual. Você pode exibir a identidade do cluster usando o comando az aks show, como az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Você pode atribuir a função Colaborador de Rede usando o comando az role assignment create, como az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".
Se você quiser definir uma função personalizada, precisará das seguintes permissões:
Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/read
Para obter mais informações, confira Adicionar, alterar ou excluir uma sub-rede de rede virtual.
Especificar uma sub-rede diferente
Adicione a anotação azure-load-balancer-internal-subnet ao seu serviço para especificar uma sub-rede para seu balanceador de carga. A sub-rede especificada deve estar na mesma rede virtual que seu cluster do AKS. Quando implantado, o endereço do balanceador de carga EXTERNAL-IP 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 string do nome da sub-rede, como "apps-subnet".
Excluir o balanceador de carga
O balanceador de carga é excluído quando você exclui todos os serviços do Kubernetes.
Assim como 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óximas etapas
Para saber mais sobre os serviços do Kubernetes, confira a Documentação dos serviços do Kubernetes.