Sdílet prostřednictvím


Použití certifikátů Let's Encrypt ve službě Application Gateway pro clustery AKS

Instanci služby Azure Kubernetes Service (AKS) můžete nakonfigurovat tak, aby používala let's Encrypt a automaticky získala certifikát TLS/SSL pro vaši doménu. Certifikát je nainstalován na Azure Application Gateway, která provádí ukončení protokolu TLS/SSL pro váš cluster AKS.

Nastavení, které tento článek popisuje, používá doplněk Kubernetes správce certifikátů , který automatizuje vytváření a správu certifikátů.

Tip

Zvažte službu Application Gateway pro kontejnery pro vaše řešení příchozího přenosu dat Kubernetes. Další informace najdete v tématu Rychlý start: Nasazení služby Application Gateway pro kontejnery ALB Controller.

Nainstalujte doplněk

Pomocí následujících kroků nainstalujte nástroj cert-manager do existujícího clusteru AKS:

  1. Spuštěním následujícího skriptu nainstalujte Helm chart pro cert-manager. Skript provede následující akce:

    • Vytvoří nový cert-manager obor názvů ve vašem AKS clusteru.
    • Vytvoří následující vlastní definice prostředků (CRD): Certificate, Challenge, ClusterIssuer, Issuer, Order
    • Nainstaluje graf cert-manageru (z lokality správce certifikátů).
    #!/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.17.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. Vytvořte ClusterIssuer prostředek. Cert-manager vyžaduje, aby tento prostředek představoval certifikační autoritu Let's Encrypt, která vydává podepsaný certifikát.

    Cert-manager používá prostředek, který není oborem názvů ClusterIssuer , k vydávání certifikátů, které je možné využívat z více oborů názvů. Pojďme Šifrovat pomocí protokolu ACME ověřit, že řídíte konkrétní název domény a vydáváte certifikát. Další podrobnosti o konfiguraci ClusterIssuer vlastností najdete v dokumentaci k nástroji cert-manager.

    ClusterIssuer dává nástroji cert-manager pokyn k vydávání certifikátů pomocí přípravného prostředí Let's Encrypt, které se používá k testování. (Kořenový certifikát není k dispozici v úložištích důvěryhodnosti prohlížeče nebo klienta.)

    Výchozí typ výzvy v následujícím JAZYCE YAML je http01. Další typy úkolů najdete v dokumentaci Let's Encrypt.

    V následujícím jazyce YAML nezapomeňte nahradit <YOUR.EMAIL@ADDRESS> informacemi.

    #!/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. Vytvořte zdroj ingress pro zpřístupnění aplikace pomocí nasazení služby Application Gateway s certifikátem Let's Encrypt.

    Ujistěte se, že vaše nasazení služby Application Gateway má veřejnou konfiguraci front-endové IP adresy s názvem DNS. Použijte výchozí azure.com doménu nebo zřiďte zónu Azure DNS a pak přiřaďte vlastní doménu. Anotace certmanager.k8s.io/cluster-issuer: letsencrypt-staging říká cert-manageru, aby zpracoval označený vstupní prostředek.

    V následujícím JAZYCE YAML nezapomeňte nahradit <PLACEHOLDERS.COM> vlastní doménou nebo doménou služby Application Gateway (například 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
    

    Po několika sekundách můžete ke službě guestbook přistupovat prostřednictvím adresy URL HTTPS služby Application Gateway pomocí automaticky vydaného certifikátu Let's Encrypt pro přípravu.

    Prohlížeč vás může upozornit na neplatnou certifikační autoritu. Důvodem je CN=Fake LE Intermediate X1 vystavení přípravného certifikátu. Toto upozornění znamená, že systém fungoval očekávaným způsobem a jste připraveni na produkční certifikát.

  4. Po úspěšném nastavení přípravného certifikátu můžete přepnout na produkční server ACME:

    1. Nahraďte přípravnou poznámku prostředku příchozího přenosu dat cert-manager.io/cluster-issuer: letsencrypt-prod.
    2. Odstraňte existující fázovací ClusterIssuer prostředek, který jste vytvořili dříve. Vytvořte nový přípravný prostředek tím, že vyměníte server ACME z předchozího ClusterIssuer YAML za https://acme-v02.api.letsencrypt.org/directory.

Než vyprší platnost certifikátu Let's Encrypt, cert-manager automaticky aktualizuje certifikát v úložišti tajných kódů Kubernetes. V tomto okamžiku kontroler příchozího přenosu dat služby Application Gateway použije aktualizovaný tajný kód odkazovaný na prostředky příchozího přenosu dat, které používá ke konfiguraci služby Application Gateway.