Kong Ingress Controller配置:路由请求到服务时如何保留完整路径不截断
Kong Ingress Controller配置:路由请求到服务时如何保留完整路径不截断
我来帮你搞定这个路径被截断的问题!你遇到的核心问题是Ingress的路径匹配规则和strip-path注解的配置没配合好,导致Kong把请求里的/weather部分给去掉了。
问题根源分析
你当前的Ingress配置里,path设为/weather且pathType是ImplementationSpecific,再加上可能strip-path注解用了字符串形式的'false'——有些Kong版本会把非空字符串当成布尔值true处理,这就完全达不到你想要的保留路径的效果,最终导致服务只收到/London这样的截断路径。
正确的配置方案
修改你的weather-routing.yml文件,调整路径匹配规则并确保strip-path注解用正确的布尔值:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: weather-route annotations: konghq.com/strip-path: false # 这里用布尔值,不要加引号 spec: ingressClassName: kong rules: - http: paths: - path: /weather/* pathType: Prefix backend: service: name: weather port: number: 3000
配置说明
path: /weather/*+pathType: Prefix:这样Kong会匹配所有以/weather开头的请求(比如/weather/London、/weather/Paris等),确保所有相关请求都能命中这个路由规则。konghq.com/strip-path: false:明确告诉Kong不要截断请求路径,把完整的URL路径(包括/weather部分)原封不动转发给后端服务。
验证步骤
- 应用修改后的配置:
kubectl apply -f weather-routing.yml
- 重新发送测试请求:
curl -i 127.0.0.1:80/weather/London
这时候你的Node.js服务应该就能收到完整的/weather/London路径,返回正确的天气JSON数据了。
备选方案(正则匹配)
如果你需要更复杂的路径匹配规则,也可以用正则表达式的方式配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: weather-route annotations: konghq.com/strip-path: false spec: ingressClassName: kong rules: - http: paths: - path: /weather(/|$)(.*) pathType: ImplementationSpecific backend: service: name: weather port: number: 3000
备注:内容来源于stack exchange,提问作者mikyll98
相关产品推荐
相关产品推荐

