K8s环境中Kong插件是否支持Ingress路径占位符配置?
Kong Ingress 带路径参数占位符规则支持说明
Kong 及 Kong Ingress Controller 原生支持 /path/test/{id1}/{id2}/ 这类携带路径参数占位符的路径匹配规则,你当前的配置无法正常识别参数占位符的核心原因是缺少关键配置项,调整后即可正常使用,相关规则和配置注意事项如下:
- 路径匹配类型必须指定为
ImplementationSpecific:默认K8s Ingress的Prefix/Exact路径类型会把{id1}这类字符串当成普通文本做前缀/精确匹配,不会识别为参数占位符,只有设置pathType: ImplementationSpecific后,Kong才会启用自身的路由匹配逻辑解析占位符。 - 占位符语法符合Kong原生规则:你使用的
{参数名}格式是Kong路由支持的标准参数占位符写法,匹配到的路径参数会自动注入请求头,上游服务可以直接读取X-Kong-Route-Param-<参数名>格式的请求头获取实际参数值,比如示例中的id1、id2对应头为X-Kong-Route-Param-id1、X-Kong-Route-Param-id2。如果需要限制参数格式,可以直接在占位符内写正则规则,比如/path/test/{id1:\d+}/{id2:[a-zA-Z0-9]+}/即可限制对应位置的参数必须符合指定正则。 - 现有注解逻辑正常生效:你配置的
konghq.com/strip-path: "true"注解在参数路径场景下同样生效,Kong转发请求到后端服务时会自动剥离匹配到的完整路径前缀,不会把参数部分的路径透传给后端。 - 版本适配注意:建议将Ingress API版本从已废弃的
extensions/v1beta1升级为正式稳定版networking.k8s.io/v1;如果使用2.0以下版本的Kong Ingress Controller,存在多条路由规则时建议给参数路径添加konghq.com/regex-priority注解设置匹配优先级(数值越大优先级越高),避免被普通前缀路径提前拦截。
调整后可正常运行的配置示例如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: kong-ingress-test annotations: kubernetes.io/ingress.class: "kong-ingress" konghq.com/strip-path: "true" # 多路由场景下可放开下面配置设置优先级 # konghq.com/regex-priority: "100" namespace: test spec: rules: - host: test.com http: paths: - backend: service: name: test port: number: 8080 path: /path/test/{id1}/{id2}/ pathType: ImplementationSpecific
如果配置后出现匹配异常,优先排查两项配置:一是确认pathType未被错误设置为Prefix或Exact,二是确认Kong的router_flavor配置保持默认的traditional_compatible,不要修改为traditional模式,否则会导致参数占位符解析异常。
内容的提问来源于stack exchange,提问作者cUser
相关产品推荐
相关产品推荐

