kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)
说明使用官方阿里云dns插件:https://github.com/pragkent/alidns-webhook也可以使用其他开发者使用的:https://gitee.com/StephenEvenson/cert-manager-alidns-webhook?_from=gitee_searchdns-01方式支持泛域名解析https证书查看cert-manager支持的DNS厂商:https
·
说明(腾讯云域名请看另一篇文章)
- 使用官方阿里云dns插件:https://github.com/pragkent/alidns-webhook(安装比较慢请耐心等待)
- 也可以使用其他开发者使用的:https://gitee.com/StephenEvenson/cert-manager-alidns-webhook?_from=gitee_search(安装比较慢请耐心等待)
- dns-01方式支持泛域名解析https证书
- 查看cert-manager支持的DNS厂商:https://cert-manager.io/docs/configuration/acme/dns01/
- 需要先在云平台提前添加配置解析映射该域名,如果添加解析含有通配符:*.xxx.com,则只能生成通配符https证书:**.xxx.com,不能生成:a.xxx.com,如果需要a.xxx.com,则需要新添加a.xxx.com解析配置
获取阿里云授权信息
- 登录阿里云点击头像accessKey管理
- 复制access-key和secret-key后续用的到
安装alidns-webhook
- 尽量安装在和cert-manager一个namespace
- 基本什么都不需要改,下一步直接安装(比较慢,耐心等待,可能是镜像源问题)
创建配置文件(Secret)
- 在namespace创建配置文件将阿里云得access-key和secret-key填入
创建集群签发机构(clusterIssuer.yaml)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
# 改为自己得邮箱
email: certmaster@example.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-staging-account-key
solvers:
- dns01:
webhook:
#和上面安装时保持一致
groupName: acme.yourcompany.com
solverName: alidns
config:
# 这个参数标识服务器所在地,经过测试不填写,或者随便填写没有影响
region: "beijing"
accessKeySecretRef:
# 引用刚才创建得配置文件,注意文件名称和key名称是否对应
name: alidns-secret
key: access-key
secretKeySecretRef:
name: alidns-secret
key: secret-key
# 开始生成
kubectl apply -f clusterIssuer.yaml
#查看状态(需要等一会)
kubectl get ClusterIssuer --all-namespaces
#查看错误信息
kubectl describe Certificate-n test-cert
#深查看深层错误原因
kubectl describe CertificateRequest -n test-cert
#深查看更深层错误原因
kubectl describe challenges -n test-cert
生成证书(certificate.yaml)
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-tls
# 指定证书生成到哪个工作空间,不指定也可以
namespace: docs
spec:
#生成后证书的配置文件名称
secretName: example-com-tls
dnsNames:
- example.com
- "*.example.com"
issuerRef:
name: letsencrypt-staging
kind: ClusterIssuer
# 开始生成
kubectl apply -f certificate.yaml
#查看状态(需要等一会)
kubectl get certificate --all-namespaces
可能错误
因为会在其他namespace下生成https证书配置文件,cert-manager会在另一个namespace下生成config文件,所以涉及到k8s rbac权限授权问题
参考:https://www.kubernetes.org.cn/service-account
如果出现类似异常:
User “system:serviceaccount:xxx:xxx“ cannot create resource “xxx“ in API group at .... “
运行绑定角色后重新安装
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=$(可以在yaml中查看,一般是:cert-manager)
如果是kubectl apply -f 方式安装,不中卸载直接重新运行kubectl apply -f 即可
使用证书
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)