如何正确将Traefik Ingress注解转换为Nginx Ingress对应配置
Traefik Ingress转Nginx Ingress配置校验结果
现有转换配置的问题
- YAML语法缩进错误:转换后的配置中
spec.rules下的http、paths等字段缩进层级不符合K8s YAML规范,会直接导致资源创建失败。 - 重写规则不匹配原有逻辑:原Traefik配置使用的
traefik-pathregex-rm-first-two-args@kubernetescrd中间件作用是移除请求路径的前两个参数,当前配置的nginx.ingress.kubernetes.io/rewrite-target: /$1没有对应的正则捕获组,$1为空值,完全无法实现原有路径处理逻辑。 - SSL跳转逻辑和原配置不一致:原Traefik绑定的是
web入口(默认HTTP 80端口),没有配置HTTPS强制跳转,新增的ingress.kubernetes.io/ssl-redirect: "true"会强制把所有HTTP请求跳转到HTTPS,不符合原有业务逻辑,无特殊需求可以直接删除该注解。 - 额外配置项说明:
nginx.ingress.kubernetes.io/proxy-body-size: "0"作用是不限制请求体大小,属于新增配置,若原Traefik没有做上传大小限制可以保留,否则需要调整为和原有配置一致的阈值。
修正后的配置示例
以下配置默认适配原Traefik中间件「移除路径前两个层级」的逻辑,例如请求/api/arg1/arg2/other/path转发到后端时变为/other/path,如果你的中间件逻辑不同可以自行调整正则捕获组:
kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: ingressroutes-backend annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$3 nginx.ingress.kubernetes.io/proxy-body-size: "0" spec: rules: - host: {{.Values.ingress.host}} http: paths: - path: /api/([^/]+)/([^/]+)(/.*) pathType: ImplementationSpecific backend: service: name: service-svc port: number: 80
附加说明
如果你的Traefik中间件仅需要移除/api前缀,不需要移除后续两段路径,可将注解和path调整为:
annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 # ... paths: - path: /api(/|$)(.*) pathType: Prefix
内容的提问来源于stack exchange,提问作者IFThenElse
相关产品推荐
相关产品推荐

