配置案例
HTTP01 – cert-manager Documentation
通过 HTTP-01 质询,也能够完成证书申请,其优点是部署简单。
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt spec: acme: preferredChain: "" privateKeySecretRef: name: letsencrypt-issuer-account-key server: https://acme-v02.api.letsencrypt.org/directory solvers: - http01: ingress: ingressClassName: nginx
注意事项
1)当域名所有权时,Cert Manager 会创建 Pod 来访问域名,流量是从 Pod ⇔ Ingress ⇔ Pod,所以需要确认网络联通。
场景 | 多个 Ingress 控制器
在我们的场景中,集群存在多个 Nginx Ingress Controller 实例,其服务与不同的业务场景。
在申请证书时,我们需要确保 Cert Manager 使用正确的 Ingress Class 来完成质询。
原因在于,如果 Ingress 使用错误的 Ingress Class <B> 参数,则相关的 nginx 配置将写入错误的 Ingress Controller <B> 之上。但是域名是解析 Ingress Controller <A> 的,所以无法正常访问,进而无法完成 HTTP 质询。
我们使用多个不同的 Cluster Issuer 来处理该问题:
--- ... spec: acme: solvers: - http01: ingress: ingressClassName: nginx-01 ingressTemplate: metadata: annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" ... --- ... spec: acme: solvers: - http01: ingress: ingressClassName: nginx-02 ingressTemplate: metadata: annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" ...
参数 ingressClassName 用于指定创建 Ingress 时使用的 Ingress Class 名称。
注意,参数 solvers 是个数组,其中能够配置多个 solver 实例。其表示可通过任意 solver 来完成质询。