你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 LetsEncrypt.org 的证书用在 AKS 群集的应用程序网关上
此部分配置 AKS,以便利用 LetsEncrypt.org 并自动获取域的 TLS/SSL 证书。 该证书安装在应用程序网关上,后者会针对 AKS 群集执行 SSL/TLS 终止操作。 此处介绍的设置使用 cert-manager Kubernetes 加载项,该加载项可自动创建并管理证书。
提示
另请参阅什么是适用于容器的应用程序网关。
请按以下步骤在现有的 AKS 群集上安装 cert-manager。
Helm Chart
请运行以下脚本来安装
cert-manager
Helm Chart。 此脚本可执行以下操作:- 在 AKS 上创建新的
cert-manager
命名空间 - 创建以下 CRD:证书、质询、ClusterIssuer、颁发者、顺序
- 安装 cert-manager Chart(来自 docs.cert-manager.io)
#!/bin/bash # Install the CustomResourceDefinition resources separately kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.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.10.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.
- 在 AKS 上创建新的
ClusterIssuer 资源
请创建
ClusterIssuer
资源。 这是cert-manager
所需的,用于表示Lets Encrypt
证书颁发机构(可从其中获取签名的证书)。Cert-manager 使用非命名空间
ClusterIssuer
资源颁发可从多个命名空间使用的证书。Let’s Encrypt
使用 ACME 协议来验证你是否控制给定的域名,并使用该协议来颁发证书。 此处提供有关如何配置ClusterIssuer
属性的更多详细信息。ClusterIssuer
指示cert-manager
使用Lets Encrypt
过渡环境来颁发证书,该过渡环境用于测试(不存在于浏览器/客户端信任存储中的根证书)。在以下 YAML 中,默认的质询类型为
http01
。 其他质询记录在 letsencrypt.org - 验证方式 中重要
在以下 YAML 中更新
<YOUR.EMAIL@ADDRESS>
。#!/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: ingressclassName: azure/application-gateway EOF
部署应用
请创建一项入口资源,以便使用应用程序网关和 Lets Encrypt 证书来公开
guestbook
应用程序。确保应用程序网关有一个带 DNS 名称的公共前端 IP 配置(可以使用默认的
azure.com
域,也可以先预配Azure DNS Zone
服务,然后分配你自己的自定义域)。 注释certmanager.k8s.io/cluster-issuer: letsencrypt-staging
,它告知 cert-manager 处理标记的入口资源。重要
将下面 YAML 中的
<PLACEHOLDERS.COM>
更新为你自己的域(或应用程序网关域,例如“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
几秒钟后,可以使用自动颁发的暂存
Lets Encrypt
证书通过应用程序网关 HTTPS URL 访问guestbook
服务。 浏览器可能会警告你:证书颁发机构无效。 暂存证书由CN=Fake LE Intermediate X1
颁发。 此警告表示系统的运行符合预期,你可以获取生产证书了。生产证书
成功设置暂存证书以后,可以切换到生产 ACME 服务器:
- 将入口资源上的暂存注释替换为:
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
- 删除你在上一步中创建的现有暂存
ClusterIssuer
,并通过将上面的 ClusterIssuer YAML 中的 ACME 服务器替换为https://acme-v02.api.letsencrypt.org/directory
来创建一个新服务器
- 将入口资源上的暂存注释替换为:
证书过期和续订
在
Lets Encrypt
证书过期之前,cert-manager
会自动更新 Kubernetes 机密存储中的证书。 那时候,应用程序网关入口控制器会应用在入口资源中引用的已更新机密(用于配置应用程序网关)。