目录
公司内部有个Kubernetes集群,镜像服务使用私有化部署的Harbor,突然一天发现域名没有续费… 接下来面临的问题就是TLS证书过期无法通过权威CA证书机构签发新证书,但如果更换域名CI/CD、K8s workload 都需要修改,修改量比较大。有没有简单处理方案呢,当然有,改由本地DNS解析域名,自己签发证书。下面的内容就是操作步骤,相对还算是简单的。
一、 OpenSSL 生成证书
- 生成根证书
mkdir -p ~/ssl/example/{certs,newcerts,crl,private} cd ~/ssl/example Touch index.txt echo "01" > serial
cp /etc/ssl/openssl.cnf ~/ssl/example/openssl.cnf
openssl req -new -x509 -newkey rsa:4096 -keyout ca.key -out ca.crt -config openssl.cnf -days 3650
|
- 签发客户端证书
[req] req_extensions = v3_req [ v3_req ]
basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names
[alt_names] DNS.1 = registry.example.com DNS.2 = reg.example.com
|
cd example
openssl genrsa -out registry.example.com.key 4096
openssl req -new -key registry.example.com.key -out registry.example.com.csr -config openssl.cnf -utf8
openssl ca -in registry.example.com.csr -out registry.example.com.crt -cert cacert.crt -keyfile ca.key -config openssl.cnf -days 365 -utf8
|
二、 部署证书
- 替换Harbor证书
mv ~/ssl/example/registry.example.com.key /opt/harbor/common/config/nginx/cert/ mv ~/ssl/example/registry.example.com.cert /opt/harbor/common/config/nginx/cert/
docker-compose restart registry
|
三、 客户端安装CA证书
Kubernetes Node信任证书
可以直接将ca.crt复制到所有节点的 /etc/docker/certs.d/registry.example.com/ 目录下
也可使用Kubernetes的DaemonSet 自动部署到所有节点上 参考脚本 Daemonset
为了能直接访问registry.example.com ca.crt 添加到本地系统信任