- issuer privateKeySecretRef 自动生成的private key,填写一个名字即可
- 使用kubectl describe 查看对应的资源,可以看到创建成功与否,以及失败的信息issuer cert order 等一层层的往下看,都有详细的出错信息;
- ACME Issuer type represents a single Account registered with the ACME server.
1 register -> 生成的fulldomain
2. 添加dns记录 _acme-challenge.targetdomain.com cname fulldomain
3. regiseter的结果创建acmedns.json文件,格式如下
{
"taomiao.store": {
"username": "ec953ce2-a147-4980-816a-9fd820b086da",
"password": "HqJxoWxm7bVsA12prMOJFlakouNGNs39v0AZIlP3",
"fulldomain": "e214d520-19c9-4d32-858d-99818ea41654.auth.acme-dns.io",
"subdomain": "e214d520-19c9-4d32-858d-99818ea41654",
"allowfrom": []
}
}
kubectl create secret generic acme-dns --from-file acmedns.json
不同的域名都可以配置这一个regiseter账号,配置对应的dns记录,同时维护好acmedns.json文件即可;
- 根据上面的信息创建issue
apiVersion: certmanager.k8s.io/v1alpha1
kind: Issuer
metadata:
name: letsencrypt-staging
namespace: cert-manager
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- dns01:
acmedns:
host: https://auth.acme-dns.io
accountSecretRef:
name: acme-dns
key: acmedns.json
创建完成之后,使用kubectl describe 可以查看创建成功与否,如果失败,会茶看到详细的失败信息。正式环境可以使用如下的配置
apiVersion: certmanager.k8s.io/v1alpha1
kind: Issuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- dns01:
acmedns:
host: https://auth.acme-dns.io
accountSecretRef:
name: acme-dns
key: acmedns.json
- 更具上面的信息创建 Certificate
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: taomiao-store
namespace: cert-manager
spec:
secretName: taomiao-store-tls
renewBefore: 360h # 15d
commonName: taomiao.store
dnsNames:
- taomiao.store
issuerRef:
name: letsencrypt-staging
kind: Issuer
创建好这个文件之后,cert manager立马开始生成证书的流程
可以通过kubectl describe 命令查看issuer cert order challenge
- 创建万 Cert之后,如果没有出错,就会生成一个名为 taomiao-store-tls(Certificate.spec.secretName) 的secret;
可以看到生成的证书的key 和 证书本身;
生成fullchain.crt证书,有自己域名的证书和let’s的ca证书,可以直接用;微信里面也没有问题。
cert manager 实现自动花的原理
- dns01
使用第三方的acme-dns + acme.sh这种方式
可以看到,只需要在目标域名配置一个cname即可实现安全的自动化;
参考
Setting up Issuers » Setting up ACME Issuers » Configuring DNS01 Challenge Providers » ACME-DNS利用cert-manager让Ingress启用免费的HTTPS证书cert-manager’s documentation