Partager via


Configurer un nom de domaine personnalisé et un certificat SSL avec le module complémentaire de routage d’application

Une entrée est un objet d’API qui définit des règles, lesquelles autorisent l’accès externe aux services dans un cluster Azure Kubernetes Service (AKS). Quand vous créez un objet d’entrée qui utilise les classes d’entrée nginx du module complémentaire de routage d’application, le module complémentaire crée, configure et gère un ou plusieurs contrôleurs d’entrée dans votre cluster AKS.

Cet article explique comment configurer une configuration d’entrée avancée pour chiffrer le trafic avec des certificats SSL/TLS stockés dans Azure Key Vault et utiliser Azure DNS pour gérer les zones DNS.

Fonctionnalités du module complémentaire de routage d’applications avec NGINX

Le module complémentaire de routage d’application avec nginx fournit ce qui suit :

  • Configuration simple des contrôleurs d’entrée nginx managés.
  • Intégration à un système DNS externe comme Azure DNS pour la gestion des zones globales et privées
  • Arrêt SSL avec des certificats stockés dans un coffre de clés, comme Azure Key Vault.

Prérequis

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

Configurez kubectl afin qu’il se connecte à votre cluster Kubernetes en utilisant la commande az aks get-credentials.

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

Terminer le trafic HTTPS avec des certificats à partir d’Azure Key Vault

Pour activer la prise en charge du trafic HTTPS, consultez les prérequis suivants :

Créer un coffre de clés Azure Key Vault pour y stocker le certificat

Notes

Si vous avez déjà une clé dans Azure Key Vault, ignorez cette étape.

Créez un Azure Key Vault à l’aide de la commande az keyvault create.

az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true

Créer et exporter un certificat SSL auto-signé

À des fins de test, vous pouvez utiliser un certificat public auto-signé au lieu d’un certificat signé par une autorité de certification. Si vous disposez déjà un certificat, vous pouvez ignorer cette étape.

Attention

Les certificats auto-signés sont des certificats numériques qui ne sont pas signés par une autorité de certification tierce approuvée. Les certificats auto-signés sont créés, émis et signés par l’entreprise ou le développeur responsable du site web ou du logiciel signé. C’est pourquoi les certificats auto-signés sont considérés comme dangereux pour les sites web et les applications accessibles au public. Azure Key Vault a conclu un partenariat de confiance avec des autorités de certification.

  1. Créez un certificat SSL auto-signé à utiliser avec l’entrée en utilisant la commande openssl req. Veillez à remplacer <Hostname> par le nom DNS que vous utilisez.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
    
  2. Exportez le certificat SSL et ignorez l’invite de mot de passe à l’aide de la commande openssl pkcs12 -export.

    openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
    

Importer un certificat dans Azure Key Vault

Importez le certificat SSL dans Azure Key Vault à l’aide de la commande az keyvault certificate import. Si votre certificat est protégé par mot de passe, vous pouvez transmettre le mot de passe via l’indicateur --password.

az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]

Important

Pour permettre au module complémentaire de recharger les certificats d’Azure Key Vault qui ont changé, vous devez activer la fonctionnalité de rotation automatique des secrets du pilote CSI du magasin de secrets, en spécifiant l’argument --enable-secret-rotation. Quand la permutation automatique est activée, le pilote met à jour le montage du pod et le secret Kubernetes en recherchant régulièrement les changements, selon un intervalle d’interrogation de permutation que vous définissez. L’intervalle d’interrogation de rotation par défaut est de deux minutes.

Activer l’intégration d’Azure Key Vault

Sur un cluster avec le module complémentaire de routage d’applications activé, utilisez la commande az aks approuting update à l’aide des arguments --enable-kv et --attach-kv pour activer le fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets et appliquez les attributions de rôles requises.

Azure Key Vault propose deux systèmes d’autorisation : le contrôle d’accès en fonction du rôle Azure (Azure RBAC), qui fonctionne sur le plan de gestion, et le modèle de stratégie d’accès, qui fonctionne à la fois sur le plan de gestion et sur le plan de données. L’opération --attach-kv choisira le modèle d’accès approprié à utiliser.

