You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cert-manager更新多域名Ingress时重复签发过多证书问题求助

解决方案:独立证书隔离域名签发流程

问题根源分析

你当前的Ingress配置将所有域名放在同一个tls条目中,对应同一个Secret。cert-manager会为该条目生成一张包含所有域名的SAN(Subject Alternative Name)证书:

  • 当任意一个域名变更时,cert-manager会认为整个证书需要更新,触发全域名的重新签发,直接导致Let's Encrypt的签发限额被快速耗尽。
  • 一旦某个域名的验证或签发失败,整个SAN证书的生成都会失败,牵连其他正常域名。

最佳解决方案

方案1:拆分Ingress,每个域名对应独立Ingress资源

为每个可变更的域名创建单独的Ingress,每个Ingress只包含一个域名的tls配置和路由规则。这种方式完全隔离每个域名的证书生命周期,最适合多租户场景。

示例配置(以客户域名为例):

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: server-ingress-customer-test1
  namespace: {hidden}
  annotations:
    cert-manager.io/issuer: letsencrypt-prod
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - test1.customer-domain.fr
      secretName: server-tls-customer-test1
  rules:
    - host: test1.customer-domain.fr
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              serviceName: server-v3-24-5
              servicePort: 8080

同理,为test1.our-company.com和test2.our-company.com分别创建独立的Ingress,只需修改name、hosts和secretName字段即可。

方案2:同一Ingress内拆分多个tls条目

如果不想维护过多Ingress资源,可以在同一个Ingress中为每个域名创建独立的tls条目,每个条目对应唯一的Secret。cert-manager会为每个tls条目生成独立的证书,互不影响。

修改后的Ingress配置:

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
      secretName: server-tls-customer-test1
    - hosts:
        - test1.our-company.com
      secretName: server-tls-our-test1
    - hosts:
        - test2.our-company.com
      secretName: server-tls-our-test2
  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

方案效果验证

两种方案都能解决你的核心问题:

  1. 避免批量重签:只有被修改的域名对应的证书会触发重新签发,其他域名的证书保持不变,不会触碰Let's Encrypt的签发限额。
  2. 隔离失败影响:单个域名的签发失败只会影响自身的证书,其他域名的证书生成流程不受干扰。

关键注意事项

  • 确保每个tls条目的secretName唯一,避免证书资源冲突。
  • 你的cert-manager v1.9.1版本完全支持上述两种配置,无需额外升级。
  • 多租户场景下,方案1的Ingress隔离方式更便于权限管控(比如给租户仅开放其域名对应的Ingress操作权限)。

内容的提问来源于stack exchange,提问作者Corentin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:40:36