Share via


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

Verbinding maken naar uw AKS-cluster

Als u vanaf uw lokale computer verbinding wilt maken met het Kubernetes-cluster, gebruikt kubectlu 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 myResourceGroupmet 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 myResourceGoup --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.

  1. 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 naam ZONEID. 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)
    
  2. 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.

NginxIngressControllerCRD 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.

  1. 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"
    
  2. 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
    
  3. 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.

  1. Maak een toepassingsnaamruimte die wordt aangeroepen hello-web-app-routing om de voorbeeldpods uit te voeren met behulp van de kubectl create namespace opdracht.

    kubectl create namespace hello-web-app-routing
    
  2. 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)"
    
  3. 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
    
  4. 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

  1. 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> bijvoorbeeld helloworld.private.contoso.combij met de naam van uw DNS-host. Controleer of u opgeeft nginx-internal voor de ingressClassName.

    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
    
  2. 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.