Configurare il controller di ingresso NGINX per supportare la zona DNS privata di Azure con il componente aggiuntivo Instradamento dell'applicazione
Questo articolo illustra come configurare un controller di ingresso NGINX per lavorare con il servizio di bilanciamento del carico interno di Azure e configurare una zona DNS di Azure privata per abilitare la risoluzione DNS per gli endpoint privati in modo da risolvere domini specifici.
Operazioni preliminari
- Un cluster del servizio Azure Kubernetes con il componente aggiuntivo di routing delle applicazioni.
- Per collegare un'istanza di una zona DNS di Azure, è necessario il ruolo Proprietario, Amministratore account di Azure o Coamministratore di Azure nella sottoscrizione di Azure.
Connettersi al cluster del servizio Azure Kubernetes
Per connettersi al cluster Kubernetes dal computer locale, si usa kubectl
, ovvero il client da riga di comando di Kubernetes. È possibile installarlo in locale con il comando az aks install-cli. Se si usa Azure Cloud Shell, kubectl
è già installato.
L'esempio seguente configura la connessione al cluster denominato myAKSCluster in myResourceGroup usando il comando az aks get-credentials
.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Creare una rete virtuale
Per pubblicare una zona DNS privata nella rete virtuale, è necessario specificare un elenco di reti virtuali autorizzate a risolvere i record nella zona. Questi collegamenti sono denominati collegamenti di rete virtuale.
L'esempio seguente crea una rete virtuale denominata myAzureVNet nel gruppo di risorse myResourceGroup e una subnet denominata mySubnet da creare all'interno della rete virtuale con un prefisso di indirizzo specifico.
az network vnet create \
--name myAzureVNet \
--resource-group myResourceGroup \
--location eastus \
--address-prefix 10.2.0.0/16 \
--subnet-name mysubnet \
--subnet-prefixes 10.2.0.0/24
Creare una zona DNS privata di Azure
Nota
È possibile configurare il componente aggiuntivo Instradamento dell'applicazione per creare automaticamente record in una o più zone DNS globali e private di Azure per gli host definiti nelle risorse in ingresso. Tutte le zone DNS di Azure globali e tutte le zone DNS di Azure private devono trovarsi nello stesso gruppo di risorse.
Creare una zona DNS usando il comando az network private-dns zone create, specificando il nome della zona e il gruppo di risorse in cui crearla. L'esempio seguente crea una zona DNS denominata private.contoso.com nel gruppo di risorse myResourceGroup.
az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com
Creare un collegamento di rete virtuale alla zona DNS creata in precedenza usando il comando az network private-dns link vnet create. L'esempio seguente crea un collegamento denominato myDNSLink alla zona private.contoso.com per la rete virtuale myAzureVNet. Includere il parametro --registration-enabled
per specificare che il collegamento non è abilitato per la registrazione.
az network private-dns link vnet create --resource-group myResourceGroup \
--name myDNSLink \
--zone-name private.contoso.com \
--virtual-network myAzureVNet \
--registration-enabled false
La funzionalità di registrazione automatica delle zona DNS privato di Azure consente di gestire i record DNS per le macchine virtuali distribuite in una rete virtuale. Quando si collega una rete virtuale a una zona DNS privata con questa impostazione abilitata, viene creato un record DNS per ogni macchina virtuale di Azure per il nodo del servizio Azure Kubernetes distribuito nella rete virtuale.
Collegare una zona DNS privato di Azure al componente aggiuntivo Instradamento dell'applicazione
Nota
Il comando az aks approuting zone add
usa le autorizzazioni dell'utente che esegue il comando per creare l'assegnazione di ruolo della zona DNS di Azure. Il ruolo Collaboratore per la zona DNS privato è un ruolo predefinito per la gestione delle risorse DNS privato. Per altre informazioni sulle identità gestite del servizio Azure Kubernetes, vedere Riepilogo delle identità gestite.
Recuperare l'ID risorsa per la zona DNS usando il comando
az network dns zone show
e impostare l'output su una variabile denominataZONEID
. L'esempio seguente esegue una query sulla zona private.contoso.com nel gruppo di risorse myResourceGroup.ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
Aggiornare il componente aggiuntivo per abilitare l'integrazione con DNS di Azure usando il comando
az aks approuting zone
. È possibile passare un elenco delimitato da virgole di ID risorse della zona DNS. L'esempio seguente aggiorna il cluster del servizio Azure Kubernetes myAKSCluster nel gruppo di risorse myResourceGroup.az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
Creare un controller di ingresso NGINX con un indirizzo IP privato e un servizio di bilanciamento del carico interno
Il componente aggiuntivo di routing delle applicazioni usa una definizione di risorsa personalizzata (CRD, Custom Resource Definition) Kubernetes denominata NginxIngressController
per configurare i controller in ingresso NGINX. È possibile creare più controller in ingresso o modificare una configurazione esistente.
La CRD NginxIngressController
include un campo loadBalancerAnnotations
che consente di controllare il comportamento del servizio del controller in ingresso NGINX impostando annotazioni del servizio di bilanciamento del carico.
Seguire questa procedura per creare un controller di ingresso NGINX con Azure Load Balancer interno con un indirizzo IP privato.
Copiare il manifesto YAML seguente in un nuovo file denominato nginx-internal-controller.yaml e salvare il file nel computer locale.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-internal spec: ingressClassName: nginx-internal controllerNamePrefix: nginx-internal loadBalancerAnnotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Creare le risorse del controller in ingresso NGINX con il comando
kubectl apply
.kubectl apply -f nginx-internal-controller.yaml
L'output di esempio seguente mostra la risorsa creata:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Verificare che il controller in ingresso sia stato creato
Per verificare lo stato del controller in ingresso NGINX, usare il comando
kubectl get nginxingresscontroller
.kubectl get nginxingresscontroller
L'output di esempio seguente mostra la risorsa creata. Possono essere necessari alcuni minuti prima che il controller sia disponibile:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE default webapprouting.kubernetes.azure.com nginx True nginx-internal nginx-internal nginx-internal True
Distribuire un'applicazione
Il componente aggiuntivo Instradamento dell'applicazione usa annotazioni negli oggetti ingresso Kubernetes per creare le risorse appropriate.
Creare lo spazio dei nomi dell'applicazione denominato
hello-web-app-routing
per eseguire i pod di esempio con il comandokubectl create namespace
.kubectl create namespace hello-web-app-routing
Creare la distribuzione copiando il manifesto YAML seguente in un nuovo file denominato deployment.yaml e salvare il file nel computer locale.
apiVersion: apps/v1 kind: Deployment metadata: name: aks-helloworld namespace: hello-web-app-routing spec: replicas: 1 selector: matchLabels: app: aks-helloworld template: metadata: labels: app: aks-helloworld spec: containers: - name: aks-helloworld image: mcr.microsoft.com/azuredocs/aks-helloworld:v1 ports: - containerPort: 80 env: - name: TITLE value: "Welcome to Azure Kubernetes Service (AKS)"
Creare il servizio copiando il manifesto YAML seguente in un nuovo file denominato service.yaml e salvare il file nel computer locale.
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
Creare le risorse cluster usando il comando
kubectl apply
.kubectl apply -f deployment.yaml -n hello-web-app-routing
L'output di esempio seguente mostra la risorsa creata:
deployment.apps/aks-helloworld created created
kubectl apply -f service.yaml -n hello-web-app-routing
L'output di esempio seguente mostra la risorsa creata:
service/aks-helloworld created created
Creare la risorsa in ingresso che usa un nome host nella zona DNS privato di Azure e un indirizzo IP privato
Copiare il manifesto YAML seguente in un nuovo file denominato ingress.yaml e salvare il file nel computer locale.
Aggiornare
<Hostname>
con il nome dell'host DNS, ad esempiohelloworld.private.contoso.com
. Verificare di aver specificatonginx-internal
peringressClassName
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: nginx-internal rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix
Creare le risorse del cluster con il comando
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
L'output di esempio seguente mostra la risorsa creata:
ingress.networking.k8s.io/aks-helloworld created
Verificare che l'oggetto in ingresso gestito sia stato creato
È possibile verificare che l'ingresso gestito sia stato creato usando il comando kubectl get ingress
.
kubectl get ingress -n hello-web-app-routing
L'output di esempio seguente mostra l'ingresso gestito creato:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld nginx-internal helloworld.private.contoso.com 10.224.0.7 80 98s
Verificare che la zona DNS privato di Azure sia stata aggiornata
Tra qualche minuto, eseguire il comando az network private-dns record-set a list per visualizzare i record A per la zona DNS privato di Azure. Specificare il nome del gruppo di risorse e della zona DNS. In questo esempio, il gruppo di risorse è myResourceGroup e la zona DNS è private.contoso.com.
az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com
L'output di esempio seguente mostra il record creato:
[
{
"aRecords": [
{
"ipv4Address": "10.224.0.7"
}
],
"etag": "188f0ce5-90e3-49e6-a479-9e4053f21965",
"fqdn": "helloworld.private.contoso.com.",
"id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/helloworld",
"isAutoRegistered": false,
"name": "helloworld",
"resourceGroup": "foo",
"ttl": 300,
"type": "Microsoft.Network/privateDnsZones/A"
}
]
Passaggi successivi
Per altre informazioni di configurazione relative alla crittografia SSL di altri controller di ingresso NGINX avanzati e alla configurazione delle risorse in ingresso, vedere Configurazione DNS e SSL e configurazione del componente aggiuntivo Instradamento dell'applicazione.
Azure Kubernetes Service