我正在使用从helm chart安装的cert-manager-v0.10.0
我正在使用 kong 之类的入口控制器来管理入口操作。
因此,我创建了一个ClusterIssuer
资源,以便可以通过kong-ingress控制器从Ingress资源中获取它。
ClusterIssuer
是这个:
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: username@mydomain.org
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: kong
我正在使用的入口资源是这个。
您可以在这里看到,我将其指向先前创建的ClusterIssuer并
根据其中包含的kubernetes.io/ingress.class: "kong"
注释,我还将它指向kong作为入口控制者:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
# add an annotation indicating the issuer to use.
certmanager.k8s.io/cluster-issuer: letsencrypt-prod # letsencrypt-staging
kubernetes.io/ingress.class: "kong"
plugins.konghq.com: swaggerapi-customer-production-basic-auth, swaggerapi-customer-production-acl
name: production-customer-ingress-app
# namespace: default
spec:
rules:
- host: appprod.mydomain.org
http:
paths:
- backend:
serviceName: customer-production-app
servicePort: 80
path: /comcustomerpr
tls: # < placing a host in the TLS config will indicate a cert should be created
- hosts:
- appprod.mydomain.org
secretName: letsencrypt-prod # < cert-manager will store the created certificate in this secret.
因此,当我在上面创建Ingress资源时,会创建上面在我的Ingress中引用的secretName
,并且还会创建一个具有相同名称的证书资源...即letsencrypt-prod
。
它将是接收LetsEncrypt验证成功过程的证书资源...
我进行了TLS加密,这里一切正常。
但是现在,我想知道续订过程将如何。因为我很确定目前此续订证书过程不会自动发生...
我在这里https://docs.cert-manager.io/en/latest/reference/certificates.html?highlight=renewal#certificate-duration-and-renewal-window上读过一些东西,该文档说这是必须附加到以这种方式创建的kind:Certificate
和spec.duration
属性的证书资源(spec.renewBefore
上的< / p>
spec:
secretName: example-tls
duration: 24h
renewBefore: 12h
如果我的LetsEncrypt颁发的证书的默认有效期为90天,该如何指定这些spec.duration
和spec.renewBefore
属性?
我想解决这个问题,因为我的主要问题是我不是在创建证书,而是在执行Ingress资源(上面引用的)时创建的。
我该如何使用这种方法来解决续订过程?
更新
我是否需要引用我从LetsEncrypt获得的秘密来创建特定的kind:Certificate
资源?
我是说,像这样?
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: letsencrypt-prod
spec:
secretName: letsencrypt-prod
dnsNames:
- mydomain.com
acme:
config:
- http01:
ingressClass: kong
domains:
- mydomain.com
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
我在这里有疑问,因为目前我没有采取证书续订的操作
答案 0 :(得分:2)
由于您使用过letsencrypt-prod
颁发者,并且未执行任何特殊/非标准的操作,因此证书续订过程将完全为您自动完成。
默认情况下,letsencrypt证书的有效期为90天,并且每30天自动更新一次。如果您对使用购买的证书或使用某些其他特定的证书颁发机构没有严格的要求,那么这是一个很好的选择。
如果您仍然有疑问,可以执行以下操作以自己了解。首先解码当前的证书机密数据,并使用openssl
命令检查证书内容。您将能够看到证书的到期日期,并记录下来。现在,如果您从该失效日期中减去59天,则应该大致为您提供cert-manager尝试更新证书的日期。为了安全起见,我增加了一天的时间,我们还不算早。然后在该日期再次重复此过程;解密证书机密,使用openssl
命令检查证书,并检查证书的到期日期。您会注意到该证书的到期日期与以前不同,因此它会按照我们的预期自动更新。
希望这会有所帮助。