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

从Ingress切换到IngressRoute:CertManager与Let's Encrypt配置问题

解决Traefik IngressRoute结合cert-manager自动签发Let's Encrypt证书的问题

核心原因

cert-manager仅对Kubernetes标准Ingress资源提供原生支持,会监听其注解触发证书签发;而Traefik的IngressRoute是自定义CRD,cert-manager不会主动处理它的配置,所以直接套用Ingress的注解或尝试关联ClusterIssuer都会失效。

方案一:复用现有ClusterIssuer,手动创建Certificate资源(推荐)

通过手动定义cert-manager的Certificate资源,让它利用已有的ClusterIssuer生成证书,再在IngressRoute中直接引用生成的证书Secret。

  1. 创建Certificate资源:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: other-host-tls
  # 注意:使用ClusterIssuer无需指定namespace;若用Issuer则需与IngressRoute同namespace
spec:
  secretName: other-host-tls-secret # 证书生成后存储的Secret名称
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
    group: cert-manager.io
  dnsNames:
    - other.host.com
  1. 修改IngressRoute配置,引用上述Secret:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: myapp-other-name-websecure
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`other.host.com`)
      kind: Rule
      services:
        - name: linkingservice
          port: 80
  tls:
    secretName: other-host-tls-secret # 直接引用cert-manager生成的证书Secret

方案二:使用Traefik自带certResolver直接对接Let's Encrypt(无需cert-manager)

如果不想依赖cert-manager,可以直接用Traefik内置的ACME客户端(certResolver)签发证书,这和cert-manager是两套独立体系,不能复用已有的ClusterIssuer。

  1. 修改Traefik静态配置(以Helm部署为例,修改values.yaml):
additionalArguments:
  - "--certificatesresolvers.letsencrypt.acme.email=my@email.com"
  - "--certificatesresolvers.letsencrypt.acme.storage=acme.json"
  - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
  - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
  # 生产环境用正式服务器,测试可替换为staging地址:https://acme-staging-v02.api.letsencrypt.org/directory
  - "--certificatesresolvers.letsencrypt.acme.server=https://acme-v02.api.letsencrypt.org/directory"
  1. 修改IngressRoute配置,指定certResolver:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: myapp-other-name-websecure
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`other.host.com`)
      kind: Rule
      services:
        - name: linkingservice
          port: 80
  tls:
    certResolver: letsencrypt # 对应Traefik静态配置中定义的certResolver名称

验证方法

  • 检查cert-manager证书状态:kubectl get certificates,状态为Ready则签发成功
  • 检查证书Secret是否存在:kubectl get secret other-host-tls-secret
  • 查看Traefik日志确认流程:kubectl logs -n traefik <traefik-pod-name>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:01:27