软硬件环境
- 操作系统centos 7.4
- 拥有独立域名管理权和cloudfare账号,在Cloudflare的DNS中为您的域设置的DNS记录
安装certbot
- 默认情况下,CentOS的软件包管理器不提供certbot软件包。 您需要启用EPEL存储库以安装Certbot及其插件。
要添加CentOS 7 EPEL存储库,请运行以下命令:
sudo yum install -y epel-release
- 安装完成后,您可以安装certbot :
sudo yum install -y certbot
- 为Certbot安装CloudFlare插件:
sudo yum install -y python2-cloudflare python2-certbot-dns-cloudflare
获取CloudFlare API
为了使Certbot能够自动续订通配符证书,您需要为其提供CloudFlare登录和API密钥。
登录您的Cloudflare帐户并导航到“ 个人资料”页面 。
单击Global API Key行中的View按钮。
配置Certbot
- 运行不带任何参数的certbot命令来创建初始配置文件:
sudo certbot
- 在/etc/letsencrypt目录中创建一个配置文件,其中包含您的CloudFlare电子邮件和API密钥:
sudo vi /etc/letsencrypt/cloudflareapi.cfg
- 将以下内容添加到/etc/letsencrypt/cloudflareapi.cfg,使用Cloudflare登录和API密钥替换占位符:
dns_cloudflare_email = your_cloudflare_login
dns_cloudflare_api_key = your_cloudflare_api_key
- 文件授权
sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg
证书生成
可以指定多个域名,泛域名通过*代替,由于openshift路由的子域名我们配置成了apps,这里把子域名也加上,证书输出目录为 /etc/letsencrypt/live/your_domain
sudo certbot certonly --cert-name youdomain \
--dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \
--server https://acme-v02.api.letsencrypt.org/directory \
-d youdomain.com \
-d *.youdomain.com \
-d *.apps.youdomain.com
重新配置openshift router证书
- 备份原证书
oc get secret router-certs -n default -o yaml > old-router-certs-secret.yaml
- 根据cert.pem、chain.pem、privkey.pem生成router证书文件
cat /etc/letsencrypt/live/youdomain/cert.pem \
/etc/letsencrypt/live/youdomain/chain.pem \
/etc/letsencrypt/live/youdomain/privkey.pem \
> /etc/letsencrypt/live/youdomain/router.pem
- 替换原有证书
oc create secret tls router-certs --cert=/etc/letsencrypt/live/youdomain/router.pem \
--key=/etc/letsencrypt/live/youdomain/privkey.pem -o json --dry-run | \
oc replace -f -
- 移除router service annotate
oc annotate service router \
service.alpha.openshift.io/serving-cert-secret-name- \
service.alpha.openshift.io/serving-cert-signed-by-
- 重新添加router service annotate
oc annotate service router \
service.alpha.openshift.io/serving-cert-secret-name=router-certs
- 重新部署路由器
oc rollout latest dc/router
重新配置openshift web-console证书
如果是高可用则每台master都需要执行以下操作
- 拷贝证书到master目录
cp /etc/letsencrypt/live/yourdomain/fullchain.pem /etc/origin/master/named_certificates/yourdomain-fullchain.crt
cp /etc/letsencrypt/live/yourdomain/privkey.pem /etc/origin/master/named_certificates/yourdomain-privkey.key
- 修改/etc/origin/master/master-config.yaml文件(namedCertificates部分)
servingInfo:
bindAddress: 0.0.0.0:443
bindNetwork: tcp4
certFile: master.server.crt
clientCA: ca.crt
keyFile: master.server.key
maxRequestsInFlight: 500
requestTimeoutSeconds: 3600
namedCertificates:
- certFile: /etc/origin/master/named_certificates/yourdomain-fullchain.crt
keyFile: /etc/origin/master/named_certificates/yourdomain-privkey.key
names:
- "yourdomain"
- 重启master api
master-restart api api
- 检查master api日志 查看是否正常启动
master-logs api api
遗留问题
- Let’s Encrypt 生成的证书只有90天失效,编写自动生成证书并替换证书的脚本
- registry使用了内部域名 无法使用Let’s Encrypt的证书
参考
证书生成:https://www.howtoing.com/how-to-retrieve-let-s-encrypt-ssl-wildcard-certificates-using-cloudflare-validation-on-centos-7
官方文档:https://docs.openshift.com/container-platform/3.10/install_config/redeploying_certificates.html