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.
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.
- Un cluster AKS avec le module complémentaire de routage d’application.
- Azure Key Vault si vous voulez configurer l’arrêt SSL et stocker des certificats dans le coffre hébergé dans Azure.
- Azure DNS si vous voulez configurer la gestion des zones globales et privées et les héberger dans Azure.
- Pour attacher un Azure Key Vault ou une zone Azure DNS, le rôle Propriétaire, Administrateur de compte Azure ou Coadministrateur Azure doit être attribué à votre abonnement Azure.
- Toutes les zones DNS publiques doivent se trouver dans le même abonnement et le même groupe de ressources.
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>
Pour activer la prise en charge du trafic HTTPS, consultez les prérequis suivants :
- Un certificat SSL. Si vous n’en avez pas, vous pouvez créer un 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
À 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.
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>"
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
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.
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.
Notes
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}
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.
Notes
Si vous avez déjà une zone DNS Azure, ignorez cette étape.
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>
Notes
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.
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)
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
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.
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
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 quehttps://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 sectiontls
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 desecretName
est égale àkeyvault-
suivie de la valeur du nom de la ressource d’entrée (à partir demetadata.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>
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
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
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.
Commentaires sur Azure Kubernetes Service
Azure Kubernetes Service est un projet open source. Sélectionnez un lien pour fournir des commentaires :