NGINX-ingangscontroller configureren ter ondersteuning van de privé-DNS-zone van Azure met de invoegtoepassing voor toepassingsroutering
In dit artikel wordt gedemonstreert hoe u een NGINX-ingangscontroller configureert voor gebruik met de interne Load Balancer van Azure en hoe u een privé-Azure DNS-zone configureert om DNS-omzetting voor de privé-eindpunten in te schakelen om specifieke domeinen op te lossen.
Voordat u begint
- Een AKS-cluster met de invoegtoepassing voor toepassingsroutering.
- Als u een privé-DNS-zone van Azure wilt koppelen, hebt u de rol Eigenaar, Azure-accountbeheerder of Medebeheerder van Azure nodig voor uw Azure-abonnement.
Verbinding maken met uw AKS-cluster
Als u vanaf uw lokale computer verbinding wilt maken met het Kubernetes-cluster, gebruikt kubectl
u de Kubernetes-opdrachtregelclient. U kunt deze lokaal installeren met behulp van de opdracht az aks install-cli . Als u Azure Cloud Shell gebruikt, is kubectl
al geïnstalleerd.
In het volgende voorbeeld wordt verbinding gemaakt met uw cluster met de naam myAKSCluster in myResourceGroup met behulp van de az aks get-credentials
opdracht.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Een virtueel netwerk maken
Als u een privé-DNS-zone naar uw virtuele netwerk wilt publiceren, moet u een lijst opgeven met virtuele netwerken die records binnen de zone mogen omzetten. Deze worden virtuele netwerkkoppelingen genoemd.
In het volgende voorbeeld wordt een virtueel netwerk met de naam myAzureVNet gemaakt in de resourcegroep myResourceGroup en één subnet met de naam mySubnet dat binnen het VNet met een specifiek adresvoorvoegsel moet worden gemaakt.
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
Een privé-DNS-zone van Azure maken
Notitie
U kunt de invoegtoepassing voor toepassingsroutering configureren om automatisch records te maken in een of meer globale en privé-DNS-zones van Azure voor hosts die zijn gedefinieerd in toegangsbeheerresources. Alle globale Azure DNS-zones en alle privé-Azure DNS-zones moeten zich in dezelfde resourcegroep bevinden.
U maakt een DNS-zone met behulp van de opdracht az network private-dns zone create , waarbij u de naam van de zone en de resourcegroep opgeeft waarin u deze wilt maken. In het volgende voorbeeld wordt een DNS-zone met de naam private.contoso.com gemaakt in de resourcegroep myResourceGroup .
az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com
U maakt een virtuele netwerkkoppeling naar de DNS-zone die u eerder hebt gemaakt met behulp van de opdracht az network private-dns link vnet create . In het volgende voorbeeld wordt een koppeling met de naam myDNSLink gemaakt naar de zone private.contoso.com voor het virtuele netwerk myAzureVNet. Neem de --registration-enabled
parameter op om op te geven dat de koppeling niet is ingeschakeld.
az network private-dns link vnet create --resource-group myResourceGroup \
--name myDNSLink \
--zone-name private.contoso.com \
--virtual-network myAzureVNet \
--registration-enabled false
De functie voor automatische registratie van azure DNS-privézones beheert DNS-records voor virtuele machines die zijn geïmplementeerd in een virtueel netwerk. Wanneer u een virtueel netwerk koppelt aan een privé-DNS-zone waarvoor deze instelling is ingeschakeld, wordt er een DNS-record gemaakt voor elke virtuele Azure-machine voor uw AKS-knooppunt dat in het virtuele netwerk is geïmplementeerd.
Een privé-DNS-zone van Azure koppelen aan de invoegtoepassing voor toepassingsroutering
Notitie
De az aks approuting zone add
opdracht gebruikt de machtigingen van de gebruiker die de opdracht uitvoert om de azure DNS-zoneroltoewijzing te maken. De rol Privé-DNS zonebijdrager is een ingebouwde rol voor het beheren van privé-DNS-resources en wordt toegewezen aan de beheerde identiteit van de invoegtoepassing. Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.
Haal de resource-id voor de DNS-zone op met behulp van de
az network dns zone show
opdracht en stel de uitvoer in op een variabele met de naamZONEID
. In het volgende voorbeeld wordt een query uitgevoerd op de zone private.contoso.com in de resourcegroep myResourceGroup.ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
Werk de invoegtoepassing bij om integratie met Azure DNS in te schakelen met behulp van de
az aks approuting zone
opdracht. U kunt een door komma's gescheiden lijst met resource-id's voor DNS-zone doorgeven. In het volgende voorbeeld wordt het AKS-cluster myAKSCluster bijgewerkt in de resourcegroep myResourceGroup.az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
Een NGINX-ingangscontroller maken met een privé-IP-adres en een interne load balancer
De invoegtoepassing voor toepassingsroutering maakt gebruik van een aangepaste Kubernetes-resourcedefinitie (CRD) die wordt aangeroepen NginxIngressController
om NGINX-ingangscontrollers te configureren. U kunt meer ingangscontrollers maken of een bestaande configuratie wijzigen.
NginxIngressController
CRD heeft een loadBalancerAnnotations
veld om het gedrag van de service van de NGINX-ingangscontroller te beheren door load balancer-aantekeningen in te stellen.
Voer de volgende stappen uit om een NGINX-ingangscontroller te maken met een interne Azure Load Balancer met een privé-IP-adres.
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam nginx-internal-controller.yaml en sla het bestand op uw lokale computer op.
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"
Maak de NGINX-controllerbronnen voor inkomend verkeer met behulp van de
kubectl apply
opdracht.kubectl apply -f nginx-internal-controller.yaml
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Controleren of de ingangscontroller is gemaakt
U kunt de status van de NGINX-ingangscontroller controleren met behulp van de
kubectl get nginxingresscontroller
opdracht.kubectl get nginxingresscontroller
In de volgende voorbeelduitvoer ziet u de gemaakte resource. Het kan enkele minuten duren voordat de controller beschikbaar is:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE default webapprouting.kubernetes.azure.com nginx True nginx-internal nginx-internal nginx-internal True
Een app implementeren
De invoegtoepassing voor toepassingsroutering maakt gebruik van aantekeningen op Kubernetes Ingress-objecten om de juiste resources te maken.
Maak een toepassingsnaamruimte die wordt aangeroepen
hello-web-app-routing
om de voorbeeldpods uit te voeren met behulp van dekubectl create namespace
opdracht.kubectl create namespace hello-web-app-routing
Maak de implementatie door het volgende YAML-manifest te kopiëren naar een nieuw bestand met de naam deployment.yaml en sla het bestand op uw lokale computer op.
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)"
Maak de service door het volgende YAML-manifest te kopiëren naar een nieuw bestand met de naam service.yaml en sla het bestand op uw lokale computer op.
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
Maak de clusterbronnen met behulp van de
kubectl apply
opdracht.kubectl apply -f deployment.yaml -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
deployment.apps/aks-helloworld created created
kubectl apply -f service.yaml -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
service/aks-helloworld created created
Maak de toegangsbeheerobjectresource die gebruikmaakt van een hostnaam in de privé-DNS-zone van Azure en een privé-IP-adres
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam ingress.yaml en sla het bestand op uw lokale computer op.
Werk
<Hostname>
bijvoorbeeldhelloworld.private.contoso.com
bij met de naam van uw DNS-host. Controleer of u opgeeftnginx-internal
voor deingressClassName
.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
Maak de clusterbronnen met behulp van de
kubectl apply
opdracht.kubectl apply -f ingress.yaml -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
ingress.networking.k8s.io/aks-helloworld created
Controleren of het beheerde inkomend verkeer is gemaakt
U kunt controleren of het beheerde inkomend verkeer is gemaakt met behulp van de kubectl get ingress
opdracht.
kubectl get ingress -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u het gemaakte beheerde inkomend verkeer:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld nginx-internal helloworld.private.contoso.com 10.224.0.7 80 98s
Controleren of de privé-DNS-zone van Azure is bijgewerkt
Voer in een paar minuten de az network private-dns-record-set een lijstopdracht uit om de A-records voor uw privé-DNS-zone van Azure weer te geven. Geef de naam van de resourcegroep en de naam van de DNS-zone op. In dit voorbeeld is de resourcegroep myResourceGroup en de DNS-zone is private.contoso.com.
az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com
In de volgende voorbeelduitvoer ziet u de gemaakte record:
[
{
"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"
}
]
Volgende stappen
Voor andere configuratie-informatie met betrekking tot SSL-versleuteling, andere geavanceerde NGINX-ingangscontroller en de resourceconfiguratie voor inkomend verkeer, controleert u de configuratie van dns- en SSL-configuratie en toepassingsroutering.
Azure Kubernetes Service