我们将kubernetes与ingress、cert-manager(v1.9.1(和letsencrypt颁发者一起使用。我们的用例如下:我们有一个包含3个服务的多租户解决方案,允许人们更改域名(每个服务1个(。每次有人更改域名时,都会触发与服务相关的入口的更新。此更新触发证书管理器生成新订单。
我们遇到2个问题:
- 当有人更改一个域名(使其在入口的spec.tls[]和spec.rules[]部分中被替换(时,创建的顺序似乎会从入口重新生成所有的letsencrypt证书,而不仅仅是更改的证书(这会导致在一些尝试后出现letsencryt问题"已经颁发了太多证书"(
- 当订单中的一个证书出现错误(由于之前的问题,"已经颁发了太多证书"(时,订单中的其他证书(通常没有任何问题(似乎也不会生成
在我们的用例中避免这些问题的最佳策略是什么?(也许我们必须按域名创建一个入口?或者有没有一种方法可以按证书创建一个订单,而不会在更新入口时触发现有证书的重新生成?(
---编辑---
以下是入口(带有{隐藏}字段并为隐私进行重命名(:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: server-ingress
namespace: {hidden}
annotations:
cert-manager.io/issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- test1.customer-domain.fr
- test1.our-company.com
- test2.our-company.com
secretName: our-company-server-tls
rules:
- host: test1.customer-domain.fr
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: server-v3-24-5
servicePort: 8080
- host: test1.our-company.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: server-v3-24-5
servicePort: 8080
- host: test2.our-company.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: server-v3-24-5
servicePort: 8080
status:
loadBalancer:
ingress:
- ip: {hidden}
谢谢你,
创建的订单似乎从入口重新生成了所有letsencrypt证书,而不仅仅是更改了的证书
根据讨论,这是因为您对所有入口使用相同的机密名称,您需要对入口中TLS中的每个主机使用不同的机密名称。这样,它将不会重新创建所有证书顺序。
所以这应该有效,
tls:
- secretName: test1.customer-domain.fr
hosts:
- test1.customer-domain.fr
- secretName: test1.our-company.com
hosts:
- test1.our-company.com
rules:
- host: test1.customer-domain.fr
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: server-v3-24-5
servicePort: 8080
- host: test1.our-company.com
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: server-v3-24-5
servicePort: 8080