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.
Quando si crea una risorsa del servizio di bilanciamento del carico in un cluster del servizio Azure Kubernetes, l'indirizzo IP pubblico assegnato è valido solo per la durata della risorsa. Se si elimina il servizio Kubernetes, vengono eliminati anche il bilanciamento del carico e l'indirizzo IP associati. Se si vuole assegnare un indirizzo IP specifico o mantenere un indirizzo IP per i servizi Kubernetes ridistribuiti, è possibile creare e usare un indirizzo IP pubblico statico.
Questo articolo illustra come creare un indirizzo IP pubblico statico e assegnarlo al servizio Kubernetes.
Operazioni preliminari
- È necessario che sia installata e configurata l'interfaccia della riga di comando di Azure 2.0.59 o versione successiva. Eseguire
az --versionper trovare la versione. Per installare o aggiornare, vedere Installare interfaccia della riga di comando di Azure. - Questo articolo descrive l'uso di un indirizzo IP SKU Standard con un servizio di bilanciamento del carico SKU Standard. Per altre informazioni, vedere Tipi di indirizzi IP e metodi di allocazione in Azure.
Creare un cluster AKS
Creare un gruppo di risorse di Azure usando il comando
az group create.az group create --name myNetworkResourceGroup --location eastusCreare un cluster AKS usando il comando
az aks create.az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
Creare un indirizzo IP statico
Ottenere il nome del gruppo di risorse del nodo usando il comando
az aks showe la query per la proprietànodeResourceGroup.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsvCreare un indirizzo IP pubblico statico nel gruppo di risorse del nodo usando il
az network public-ip createcomando .az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method staticImportante
AKS non supporta più Basic Load Balancer. Se il cluster usa un Load Balancer Basic, eseguire l'aggiornamento a Load Balancer Standard prima di configurare un indirizzo IP pubblico statico.
Ottenere l'indirizzo IP pubblico statico usando il
az network public-ip showcomando . Specificare il nome del gruppo di risorse del nodo e l'indirizzo IP pubblico che è stato creato, quindi interrogare ilipAddress.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Creare un servizio Kubernetes con l'indirizzo IP statico
Creare un file denominato
load-balancer-service.yamle copiarlo nel contenuto del file YAML seguente. Specificare il nome della risorsa IP pubblico (myAKSPublicIP) creato nella sezione Creare un indirizzo IP statico e il nome del gruppo di risorse del nodo.Per impostazione predefinita, l'identità del piano di controllo di AKS dispone delle autorizzazioni di Collaboratore sul gruppo di risorse del nodo, quindi l'indirizzo IP pubblico creato in questo articolo non richiede un'ulteriore assegnazione di ruolo. Se si usa un indirizzo IP pubblico in ingresso o in uscita in un gruppo di risorse diverso, concedere al piano di controllo le autorizzazioni necessarie per tale gruppo di risorse. Per altre informazioni, vedi Identità gestite in AKS.
Importante
La proprietà
loadBalancerIPin un manifest di servizio Kubernetes è deprecata in linea con Kubernetes upstream. I servizi esistenti continuano a funzionare senza modifiche, ma usano invece le annotazioni del servizio.Annotation Purpose service.beta.kubernetes.io/azure-pip-nameSpecificare il nome della risorsa IP pubblica. service.beta.kubernetes.io/azure-load-balancer-ipv4Specificare un indirizzo IPv4. service.beta.kubernetes.io/azure-load-balancer-ipv6Specificare un indirizzo IPv6. apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancerNota
L'aggiunta dell'annotazione
service.beta.kubernetes.io/azure-pip-nameassicura la creazione del LoadBalancer nel modo più efficiente ed è fortemente consigliata per evitare potenziali limitazioni della velocità.Impostare un'etichetta DNS pubblica sul servizio usando l'annotazione del servizio
service.beta.kubernetes.io/azure-dns-label-name. In questo modo viene pubblicato un nome di dominio completo (FQDN) per il servizio usando i server DNS pubblici di Azure e il dominio di primo livello. Il valore dell'annotazione deve essere univoco all'interno della posizione di Azure, quindi è consigliabile usare un'etichetta sufficientemente qualificata. Azure aggiunge automaticamente un suffisso predefinito nel percorso selezionato, ad esempio<location>.cloudapp.azure.com, al nome specificato, creando il nome FQDN.Nota
Per pubblicare il servizio nel proprio dominio, vedere DNS di Azure e il progetto external-dns.
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label> name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancerPrima di creare il servizio, assicurati che il cluster abbia un workload con pod che utilizzano l'etichetta
app: azure-load-balancer. Il manifesto del servizio seleziona i pod con questa etichetta, ma non crea una distribuzione.Creare il servizio usando il
kubectl applycomando .kubectl apply -f load-balancer-service.yamlVerificare che il servizio selezioni almeno un pod in esecuzione e pronto.
kubectl get pods -l app=azure-load-balancerPer visualizzare l'etichetta DNS per il servizio di bilanciamento del carico, usare il comando
kubectl describe.kubectl describe service azure-load-balancerL'etichetta DNS verrà elencata sotto il
Annotations, come illustrato nell'output di esempio condensato seguente:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
Risoluzione dei problemi
In questa sezione si presuppone che sia stato completato l'istruzione Creare un indirizzo IP statico, aver tentato di eseguire la procedura descritta in Creare un servizio Kubernetes con l'indirizzo IP statico e avere un cluster del servizio Azure Kubernetes in esecuzione. Per recuperare il nome del gruppo di risorse del nodo, usare az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.
Se la risorsa IP pubblica denominata nell'annotazione service.beta.kubernetes.io/azure-pip-name non esiste nel gruppo di risorse specificato da service.beta.kubernetes.io/azure-load-balancer-resource-groupo l'identità del piano di controllo del servizio Azure Kubernetes non riesce ad accedere a tale gruppo di risorse, la creazione del servizio di bilanciamento del carico non riesce. Per risolvere i problemi, esaminare le annotazioni del servizio e gli eventi di creazione usando il kubectl describe comando . Specificare il nome del servizio indicato nel manifesto YAML, come illustrato nell'esempio seguente:
kubectl describe service azure-load-balancer
L'output mostra informazioni sulla risorsa del servizio Kubernetes. L'output di esempio seguente mostra un Warning nel Events: "user supplied IP address was not found". In questo scenario, assicurarsi che l'annotazione azure-pip-name corrisponda al nome della risorsa IP pubblica statica e che l'annotazione azure-load-balancer-resource-group corrisponda al gruppo di risorse che la contiene.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
Selector: app=azure-load-balancer
Type: LoadBalancer
IP: 10.0.18.125
IP: 40.121.183.52
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32582/TCP
Endpoints: <pod-ip>:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingLoadBalancer 7s (x2 over 22s) service-controller Creating load balancer
Warning CreatingLoadBalancerFailed 6s (x2 over 12s) service-controller Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found
Passaggi successivi
Per un maggiore controllo sul traffico di rete diretto alle tue applicazioni, utilizza il componente aggiuntivo per il routing delle applicazioni per AKS. Per altre informazioni sul componente aggiuntivo di routing delle app, vedere Ingresso NGINX gestito con il componente aggiuntivo di routing dell'applicazione.