Traefik'PathPrefix'无法正常工作

我有一个具有/customers资源的kube服务,该资源将返回所有客户。它还可以返回/customers/1处的特定客户。我将Traefik入口配置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    traefik.frontend.rule.type: PathPrefix
  name: customerd
  namespace: video
spec:
  rules:
  - host: custd.kube
    http:
      paths:
      - backend:
          serviceName: customerd
          servicePort: http
        path: /customers
      - backend:
          serviceName: customerd
          servicePort: http
        path: /custdhealth
      - backend:
          serviceName: customerd
          servicePort: http
        path: /metrics
      - backend:
          serviceName: customerd
          servicePort: http
        path: /sleeper

请注意,存在以下注释:traefik.frontend.rule.type: PathPrefix。从Traefik文档中:

如果您的后端在特定基础上侦听,请使用*前缀*匹配器 路径,但也可以在子路径上提供请求。例如,PathPrefix: / products可以匹配/ products,也可以匹配/ products / shoes和 /产品/衬衫。由于路径是按原样转发的,因此您的后端是 希望能收听/ products。

问题是,当我向/customers/1提交请求时,响应为404。我已确认该请求未到达服务。如果我将PathPrefix更改为PathPrefixStrip,则对/customers的请求将返回404,这与预期的一样,因为该服务未在/上进行监听。看来我正确使用了注释。

有什么想法我做错了什么或进一步的故障排除步骤吗?

ldf2771 回答:Traefik'PathPrefix'无法正常工作

更多调试后,我找出了问题所在。这与我使用Traefik的方式无关,这对Golang HTTP路由的工作方式造成了误解。我的路线被编码为“ / customers”。原来,这条路线永远不会满足“ / customers / {id}”。但是,“ / customers /”将同时路由“ / customers”和“ / customers / {id}”。因此,在简单的代码更改之后,所有这些都起作用。

使调试工作复杂化的一个因素是,通过检查(非Golang库)代码或放入调试日志消息看不到此行为。

本文链接:https://www.f2er.com/2674469.html

大家都在问