Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez configurer votre instance Azure Kubernetes Service (AKS) pour utiliser Let’s Encrypt et obtenir automatiquement un certificat TLS/SSL pour votre domaine. Le certificat est installé sur Azure Application Gateway, qui effectue une terminaison TLS/SSL pour votre cluster AKS.
La configuration décrite dans cet article utilise le module complémentaire cert-manager Kubernetes, qui automatise la création et la gestion des certificats.
Conseil
Envisagez une Passerelle d'application pour conteneurs pour votre solution d’entrée Kubernetes.
Installer le module complémentaire
Utilisez les étapes suivantes pour installer cert-manager sur votre cluster AKS existant :
Exécutez le script suivant pour installer le graphique Helm du gestionnaire de certificats. Le script effectue les actions suivantes :
- Crée un espace de noms
cert-manager
sur votre cluster AKS - Crée les définitions de ressources personnalisées suivantes :
Certificate
,Challenge
,ClusterIssuer
,Issuer
,Order
- Installe le graphique cert-manager (à partir du site cert-manager)
#!/bin/bash # Install the CustomResourceDefinition resources separately kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.crds.yaml # Create the namespace for cert-manager kubectl create namespace cert-manager # Label the cert-manager namespace to disable resource validation kubectl label namespace cert-manager cert-manager.io/disable-validation=true # Add the Jetstack Helm repository helm repo add jetstack https://charts.jetstack.io # Update your local Helm chart repository cache helm repo update # Install the cert-manager Helm chart # Helm v3+ helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.16.1 \ # --set installCRDs=true # To automatically install and manage the CRDs as part of your Helm release, # you must add the --set installCRDs=true flag to your Helm installation command.
- Crée un espace de noms
Créez une ressource
ClusterIssuer
. Cert-manager requiert cette ressource pour représenter l’autorité de certification Let’s Encrypt qui émet le certificat signé.Cert-manager utilise la ressource
ClusterIssuer
sans espace de noms pour émettre des certificats qui peuvent être utilisés à partir de plusieurs espaces de noms. Nous allons utiliser le protocole ACME pour vérifier que vous contrôlez un nom de domaine particulier et pour émettre un certificat. Vous pouvez obtenir plus d’informations sur la configuration des propriétésClusterIssuer
dans la documentation cert-manager.ClusterIssuer
demande au gestionnaire de certificats d’émettre des certificats à l’aide de l’environnement de préproduction Let’s Encrypt utilisé pour les tests. (Le certificat racine n’est pas présent dans les magasins d’approbations de navigateur/client.)Le type de stimulation par défaut dans le YAML suivant est
http01
. Vous trouverez d’autres types de défis dans la documentation Let’s Encrypt.Dans le YAML suivant, veillez à remplacer
<YOUR.EMAIL@ADDRESS>
par vos informations.#!/bin/bash kubectl apply -f - <<EOF apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: # You must replace this email address with your own. # Let's Encrypt uses this to contact you about expiring # certificates, and issues related to your account. email: <YOUR.EMAIL@ADDRESS> # ACME server URL for Let's Encrypt's staging environment. # The staging environment won't issue trusted certificates but is # used to ensure that the verification process is working properly # before moving to production server: https://acme-staging-v02.api.letsencrypt.org/directory privateKeySecretRef: # Secret resource used to store the account's private key. name: example-issuer-account-key # Enable the HTTP-01 challenge provider # you prove ownership of a domain by ensuring that a particular # file is present at the domain solvers: - http01: ingress: # class: azure/application-gateway ingressTemplate: metadata: annotations: kubernetes.io/ingress.class: azure/application-gateway EOF
Créez une ressource d’entrée pour exposer l’application
guestbook
à l’aide du déploiement d’Application Gateway avec le certificat Let’s Encrypt.Assurez-vous que le déploiement de votre Application Gateway dispose d'une configuration IP frontale publique avec un nom DNS. Utilisez le domaine par défaut
azure.com
, ou provisionnez une zone Azure DNS, puis attribuez votre propre domaine personnalisé. L’annotationcertmanager.k8s.io/cluster-issuer: letsencrypt-staging
indique au gestionnaire de certificats de traiter la ressource d’entrée étiquetée.Dans le YAML suivant, veillez à remplacer
<PLACEHOLDERS.COM>
par votre propre domaine ou par le domaine Application Gateway (par exemple,kh-aks-ingress.westeurope.cloudapp.azure.com
).kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook-letsencrypt-staging annotations: kubernetes.io/ingress.class: azure/application-gateway cert-manager.io/cluster-issuer: letsencrypt-staging spec: tls: - hosts: - <PLACEHOLDERS.COM> secretName: guestbook-secret-name rules: - host: <PLACEHOLDERS.COM> http: paths: - backend: serviceName: frontend servicePort: 80 EOF
Après quelques secondes, vous pouvez accéder au service
guestbook
via l’URL HTTPS d’Application Gateway à l’aide du certificat émis automatiquement Let’s Encrypt pour la préproduction.Votre navigateur peut vous avertir d’une autorité de certification non valide. C’est pourquoi
CN=Fake LE Intermediate X1
émis le certificat intermédiaire. Cet avertissement signifie que le système a fonctionné comme prévu et que vous êtes prêt pour votre certificat de production.Une fois que vous avez correctement configuré votre certificat intermédiaire, vous pouvez basculer vers un serveur ACME de production :
- Remplacez l’annotation intermédiaire de votre ressource d’entrée par
cert-manager.io/cluster-issuer: letsencrypt-prod
. - Supprimez la ressource de
ClusterIssuer
intermédiaire existante que vous avez créée précédemment. Créez une ressource intermédiaire en remplaçant le serveur ACME de l'ClusterIssuer
YAML précédent parhttps://acme-v02.api.letsencrypt.org/directory
.
- Remplacez l’annotation intermédiaire de votre ressource d’entrée par
Avant l’expiration du certificat Let’s Encrypt, cert-manager
met automatiquement à jour le certificat dans le magasin de secrets Kubernetes. À ce stade, le contrôleur d’entrée Application Gateway applique le secret mis à jour référencé dans les ressources d’entrée qu’il utilise pour configurer Application Gateway.