Cert-Manager证书续订过程-如何执行?

时间:2019-09-12 08:56:18

标签: ssl kubernetes-ingress kong cert-manager

我正在使用从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:Certificatespec.duration属性的证书资源(spec.renewBefore上的< / p>

spec:
  secretName: example-tls
  duration: 24h
  renewBefore: 12h

如果我的LetsEncrypt颁发的证书的默认有效期为90天,该如何指定这些spec.durationspec.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

我在这里有疑问,因为目前我没有采取证书续订的操作

1 个答案:

答案 0 :(得分:2)

由于您使用过letsencrypt-prod颁发者,并且未执行任何特殊/非标准的操作,因此证书续订过程将完全为您自动完成。

默认情况下,letsencrypt证书的有效期为90天,并且每30天自动更新一次。如果您对使用购买的证书或使用某些其他特定的证书颁发机构没有严格的要求,那么这是一个很好的选择。

如果您仍然有疑问,可以执行以下操作以自己了解。首先解码当前的证书机密数据,并使用openssl命令检查证书内容。您将能够看到证书的到期日期,并记录下来。现在,如果您从该失效日期中减去59天,则应该大致为您提供cert-manager尝试更新证书的日期。为了安全起见,我增加了一天的时间,我们还不算早。然后在该日期再次重复此过程;解密证书机密,使用openssl命令检查证书,并检查证书的到期日期。您会注意到该证书的到期日期与以前不同,因此它会按照我们的预期自动更新。

希望这会有所帮助。