作者:scwang18,主要负责技术架构,在容器云方向颇有研究。
前言
KubeSphere 集群默认安装的证书是自签发证书,浏览器访问访问会发出安全提醒。本文记录了利用 let's encrytp
泛域名证书实现 Kubernetes 集群外部服务自动证书配置和证书到期自动更新,支持 HTTPS 访问。我们还部署了证书自动分发组件,实现证书文件自动分发到其他 namespace 。
架构
在 KubeSphere 集群中使用 HTTPS 协议,需要一个证书管理器、一个证书自动签发服务
cert-manager 是一个云原生证书管理开源项目,用于在 KubeSphere 集群中提供 HTTPS 证书并自动续期,支持 Let’s Encrypt
, HashiCorp Vault
这些免费证书的签发。在 KubeSphere 集群中,我们可以通过 Kubernetes Ingress 和 Let’s Encrypt
实现外部服务的自动化 HTTPS。
Issuers/ClusterIssuers:定义使用什么证书颁发机构 (CA) 来去颁发证书,Issuers 和 ClusterIssuers 区别是: issuers 是一个名称空间级别的资源,只能用来签发自己所在 namespace 下的证书,ClusterIssuer 是个集群级别的资源 可以签发任意 namespace 下的证书
Certificate:定义所需的 X.509 证书,该证书将更新并保持最新。Certificate 是一个命名空间资源,当 Certificate 被创建时,它会去创建相应的 CertificateRequest 资源来去申请证书。
安装证书管理器
安装证书管理器比较简单,直接执行以下脚本就可以了。
$ kubectl create ns cert-manager
$ helm uninstall cert-manager -n cert-manager
$ helm install cert-manager jetstack/cert-manager \
-n cert-manager \
--version v1.8.0 \
--set installCRDs=true \
--set prometheus.enabled=false \
--set 'extraArgs={--dns01-recursive-nameservers-only,--dns01-recursive-nameservers=119.29.29.29:53\,8.8.8.8:53}'
选择证书颁发者
cert-manager 支持以下几种证书颁发者:
- SelfSigned
- CA
- Vault
- Venafi
- External
- ACME