Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per limitare l'accesso alle applicazioni nel servizio Azure Kubernetes, è possibile creare e usare un bilanciamento del carico interno. Un servizio di bilanciamento del carico interno non ha un indirizzo IP pubblico e rende un servizio Kubernetes accessibile solo alle applicazioni in grado di raggiungere l’IP privato. Queste applicazioni possono trovarsi all'interno della stessa rete virtuale o in un'altra rete virtuale tramite peering di rete virtuale. Questo articolo descrive come usare un servizio di bilanciamento del carico interno con AKS.
Importante
A partire dal 30 settembre 2025, il servizio Azure Kubernetes non supporta più Load Balancer Basic. Per evitare potenziali interruzioni del servizio, è consigliabile usare Load Balancer Standard per le nuove distribuzioni e aggiornare le distribuzioni esistenti a Load Balancer Standard. Per altre informazioni sul ritiro, vedere il problema sul ritiro di GitHub e l'annuncio di ritiro degli aggiornamenti di Azure. Per rimanere informati sugli annunci e sugli aggiornamenti, seguire le note di rilascio di AKS.
Prima di iniziare
- Questo articolo presuppone che si disponga di un cluster del servizio Azure Kubernetes esistente. Se si necessita di un cluster nel servizio Azure Kubernetes, è possibile crearne uno usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.
- È necessaria l'interfaccia della riga di comando di Azure versione 2.0.59 o successiva. Eseguire
az --versionper trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. - Se si desidera utilizzare una subnet o un gruppo di risorse esistente, l'identità del cluster AKS necessita dell'autorizzazione per gestire le risorse di rete. Per informazioni, vedere Configurare la rete CNI di Azure in AKS. Se si sta configurando il bilanciatore del carico per l'uso di un indirizzo IP in una subnet diversa, assicurarsi che l'identità del cluster AKS abbia
Readaccesso anche a tale subnet.- Per altre informazioni sulle autorizzazioni, vedere Delegare l'accesso del servizio Azure Kubernetes ad altre risorse di Azure.
Creare un bilanciamento del carico interno
Creare un manifesto del servizio denominato
internal-lb.yamlcon il tipo di servizioLoadBalancere l'annotazioneazure-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-appDistribuire il servizio di bilanciamento del carico interno usando il comando
kubectl apply. Questo comando crea un servizio di bilanciamento del carico di Azure nel gruppo di risorse del nodo connesso alla stessa rete virtuale del cluster del servizio Azure Kubernetes.kubectl apply -f internal-lb.yamlVisualizzare i dettagli del servizio usando il comando
kubectl get service.kubectl get service internal-appL'indirizzo IP del servizio di bilanciamento del carico interno viene visualizzato nella colonna
EXTERNAL-IP, come illustrato nell'output di esempio seguente. In questo contesto, External fa riferimento all'interfaccia esterna del servizio di bilanciamento del carico. Non significa che riceve un indirizzo IP pubblico esterno. Questo indirizzo IP viene assegnato dinamicamente dalla stessa subnet del cluster del servizio Azure Kubernetes.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
Specificare un indirizzo IP
Quando si specifica un indirizzo IP per il servizio di bilanciamento del carico, l'indirizzo IP deve essere disponibile all'interno della subnet usata dal servizio di bilanciamento del carico. Per impostazione predefinita, il servizio di bilanciamento del carico usa la stessa subnet del cluster del servizio Azure Kubernetes. Non usare un indirizzo IP Azure riservato, un indirizzo IP già assegnato a un'altra risorsa o un indirizzo IP dal ciDR del servizio Kubernetes.
È possibile usare il az network vnet subnet listcomando dell'interfaccia della riga di comando di AzureGet-AzVirtualNetworkSubnetConfig o il cmdlet di PowerShell per ottenere le subnet nella rete virtuale.
Per altre informazioni sulle subnet, vedere Aggiungere un pool di nodi con una subnet univoca.
Se si vuole usare un indirizzo IP specifico con il servizio di bilanciamento del carico, sono disponibili due opzioni: impostare le annotazioni del servizio o aggiungere la proprietà LoadBalancerIP al manifestoYAML del servizio di bilanciamento del carico.
Importante
L'aggiunta della proprietà LoadBalancerIP al manifesto YAML del servizio di bilanciamento del carico verrà deprecata dopo Kubernetes upstream. Anche se l'utilizzo corrente rimane invariato e si prevede che i servizi esistenti funzionino senza modifiche, è consigliabile impostare invece le annotazioni del servizio. Per altre informazioni sulle annotazioni di servizio, vedere annotazioni supportate di Azure Load Balancer.
- Impostare le annotazioni del servizio
-
Aggiungere la proprietà
LoadBalancerIPal file manifest YAML del bilanciatore del carico
Impostare le annotazioni del servizio usando
service.beta.kubernetes.io/azure-load-balancer-ipv4per un indirizzo IPv4 eservice.beta.kubernetes.io/azure-load-balancer-ipv6per un indirizzo 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-appVisualizzare i dettagli del servizio usando il comando
kubectl get service.kubectl get service internal-appL'indirizzo IP nella colonna
EXTERNAL-IPdeve riflettere l'indirizzo IP specificato, come illustrato nell'output di esempio seguente:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Per altre informazioni sulla configurazione del servizio di bilanciamento del carico in una subnet diversa, vedere Specificare una subnet diversa.
Connettere collegamento privato di Azure servizio a un servizio di bilanciamento del carico interno del servizio Azure Kubernetes
requisiti del servizio collegamento privato
- Il cluster deve eseguire una versione di Kubernetes supportata nel servizio Azure Kubernetes.
- Il cluster del servizio Azure Kubernetes deve usare un Load Balancer Standard con il
nodeIPConfigurationtipo di pool back-end. collegamento privato Servizio non supporta Load Balancer Basic o il tipo di pool back-end basato sunodeIPIP. Per altre informazioni, vedere limitazioni del servizio collegamento privato. - È necessario un gruppo di risorse esistente con una rete virtuale e una subnet. Questo gruppo di risorse è il punto in cui si crea l'endpoint privato. Se queste risorse non sono disponibili, vedere Creare una rete virtuale e una subnet.
Importante
collegamento privato Servizio presenta le restrizioni seguenti:
- collegamento privato Servizio supporta solo il traffico IPv4 e supporta solo i protocolli di trasporto TCP e UDP.
- Se il servizio usa
externalTrafficPolicy: Local, la subnet del servizio collegamento privato deve essere diversa dalla subnet del pod. Per usare la stessa subnet, impostare suexternalTrafficPolicyCluster. - Se si abilita il protocollo PROXY e si usa
externalTrafficPolicy: Local, è necessario configurare un probe di integrità personalizzato perché il probe di integrità predefinito ha esito negativo.
Per altre informazioni, vedere Limitazioni del servizio collegamento privato e restrizioni di integrazione del servizio collegamento privato di Azure.
Creare una connessione al servizio collegamento privato
Creare un manifesto del servizio denominato
internal-lb-pls.yamlcon il tipo di servizioLoadBalancer,azure-load-balancer-internale leazure-pls-createannotazioni. Per altre opzioni, vedere il documento di progettazione Integrazione del servizio di collegamento privato di 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-appDistribuire il servizio di bilanciamento del carico interno usando il comando
kubectl apply. Questo comando crea un servizio di bilanciamento del carico di Azure nel gruppo di risorse del nodo connesso alla stessa rete virtuale del cluster del servizio Azure Kubernetes. Crea anche un oggetto Service collegamento privato che si connette alla configurazione IP front-end del servizio di bilanciamento del carico interno associato all'oggetto servizio Kubernetes.kubectl apply -f internal-lb-pls.yamlVisualizzare i dettagli del servizio usando il comando
kubectl get service.kubectl get service internal-appL'indirizzo IP del servizio di bilanciamento del carico interno viene visualizzato nella colonna
EXTERNAL-IP, come illustrato nell'output di esempio seguente. In questo contesto, External fa riferimento all'interfaccia esterna del servizio di bilanciamento del carico. Non significa che riceve un indirizzo IP pubblico esterno.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64mVisualizzare i dettagli dell'oggetto Servizio collegamento privato usando il 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 tableL'output dovrebbe essere simile all'output di esempio seguente:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Creare un endpoint privato per il servizio collegamento privato
Un endpoint privato consente di connettersi privatamente all'oggetto Servizio Kubernetes tramite il servizio collegamento privato creato.
Creare l'endpoint privato usando il comando az network private-endpoint create. Sostituire pls-xyz con il nome del servizio collegamento privato restituito nel passaggio precedente.
Impostare --resource-group sul gruppo di risorse di destinazione in cui si vuole creare l'endpoint privato. Impostare --vnet-name e --subnet sulla rete virtuale e la subnet che contengono l'endpoint privato. Impostare --private-connection-resource-id sull'ID risorsa del servizio collegamento privato recuperato in 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
personalizzazioni del servizio collegamento privato tramite annotazioni
È possibile usare le annotazioni seguenti per personalizzare la risorsa PLS:
| Annotazione | valore | Descrizione | Obbligatoria | Predefinito |
|---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Valore booleano che indica se è necessario creare una risorsa PLS. | Obbligatoria | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
Stringa che specifica il nome della risorsa PLS da creare. | Facoltativo | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
Stringa che specifica il nome del gruppo di risorse in cui viene creata la risorsa PLS | Facoltativo | MC_resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Stringa che indica la subnet in cui viene distribuito il file PLS. Questa subnet deve esistere nella stessa rete virtuale del pool back-end. Gli IP NAT PLS vengono allocati all'interno di questa subnet. | Facoltativo | Se service.beta.kubernetes.io/azure-load-balancer-internal-subnet, viene usata questa subnet ILB. In caso contrario, viene usata la subnet predefinita dal file di configurazione. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Numero totale di indirizzi IP NAT privati da allocare. | Facoltativo | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Elenco separato da spazi di indirizzi IP IPv4 statici da allocare. IPv6 non è attualmente supportato. Il numero totale di indirizzi IP non deve essere maggiore del numero di indirizzi IP specificato in service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count. Se sono stati specificati meno indirizzi IP, il resto viene allocato in modo dinamico. Il primo indirizzo IP nell'elenco è impostato su Primary. |
Facoltativo | Tutti gli indirizzi IP vengono allocati dinamicamente. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
Elenco separato da spazi di nomi di dominio completi associati al pls. | Facoltativo | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" o "false" |
Valore booleano che indica se il protocollo PROXY TCP deve essere abilitato nel PLS per passare le informazioni di connessione, inclusi l'ID di collegamento e l'indirizzo IP di origine. Il servizio back-end DEVE supportare il protocollo PROXY o la connessione non riesce. | Facoltativo | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" o "*" |
Elenco separato da spazi di ID sottoscrizione Azure per cui è visibile il servizio collegamento privato. Usare "*" per esporre il file PLS a tutte le subnet (meno restrittivo). |
Facoltativo | Elenco [] vuoto che indica solo il controllo degli accessi in base al ruolo: questo servizio collegamento privato è disponibile solo per gli utenti con le autorizzazioni di controllo degli accessi in base al ruolo necessarie Azure, inclusi gli utenti autorizzati nei tenant. (Più restrittivo) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Elenco delimitato da spazi di ID sottoscrizione Azure i cui richieste di connessione PE ai PLS vengono approvati automaticamente. L'elenco di approvazione automatica deve essere un subset dell'elenco di visibilità. | Facoltativo | [] |
Usare un servizio di bilanciamento del carico interno con reti private
Quando si crea il cluster servizio Azure Kubernetes è possibile specificare impostazioni di rete avanzate. Queste impostazioni consentono di distribuire il cluster in una rete virtuale e nelle subnet di Azure esistenti. Per esempio, si può distribuire il cluster servizio Azure Kubernetes in una rete privata connessa all'ambiente locale e nell'esecuzione dei servizi accessibili solo internamente.
Per altre informazioni, vedere Configurare le proprie subnet di rete virtuale con Kubenet o con Azure CNI.
Non sono necessarie modifiche dei passaggi precedenti per distribuire un servizio di bilanciamento del carico interno in un cluster AKS. Il servizio di bilanciamento del carico viene creato nel gruppo di risorse del nodo per il cluster del servizio Azure Kubernetes e connesso alla rete virtuale privata e alla subnet, come illustrato nell'esempio seguente:
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
Note
L'identità usata dal cluster del servizio Azure Kubernetes deve avere almeno il ruolo di Collaboratore di rete nella risorsa della rete virtuale. È possibile visualizzare l'identità del cluster usando il comando az aks show, ad esempio az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". È possibile assegnare il ruolo Collaboratore di rete usando il comando az role assignment create, ad esempio az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".
Se invece si vuole definire un ruolo personalizzato, sono necessarie le autorizzazioni seguenti:
Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/read
Per altre informazioni, vedere Aggiungere, modificare o eliminare una sottorete virtuale.
Specificare una subnet diversa
Aggiungere l'annotazione azure-load-balancer-internal-subnet al servizio per specificare una subnet per il servizio di bilanciamento del carico. La subnet specificata deve essere nella stessa rete virtuale del cluster servizio Azure Kubernetes. Quando viene distribuito, l'indirizzo EXTERNAL-IP del servizio di bilanciamento del carico fa parte della subnet specificata.
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
Impostare il valore dell'annotazione service.beta.kubernetes.io/azure-load-balancer-internal-subnet sulla stringa del nome della subnet, ad esempio "apps-subnet".
Eliminare il servizio di bilanciamento del carico
Il servizio di bilanciamento del carico viene eliminato quando si eliminano tutti i relativi servizi Kubernetes.
È possibile eliminare direttamente un servizio come per qualsiasi risorsa di Kubernetes, ad esempio kubectl delete service internal-app, operazione che comporta anche l'eliminazione del bilanciamento del carico sottostante.
Passaggi successivi
Altre informazioni sui servizi Kubernetes sono disponibili nella documentazione relativa ai servizi Kubernetes.