Kong Ingress下cert-manager的.well-known路由被后端覆盖如何解决
问题根因
你遇到的路由冲突确实来自/*通配符配置:Kong Ingress 路径匹配遵循精确前缀优先规则,但你配置的/*属于全局通配匹配,优先级会覆盖cert-manager自动生成的/.well-known/*验证路径,导致所有请求都被转发到Backend服务。
修复步骤
方案一:调整现有Backend Ingress的匹配规则(无需修改cert-manager配置)
给Backend的Ingress添加正则匹配注解,排除.well-known路径:
- 在annotations中新增Kong正则匹配优先级配置,数值越低优先级越低:
annotations: kubernetes.io/tls-acme: "true" acme.cert-manager.io/http01-edit-in-place: "true" kubernetes.io/ingress.class: kong cert-manager.io/cluster-issuer: letsencrypt-prod konghq.com/regex-priority: "10" # 低于cert-manager验证路由的默认优先级
- 修改路径配置为排除
.well-known前缀的正则匹配:
http: paths: - path: /~^/(!(\.well-known)).*$ pathType: ImplementationSpecific backend: service: name: your-backend-service port: number: 80
方案二:拆分验证路由与业务路由(更稳定,推荐)
- 移除Backend Ingress中的
acme.cert-manager.io/http01-edit-in-place: "true"注解,允许cert-manager为HTTP01验证生成独立的Ingress资源 - 修改你的
letsencrypt-prodClusterIssuer配置,给验证Ingress设置更高的路由优先级:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: kong ingressTemplate: metadata: annotations: konghq.com/regex-priority: "100" # 优先级高于业务路由,优先匹配
验证修复结果
配置更新后,重新触发证书签发:
# 替换为你的证书资源名称 kubectl cert-manager renew your-tls-cert-name
查看是否生成临时验证Ingress,或者原Ingress是否注入了.well-known前缀的路径规则,手动访问验证路径确认返回cert-manager的验证字符串即可。
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

