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
- Un cluster AKS avec le module complémentaire de routage d’application.
- Pour attacher une zone DNS privée Azure, vous avez besoin du propriétaire, compte d’administrateur Azureou le rôle Azure coadministrateur sur votre abonnement Azure.
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.
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éeZONEID
. 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)
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.
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"
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
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.
Créez un espace de noms d’application appelé
hello-web-app-routing
pour exécuter les exemples de pods à l’aide de la commandekubectl create namespace
.kubectl create namespace hello-web-app-routing
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)"
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
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
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écifieznginx-internal
pour leingressClassName
.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
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.
Azure Kubernetes Service