Configurer le contrôleur d’entrée NGINX pour prendre en charge la zone DNS privée Azure avec le module complémentaire de routage des applications

Cet article explique comment configurer un contrôleur d’entrée NGINX pour qu’il fonctionne avec l’équilibreur de charge interne Azure et configurer une zone DNS Azure privée pour permettre la résolution DNS pour les points de terminaison privés afin de résoudre des domaines spécifiques.

Avant de commencer

Se connecter à votre cluster AKS

Pour vous connecter au cluster Kubernetes à partir de votre ordinateur local, vous utilisez kubectl, le client de ligne de commande Kubernetes. Vous pouvez l’installer localement avec la commande az aks install-cli. Si vous utilisez Azure Cloud Shell, kubectl est déjà installé.

L’exemple suivant configure la connexion à votre cluster nommé myAKSCluster dans le myResourceGroup à l’aide de la commande az aks get-credentials.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Créez un réseau virtuel

Pour publier une zone DNS privée sur votre réseau virtuel, vous spécifiez la liste des réseaux virtuels qui sont autorisés à résoudre les enregistrements dans la zone. Ces liens sont appelés liens de réseau virtuel.

L’exemple suivant crée un réseau virtuel nommé myAzureVNet dans le groupe de ressources myResourceGroup et un sous-réseau nommé mySubnet créer dans le réseau virtuel avec un préfixe d’adresse spécifique.

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

Créer une zone DNS privée Azure

Remarque

Vous pouvez configurer le module complémentaire de routage des applications pour créer automatiquement des enregistrements sur une ou plusieurs zones DNS globales et privées Azure pour les hôtes définis sur les ressources d’entrée. Toutes les zones Azure DNS globales et toutes les zones Azure DNS privées doivent se trouver dans le même groupe de ressources.

Vous créez une zone DNS à l'aide de la commande az network private-dns zone create, en spécifiant le nom de la zone et le groupe de ressources dans lequel la créer. L’exemple suivant crée une zone DNS nommée private.contoso.com dans le groupe de ressources myResourceGroup.

az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com

Vous créez un lien de réseau virtuel vers la zone DNS créée précédemment à l’aide de la commande az network private-dns link vnet create. L’exemple suivant crée un lien nommé myDNSLink à la zone private.contoso.com pour le réseau virtuel myAzureVNet. Ajoutez le paramètre --registration-enabled pour spécifier que le lien n’est pas activé.

az network private-dns link vnet create --resource-group myResourceGroup \
  --name myDNSLink \
  --zone-name private.contoso.com \
  --virtual-network myAzureVNet \
  --registration-enabled false

La fonctionnalité d’inscription automatique de zone privée Azure DNS gère les enregistrements DNS pour les machines virtuelles déployées dans un réseau virtuel. Lorsque vous liez un réseau virtuel avec une zone DNS privée avec ce paramètre activé, un enregistrement DNS est créé pour chaque machine virtuelle Azure pour votre nœud AKS déployé dans le réseau virtuel.

Attacher une zone DNS privée Azure au module complémentaire de routage d’application

Remarque

La commande az aks approuting zone add utilise les autorisations de l’utilisateur exécutant la commande pour créer l’attribution de rôle Zone Azure DNS. Le rôle contributeur de zone DNS privée est un rôle intégré pour la gestion des ressources DNS privées et est affecté à l’identité managée du module complémentaire. Pour plus d’informations sur les identités managées AKS, consultez Résumé des identités managées.

  1. Récupérez l’ID de ressource de la zone DNS à l’aide de la commande az network dns zone show et définissez la sortie sur une variable nommée ZONEID. L’exemple suivant interroge la zone private.contoso.com dans le groupe de ressources myResourceGroup.

    ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
    
  2. Mettez à jour le module complémentaire pour activer l’intégration à Azure DNS à l’aide de la commande az aks approuting zone. Vous pouvez passer une liste séparée par des virgules de plusieurs ID de ressource de zone DNS. L’exemple suivant met à jour le cluster AKS myAKSCluster dans le groupe de ressources myResourceGroup.

    az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
    

Créer un contrôleur d’entrée NGINX avec une adresse IP privée et un équilibreur de charge interne

Le module complémentaire de routage d’applications utilise une définition de ressource personnalisée (CRD) Kubernetes appelée NginxIngressController pour configurer des contrôleurs d’entrée NGINX. Vous pouvez créer d’autres contrôleurs d’entrée ou modifier une configuration existante.

