Partager via


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 un équilibreur de charge interne Azure. Il explique également comment configurer une zone Azure DNS privée afin d’activer 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é aks-cluster dans le test-rg à l’aide de la az aks get-credentials commande.

az aks get-credentials \
    --resource-group test-rg \
    --name aks-cluster

Créez un réseau virtuel

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

L’exemple suivant crée un réseau virtuel nommé vnet-1 dans le groupe de ressources test-rg , et un sous-réseau nommé sous-réseau-1 pour créer dans le réseau virtuel avec un préfixe d’adresse spécifique.

az network vnet create \
  --name vnet-1 \
  --resource-group test-rg \
  --location eastus \
  --address-prefix 10.2.0.0/16 \
  --subnet-name subnet-1 \
  --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.

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 test-rg .

az network private-dns zone create \
    --resource-group test-rg \
    --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é dns-link vers la zone private.contoso.com pour le réseau virtuel vnet-1. Incluez le paramètre --registration-enabled pour spécifier que le lien n’est pas enregistré.

az network private-dns link vnet create \
    --resource-group test-rg \
    --name dns-link \
    --zone-name private.contoso.com \
    --virtual-network vnet-1 \
    --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 test-rg du groupe de ressources.

    ZONEID=$(az network private-dns zone show \
    --resource-group test-rg \
    --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 aks-cluster dans le groupe de ressources test-rg.

    az aks approuting zone add \
    --resource-group test-rg \
    --name aks-cluster \
    --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 loadBalancerAnnotations champ pour contrôler le comportement du service du contrôleur d’entrée NGINX en définissant les annotations de l’équilibreur de charge. Pour plus d’informations sur les annotations de l’équilibreur de charge, consultez Personnalisations via des annotations Kubernetes.

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 l’espace de noms d’application appelé aks-store pour exécuter les exemples de pods à l’aide de la kubectl create namespace commande.

    kubectl create namespace aks-store
    
  2. Déployez l’application de magasin AKS à l’aide du fichier manifeste YAML suivant :

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
    

Ce manifeste crée les déploiements et services nécessaires pour l’application de magasin AKS.

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

Mettez à jour host avec le nom de votre hôte DNS, par exemple , store-front.private.contoso.com. Vérifiez que vous spécifiez nginx-internal pour ingressClassName.

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

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: nginx-internal
      rules:
      - host: store-front.private.contoso.com
        http:
          paths:
          - backend:
              service:
                name: store-front
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. Créez la ressource d’entrée à l’aide de la kubectl apply commande.

    kubectl apply -f ingress.yaml -n aks-store
    

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

    ingress.networking.k8s.io/store-front 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 aks-store

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

NAME          CLASS            HOSTS                             ADDRESS   PORTS   AGE
store-front   nginx-internal   store-front.private.contoso.com             80      10s

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 test-rg et la zone DNS est private.contoso.com.

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

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

[
  {
    "aRecords": [
      {
        "ipv4Address": "10.224.0.7"
      }
    ],
    "etag": "ecc303c5-4577-4ca2-b545-d34e160d1c2d",
    "fqdn": "store-front.private.contoso.com.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/test-rg/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/store-front",
    "isAutoRegistered": false,
    "name": "store-front",
    "resourceGroup": "test-rg",
    "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.