Partager via


Utiliser Let’s Encrypt certificates on Application Gateway pour les clusters AKS

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 :

  1. 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.
    
  2. 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és ClusterIssuer 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
    
  3. 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’annotation certmanager.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.

  4. Une fois que vous avez correctement configuré votre certificat intermédiaire, vous pouvez basculer vers un serveur ACME de production :

    1. Remplacez l’annotation intermédiaire de votre ressource d’entrée par cert-manager.io/cluster-issuer: letsencrypt-prod.
    2. 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 par https://acme-v02.api.letsencrypt.org/directory.

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.