NginxIngressController CRD a un champ loadBalancerAnnotations pour contrôler le comportement du service du contrôleur d’entrée NGINX en définissant annotations d’équilibreur de charge.

Procédez comme suit pour créer un contrôleur d’entrée NGINX avec un équilibreur de charge Azure interne avec une adresse IP privée.

  1. Copiez le manifeste YAML suivant dans un nouveau fichier nommé nginx-internal-controller.yaml et enregistrez le fichier sur votre ordinateur local.

    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. Créez les ressources du contrôleur d’entrée NGINX à l’aide de la commande kubectl apply.

    kubectl apply -f nginx-internal-controller.yaml
    

    L’exemple de sortie suivant présente la ressource créée :

    nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
    
  3. Vérifier que le contrôleur d’entrée a été créé

    Vous pouvez vérifier l’état du contrôleur d’entrée NGINX à l’aide de la commande kubectl get nginxingresscontroller.

    kubectl get nginxingresscontroller
    

    L’exemple de sortie suivant montre la ressource créée. La disponibilité du contrôleur peut prendre quelques minutes :

    NAME             INGRESSCLASS                         CONTROLLERNAMEPREFIX   AVAILABLE
    default          webapprouting.kubernetes.azure.com   nginx                  True
    nginx-internal   nginx-internal                       nginx-internal         True
    

Déployer une application

Le module complémentaire de routage d’applications utilise des annotations sur des objets d’entrée Kubernetes pour créer les ressources appropriées.

  1. Créez un espace de noms d’application appelé hello-web-app-routing pour exécuter les exemples de pods à l’aide de la commande kubectl create namespace.

    kubectl create namespace hello-web-app-routing
    
  2. Créez le déploiement en copiant le manifeste YAML suivant dans un nouveau fichier nommé deployment.yaml et enregistrez le fichier sur votre ordinateur local.

    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. Créez le service en copiant le manifeste YAML suivant dans un nouveau fichier nommé service.yaml et enregistrez le fichier sur votre ordinateur local.

    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: aks-helloworld
    
  4. Créez les ressources de cluster avec la commande kubectl apply.

    kubectl apply -f deployment.yaml -n hello-web-app-routing
    

    L’exemple de sortie suivant présente la ressource créée :

    deployment.apps/aks-helloworld created created
    
    kubectl apply -f service.yaml -n hello-web-app-routing
    

    L’exemple de sortie suivant présente la ressource créée :

    service/aks-helloworld created created
    

Créer la ressource d’entrée qui utilise un nom d’hôte sur la zone DNS privée Azure et une adresse IP privée

  1. Copiez le manifeste YAML suivant dans un nouveau fichier nommé ingress.yaml et enregistrez le fichier sur votre ordinateur local.

    Mettez à jour <Hostname> avec le nom de votre hôte DNS, par exemple, helloworld.private.contoso.com. Vérifiez que vous spécifiez nginx-internal pour le 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. Créez les ressources de cluster avec la commande kubectl apply.

    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

    L’exemple de sortie suivant montre la ressource créée :

    ingress.networking.k8s.io/aks-helloworld created
    

Vérifier que l’entrée managée a été créée

Vous pouvez vérifier que l’entrée managée a été créée avec la commande kubectl get ingress.

kubectl get ingress -n hello-web-app-routing

L’exemple de sortie suivant présente l’entrée managée créée :

NAME             CLASS            HOSTS                            ADDRESS      PORTS   AGE
aks-helloworld   nginx-internal   helloworld.private.contoso.com   10.224.0.7   80      98s

Vérifier que la zone DNS privée Azure a été mise à jour

En quelques minutes, exécutez la commande az network private-dns record-set a list pour afficher les enregistrements A pour votre zone DNS privée Azure. Spécifiez le nom du groupe de ressources et le nom de la zone DNS. Dans cet exemple, le groupe de ressources est myResourceGroup et la zone DNS est private.contoso.com.

az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com

L’exemple de sortie suivant montre l’enregistrement créé :

[
  {
    "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"
  }
]

Étapes suivantes

Pour obtenir d’autres informations de configuration relatives au chiffrement SSL, autres contrôleurs d’entrée NGINX avancés et configuration des ressources d’entrée, passez en revue configuration DNS et SSL et configuration du module complémentaire de routage des applications.