手动管理证书
生成证书
参考
[[Others/OpenSSL生成自签名证书|OpenSSL生成自签名证书]]
导入证书
1 | kubectl create secrets tls example-io-tls --key example.io.key --cert example.io.crt |
手动管理证书可忽略下边的安装过程,跳转到证书配置
使用cert-manager管理证书
部署cert-manager
方式一: 使用Helm部署(推荐)
1 | # 添加镜像源 |
方式二: 使用kubectl部署
1 | # Kubernetes 1.16+ |
创建ClusterIssuer/Issuer
公网域名证书
Issuer 与 ClusterIssuer 的区别是 ClusterIssuer 可跨命名空间使用,而 Issuer 需在每个命名空间下配置后才可使用。这里我们使用 ClusterIssuer,其类型选择 Let‘s Encrypt。
正式环境速率限制(每个注册域名可签发的证书数量(每周 50 份)),使用测试环境测试一切正常后再切换正式环境。
letsencrypt-issuer-staging.yaml
1 | apiVersion: cert-manager.io/v1 |
letsencrypt-issuer-prod
1 | apiVersion: cert-manager.io/v1 |
说明:
metadata.name 创建的签发机构的名称,创建证书的时候会引用
spec.acme.email 邮箱,证书快过期的时候会有邮件提醒,不过cert-manager会利用acme协议自动给我们重新颁发证书来续期
spec.acme.server acme 协议的服务端,由官方给出
spec.acme.privateKeySecretRef 指示此签发机构的私钥将要存储到哪个Secret对象中
spec.acme.solvers.http01 指示签发机构使用HTTP-01的方式进行acme协议 (还可以用DNS方式,acme协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)
自签名证书
selfsigned-issuer.yaml
1 | apiVersion: cert-manager.io/v1 |
spec.subjects.organizations:
创建域名证书
公网域名证书
example-io-tls.yaml
1 | apiVersion: cert-manager.io/v1 |
生产环境使用建议
实际生产环境中使用cert-manager可以考虑以下建议:
- 将CA的
Secret
及Issuer
放在某个独立的命名空间中,与其它业务的命名空间隔离起来。 - 如果是CA类型的
Issuer
,要记得定期更新根CA证书。 - 如果服务可被公网访问,同时又不想花钱买域名证书,可以采用
Letsencrypt
类型的Issuer
,目前支持两种方式验证域名的所有权,基于DNS记录的验证方案和基于文件的HTTP验证方案。 cert-manager
还提供ingress-shim
方式,自动为Ingress
资源生成证书,只需要在Ingress
资源上打上一些标签即可,详细可参考这里。
spec.secretName 指示证书最终存到哪个 Secret 中
spec.issuerRef.kind 值为 ClusterIssuer 说明签发机构不在本 namespace 下,而是在全局
spec.issuerRef.name 我们创建的签发机构的名称 (ClusterIssuer.metadata.name)
spec.duration 证书过期时间
spec.renewBefore 在过期前自动更新
spec.dnsNames 指示该证书的可以用于哪些域名
spec.acme.config.http01.domains 指示该证书的可以用于哪些域名
Traefik配置证书
终端安装证书
获取CA证书,root-ca.crt,k3s导出证书 参考K3s导出证书
k8s中使用cert-manager玩转证书-腾讯云开发者社区-腾讯云 (tencent.com)
k8s 使用cert-manager证书管理自签-CSDN博客
k8s部署cert-manager实现证书自动化_cert-manager.yaml-CSDN博客
Cert-Manager 实现 K8s 服务域名证书自动化续签 - 知乎 (zhihu.com)
手把手教你使用 cert-manager 签发免费证书 - 腾讯云原生 - 博客园 (cnblogs.com)
在 k3s 内使用 cert-manager 管理证书 (bowser1704.github.io)
用 k3s 轻松管理 SSL 证书 | Linux 中国 - 知乎
k8s中级篇-cert-manager+Let‘s Encrypt自动证书签发_cert-manager let’s encrypt-CSDN博客
k3s 使用 Letsencrypt 和 Traefik 完成 https 入口部署-腾讯云开发者社区-腾讯云 (tencent.com)
容器服务 使用 cert-manager 签发免费证书-实践教程-文档中心-腾讯云 (tencent.com)
使用cert-manager为Traefik IngressRoute自动签发Let’s Encrypt证书 – 桃又的技术笔记 (taoyouh.cn)
内网证书
cert-manager管理内网k8s开发环境证书 - hueidou163 - 博客园 (cnblogs.com)
SelfSigned - cert-manager (k8s-docs.github.io)
k8s 使用cert-manager证书管理自签-CSDN博客
Kubernetes (K8S) 中Traefik自动申请证书-腾讯云开发者社区-腾讯云 (tencent.com)
k8s ingress配置自签名证书,并解决Kubernetes Ingress Controller Fake Certificate-CSDN博客