bga*_*ial 6 ssl kong kubernetes-ingress cert-manager
我正在使用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
Run Code Online (Sandbox Code Playgroud)
我正在使用的入口资源是这个。
你可以在这里看到,根据kubernetes.io/ingress.class: "kong"那里包含的注释,我将它指向之前创建的 ClusterIssuer,并且我将它指向 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.
Run Code Online (Sandbox Code Playgroud)
因此,当我创建上面的 Ingress 资源时,secretName会创建上面在我的 Ingress 中引用的资源以及具有相同名称的证书资源......即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属性
spec:
secretName: example-tls
duration: 24h
renewBefore: 12h
Run Code Online (Sandbox Code Playgroud)
如果我的 LetsEncrypt 颁发的证书的默认期限为 90 天,我该如何指定这些spec.duration 和spec.renewBefore属性?
我想解决这个问题,因为我的主要问题是我没有创建证书,它是在执行 Ingress 资源(上面引用)时创建的。
我如何用我正在做的这种方法来解决这里的续订过程?
更新
我是否需要创建一个特定的kind:Certificate资源,引用我从 LetsEncrypt 获得的秘密?
我的意思是,像这样的事情?
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
Run Code Online (Sandbox Code Playgroud)
我在这里有疑问,因为目前我没有得到证书更新操作
由于您已经使用了letsencrypt-prod颁发者,并且没有执行任何特殊/非标准操作,因此证书续订过程将完全自动为您完成。
默认情况下,letscrypt 证书的有效期为 90 天,并每 30 天自动更新一次。如果您对使用购买的证书没有严格要求,或使用其他特定的证书颁发机构,那么这是一个不错的选择。
如果您仍然有疑问,那么您可以执行以下操作来亲自查看。首先解码当前证书秘密数据并使用命令检查证书内容openssl。您将能够看到证书的到期日期,并记下该日期。现在,如果您从到期日期中减去 59 天,您将大致得到证书管理器尝试续订证书的日期。为了安全起见,我多加了一天时间,我们还不算太早。然后在那一天再次重复这个过程;解码证书秘密,使用openssl命令检查证书,并检查证书到期日期。您会注意到证书的到期日期与以前不同,因此它会按照我们的预期自动续订。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
5482 次 |
| 最近记录: |