配置案例
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 来完成质询。