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. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'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 comando
az network public ip create.az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method staticNota
Se usi un load balancer SKU Basic nel cluster AKS, usa Basic per il parametro
--skuquando definisci un IP pubblico. Solo gli indirizzi IP SKU Basic funzionano con il servizio di bilanciamento del carico dello SKU Basic e solo gli indirizzi IP SKU Standard funzionano con servizi di bilanciamento del carico dello SKU Standard.Ottenere l'indirizzo IP pubblico statico usando il comando
az network public-ip list. Specificare il nome del gruppo di risorse del nodo e dell'indirizzo IP pubblico creato ed eseguire una query per ilipAddress.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
Creare un servizio usando l'indirizzo IP statico
Determina innanzitutto quale tipo di identità gestita stia usando il cluster AKS, assegnata dal sistema o assegnata dall'utente. Se non si è sicuri, eseguire il comando az aks show e interrogare la proprietà type dell'identità.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsvSe il cluster usa un'identità gestita, il valore della proprietà type sarà SystemAssigned o UserAssigned.
Se il cluster usa un'entità servizio, il valore della proprietà type sarà Null. Valutare l'aggiornamento del cluster per utilizzare un'identità gestita.
Se il cluster AKS usa un'identità gestita assegnata dal sistema, recupera l'ID principale dell'identità gestita come segue:
# Get the principal ID for a system-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.principalId \ --output tsv)Se il cluster AKS usa un'identità gestita assegnata dall'utente, l'ID principale sarà null. Eseguire invece una query per l'ID client dell'identità gestita assegnata dall'utente:
# Get the client ID for a user-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.userAssignedIdentities.*.clientId \ --output tsvAssegnare autorizzazioni delegate all'identità gestita utilizzata dal cluster AKS per il gruppo di risorse dell'indirizzo IP pubblico eseguendo il comando
az role assignment create.# Get the resource ID for the node resource group. RG_SCOPE=$(az group show \ --name <node resource group> \ --query id \ --output tsv) # Assign the Network Contributor role to the managed identity, # scoped to the node resource group. az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}Importante
Se è stato personalizzato l'indirizzo IP in uscita, assicurarsi che l'identità del cluster disponga delle autorizzazioni sia per l'indirizzo IP pubblico in uscita che per l'indirizzo IP pubblico in ingresso.
Creare un file denominato
load-balancer-service.yamle copiarlo nel contenuto del file YAML seguente, specificando il proprio indirizzo IP pubblico creato nel passaggio precedente e il nome del gruppo di risorse del nodo.Importante
L'aggiunta della proprietà
loadBalancerIPal 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 impostare le annotazioni del servizio, è possibile usareservice.beta.kubernetes.io/azure-pip-nameper il nome IP pubblico oppure usareservice.beta.kubernetes.io/azure-load-balancer-ipv4per un indirizzo IPv4 eservice.beta.kubernetes.io/azure-load-balancer-ipv6per un indirizzo IPv6, come illustrato nell'esempio YAML.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-balancerCreare il servizio e la distribuzione usando il comando
kubectl apply.kubectl apply -f load-balancer-service.yamlPer visualizzare l'etichetta DNS per il servizio di bilanciamento del carico, usare il comando
kubectl describe service.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.kuberenetes.io/azure-dns-label-name: <unique-service-label>
Risoluzione dei problemi
Se l'indirizzo IP statico definito nella proprietà loadBalancerIP del manifesto del servizio Kubernetes non esiste o non è stato creato nel gruppo di risorse del nodo e non sono state configurate altre deleghe, la creazione del servizio di bilanciamento del carico non riesce. Per risolvere i problemi, esaminare gli eventi di creazione del servizio usando il comando kubectl describe. 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, verificare che sia stato creato l'indirizzo IP pubblico statico nel gruppo di risorse del nodo e che l'indirizzo IP specificato nel manifesto del servizio Kubernetes sia corretto.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: <none>
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: <none>
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.