Loading... # 安装cert-manager 安装cert-manager ``` kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml ``` 卸载 cert-manager ``` kubectl delete -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml ``` # DNS-01 校验方式签发证书 1. 登录 cloudflare,点到 My Profile > API Tokens > Create Token 来创建 Token:  复制 Token 并妥善保管 2. 将 Token 保存到 Secret 中: ```yaml apiVersion: v1 kind: Secret metadata: name: cloudflare-api-token-secret namespace: cert-manager type: Opaque stringData: api-token: <API Token> # 粘贴 Token 到这里,不需要 base64 加密。 ``` 3. 创建 ClusterIssuer ```yaml apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-dns01 spec: acme: privateKeySecretRef: name: letsencrypt-dns01 email: youremail@email.com server: https://acme-v02.api.letsencrypt.org/directory solvers: - dns01: cloudflare: email: youremail@email.com apiTokenSecretRef: name: cloudflare-api-token-secret key: api-token ``` 4. 创建 Certificate ```yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: mydomain-com namespace: default spec: dnsNames: - mydomain.com - "*.mydomain.com" issuerRef: kind: ClusterIssuer name: letsencrypt-dns01 # 引用 ClusterIssuer,指示采用 dns01 方式进行校验 secretName: mydomain-com-tls # 最终签发出来的证书会保存在这个 Secret 里面 ``` # 获取和使用证书 创建好 Certificate 后,等一小会儿,我们可以 kubectl 查看是否签发成功 ``` kubectl get certificate NAME READY SECRET AGE mydomain-com True test-mydomain-com-tls 1m ``` 如果 `READY` 为 `False` 表示失败,可以通过 describe 查看 event 来排查失败原因: ``` kubectl describe certificate mydomain-com ``` 如果为 `True` 表示签发成功,证书就保存在我们所指定的 Secret 中 (上面的例子是 `default/mydomain-com-tls`),可以通过 kubectl 查看: ``` kubectl get secret mydomain-com-tls -n default ... data: tls.crt: <cert> tls.key: <private key> ``` 其中 `tls.crt` 就是证书,`tls.key` 是密钥。 你可以将它们挂载到你需要证书的应用中,或者使用自建的 Ingress,可以直接在 Ingress 中引用 secret,示例: ``` apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: # 添加指示要使用的issuer的注释。 cert-manager.io/cluster-issuer: letsencrypt-dns01 name: myIngress namespace: myIngress spec: rules: - host: mydomain-com http: paths: - pathType: Prefix path: / backend: service: name: myservice port: number: 80 tls: - hosts: - mydomain-com secretName: mydomain-com-tls ``` 最后修改:2022 年 04 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