Konfigurera NGINX-ingresskontrollant för att stödja privat DNS-zon i Azure med tillägg för programroutning
Den här artikeln visar hur du konfigurerar en NGINX-ingresskontrollant så att den fungerar med en intern Azure-lastbalanserare och konfigurerar en privat Azure DNS-zon för att aktivera DNS-matchning för de privata slutpunkterna för att lösa specifika domäner.
Innan du börjar
- Ett AKS-kluster med tillägget för programdirigering.
- Om du vill koppla en privat DNS-zon i Azure behöver du rollen Ägare, Azure-kontoadministratör eller Azure-medadministratör i din Azure-prenumeration.
Ansluta till ditt AKS-kluster
Om du vill ansluta till Kubernetes-klustret från den lokala datorn använder kubectl
du kubernetes-kommandoradsklienten. Du kan installera den lokalt med kommandot az aks install-cli . Om du använder Azure Cloud Shell är kubectl
redan installerat.
I följande exempel konfigureras anslutning till klustret med namnet myAKSCluster i myResourceGroup med hjälp av az aks get-credentials
kommandot .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Skapa ett virtuellt nätverk
Om du vill publicera en privat DNS-zon till ditt virtuella nätverk måste du ange en lista över virtuella nätverk som kan matcha poster i zonen. Dessa kallas virtuella nätverkslänkar.
I följande exempel skapas ett virtuellt nätverk med namnet myAzureVNet i resursgruppen myResourceGroup och ett undernät med namnet mySubnet som ska skapas i det virtuella nätverket med ett specifikt adressprefix.
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
Skapa en privat DNS-zon i Azure
Kommentar
Du kan konfigurera tillägget för programroutning för att automatiskt skapa poster i en eller flera globala Och privata DNS-zoner i Azure för värdar som definierats för inkommande resurser. Alla globala Azure DNS-zoner och alla privata Azure DNS-zoner måste finnas i samma resursgrupp.
Du skapar en DNS-zon med kommandot az network private-dns zone create och anger namnet på zonen och resursgruppen som du vill skapa den i. I följande exempel skapas en DNS-zon med namnet private.contoso.com i resursgruppen myResourceGroup .
az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com
Du skapar en virtuell nätverkslänk till DNS-zonen som skapades tidigare med kommandot az network private-dns link vnet create . I följande exempel skapas en länk med namnet myDNSLink till zonen private.contoso.com för det virtuella nätverket myAzureVNet. Inkludera parametern --registration-enabled
för att ange att länken inte är registreringsaktiverad.
az network private-dns link vnet create --resource-group myResourceGroup \
--name myDNSLink \
--zone-name private.contoso.com \
--virtual-network myAzureVNet \
--registration-enabled false
Funktionen för automatisk registrering i den privata zonen Azure DNS hanterar DNS-poster för virtuella datorer som distribueras i ett virtuellt nätverk. När du länkar ett virtuellt nätverk med en privat DNS-zon med den här inställningen aktiverad skapas en DNS-post för varje virtuell Azure-dator för aks-noden som distribueras i det virtuella nätverket.
Koppla en privat DNS-zon i Azure till tillägget för programroutning
Kommentar
Kommandot az aks approuting zone add
använder behörigheterna för användaren som kör kommandot för att skapa rolltilldelningen i Azure DNS-zonen . Rollen Privat DNS Zone Contributor är en inbyggd roll för att hantera privata DNS-resurser och tilldelas till tilläggets hanterade identitet. Mer information om AKS-hanterade identiteter finns i Sammanfattning av hanterade identiteter.
Hämta resurs-ID:t för DNS-zonen med kommandot
az network dns zone show
och ange utdata till en variabel med namnetZONEID
. I följande exempel frågar zonen private.contoso.com i resursgruppen myResourceGroup.ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
Uppdatera tillägget för att aktivera integrering med Azure DNS med hjälp av
az aks approuting zone
kommandot . Du kan skicka en kommaavgränsad lista över RESURS-ID:t för DNS-zonen. I följande exempel uppdateras AKS-klustret myAKSCluster i resursgruppen myResourceGroup.az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
Skapa en NGINX-ingresskontrollant med en privat IP-adress och en intern lastbalanserare
Tillägget för programroutning använder en anpassad Kubernetes-resursdefinition (CRD) som anropas NginxIngressController
för att konfigurera NGINX-ingresskontrollanter. Du kan skapa fler ingresskontrollanter eller ändra en befintlig konfiguration.
NginxIngressController
CRD har ett loadBalancerAnnotations
fält som styr beteendet för NGINX-ingresskontrollantens tjänst genom att ange anteckningar för lastbalanserare.
Utför följande steg för att skapa en NGINX-ingresskontrollant med en intern Azure Load Balancer med en privat IP-adress.
Kopiera följande YAML-manifest till en ny fil med namnet nginx-internal-controller.yaml och spara filen på den lokala datorn.
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"
Skapa NGINX-ingresskontrollantresurserna
kubectl apply
med kommandot .kubectl apply -f nginx-internal-controller.yaml
Följande exempelutdata visar den skapade resursen:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Kontrollera att ingresskontrollanten har skapats
Du kan kontrollera statusen för NGINX-ingresskontrollanten
kubectl get nginxingresscontroller
med hjälp av kommandot .kubectl get nginxingresscontroller
Följande exempelutdata visar den skapade resursen. Det kan ta några minuter innan kontrollanten är tillgänglig:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE default webapprouting.kubernetes.azure.com nginx True nginx-internal nginx-internal nginx-internal True
Distribuera ett program
Tillägget för programroutning använder anteckningar på Kubernetes-ingressobjekt för att skapa lämpliga resurser.
Skapa ett programnamnområde med namnet
hello-web-app-routing
för att köra exempelpoddar med kommandotkubectl create namespace
.kubectl create namespace hello-web-app-routing
Skapa distributionen genom att kopiera följande YAML-manifest till en ny fil med namnet deployment.yaml och spara filen på den lokala datorn.
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)"
Skapa tjänsten genom att kopiera följande YAML-manifest till en ny fil med namnet service.yaml och spara filen på den lokala datorn.
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
Skapa klusterresurserna
kubectl apply
med kommandot .kubectl apply -f deployment.yaml -n hello-web-app-routing
Följande exempelutdata visar den skapade resursen:
deployment.apps/aks-helloworld created created
kubectl apply -f service.yaml -n hello-web-app-routing
Följande exempelutdata visar den skapade resursen:
service/aks-helloworld created created
Skapa den ingressresurs som använder ett värdnamn i den privata DNS-zonen i Azure och en privat IP-adress
Kopiera följande YAML-manifest till en ny fil med namnet ingress.yaml och spara filen på den lokala datorn.
Uppdatera
<Hostname>
med namnet på dns-värden, till exempelhelloworld.private.contoso.com
. Kontrollera attnginx-internal
du anger föringressClassName
.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
Skapa klusterresurserna
kubectl apply
med kommandot .kubectl apply -f ingress.yaml -n hello-web-app-routing
Följande exempelutdata visar den skapade resursen:
ingress.networking.k8s.io/aks-helloworld created
Kontrollera att den hanterade ingressen har skapats
Du kan kontrollera att den hanterade ingressen har skapats med hjälp av kubectl get ingress
kommandot .
kubectl get ingress -n hello-web-app-routing
Följande exempelutdata visar den skapade hanterade ingressen:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld nginx-internal helloworld.private.contoso.com 10.224.0.7 80 98s
Kontrollera att den privata DNS-zonen i Azure har uppdaterats
Om några minuter kör du kommandot az network private-dns record-set a list för att visa A-posterna för din privata DNS-zon i Azure. Ange namnet på resursgruppen och namnet på DNS-zonen. I det här exemplet är resursgruppen myResourceGroup och DNS-zonen private.contoso.com.
az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com
Följande exempelutdata visar den skapade posten:
[
{
"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"
}
]
Nästa steg
Annan konfigurationsinformation som rör SSL-kryptering med annan avancerad NGINX-ingresskontrollant och ingressresurskonfiguration finns i KONFIGURATION av DNS- och SSL-konfiguration och tilläggskonfiguration för programroutning.
Azure Kubernetes Service