Remarque

La commande az aks approuting update --attach-kv utilise les autorisations de l’utilisateur qui exécute la commande pour créer l’attribution de rôle Azure Key Vault. Ce rôle est attribué à 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 la ressource Azure Key Vault.

KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)

Ensuite, mettez à jour le module complémentaire de routage d’applications pour activer le pilote CSI du magasin de secrets Azure Key Vault et appliquer l’attribution de rôle.

az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}

Activer l’intégration Azure DNS

Pour activer la prise en charge des zones DNS, vérifiez la condition préalable suivante :

  • Le module complémentaire de routage d’application peut être configuré pour créer automatiquement des enregistrements sur une ou plusieurs zones DNS globales et privées Azure pour les hôtes définis sur des ressources d’entrée. Toutes les zones DNS Azure globales doivent se trouver dans le même groupe de ressources, et toutes les zones DNS Azure privées doivent se trouver dans le même groupe de ressources. Si vous n’avez pas de zone DNS Azure, vous pouvez en créer une.

Créer une zone Azure DNS publique

Remarque

Si vous avez déjà une zone DNS Azure, ignorez cette étape.

  1. Création d’une zone Azure DNS à l’aide de la commande az network dns zone create.

    az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
    

Attacher la zone DNS Azure au module complémentaire de routage d’application

Remarque

La commande az aks approuting zone add utilise les autorisations de l’utilisateur qui exécute la commande pour créer l’attribution de rôle de la zone Azure DNS. Ce rôle est attribué à 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 avec la commande az network dns zone show et définissez la sortie sur une variable nommée ZONEID.

    ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
    
  2. Mettez à jour le module complémentaire avec la commande az aks approuting zone pour activer l’intégration à Azure DNS. Vous pouvez passer une liste séparée par des virgules de plusieurs ID de ressource de zone DNS.

    az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
    

Créer l’entrée qui utilise un nom d’hôte et un certificat à partir d’Azure Key Vault

Le module complémentaire de routage d’application crée une classe d’entrée sur le cluster appelée webapprouting.kubernetes.azure.com. Quand vous créez un objet d’entrée avec cette classe, cela active le module complémentaire.

  1. Obtenez dans Azure Key Vault l’URI de certificat à utiliser dans l’entrée avec la commande az keyvault certificate show.

    az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
    

    L’exemple de sortie suivant montre l’URI de certificat retourné par la commande :

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
    
  2. 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 et <KeyVaultCertificateUri> avec l’URI retourné par la commande pour interroger Azure Key Vault à l’étape 1 ci-dessus. La valeur de chaîne de *<KeyVaultCertificateUri>* ne doit inclure que https://yourkeyvault.vault.azure.net/certificates/certname. La version du certificat à la fin de la chaîne d’URI doit être omise pour obtenir la version actuelle.

    La clé secretName de la section tls définit le nom du secret qui contient le certificat pour cette ressource d’entrée. Ce certificat est présenté dans le navigateur lorsqu’un client accède à l’URL spécifiée dans la clé <Hostname> . Assurez-vous que la valeur de secretName est égale à keyvault- suivie de la valeur du nom de la ressource d’entrée (à partir de metadata.name). Dans l’exemple YAML, secretName doit être égal à keyvault-<your Ingress name>.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.azure.com/tls-cert-keyvault-uri: <KeyVaultCertificateUri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <Hostname>
        secretName: keyvault-<your ingress name>
    
  3. 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 montre l’entrée managée créée :

NAME             CLASS                                HOSTS               ADDRESS       PORTS     AGE
aks-helloworld   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m

Étapes suivantes

Découvrez le monitoring des métriques de contrôleur d’entrée nginx incluses dans le module complémentaire de routage d’application avec Prometheus dans Grafana dans le cadre de l’analyse des performances et de l’utilisation de votre application.