【发布时间】:2020-03-09 22:51:56
【问题描述】:
我有一个 kube 服务,它有一个 /customers 资源,可以返回所有客户。它还可以通过/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 文档:
如果您的后端侦听特定的基础,请使用 * Prefix * 匹配器 路径,但也为子路径上的请求提供服务。例如,路径前缀: /products 将匹配 /products 但也匹配 /products/shoes 和 /产品/衬衫。由于路径按原样转发,因此您的后端是 预计会在 /products 上收听。
问题是,当我向/customers/1 提交请求时,响应为 404。我已确认该请求未到达服务。如果我将PathPrefix 更改为PathPrefixStrip 对/customers 的请求会按预期返回404,因为该服务没有在/ 上侦听。所以看起来我正确地使用了注释。
任何想法我做错了什么或进一步的故障排除步骤?
【问题讨论】:
-
你使用的是 Traefik 2.0 吗?
-
不,Traefik 1.7。很抱歉没有包括那个细节。 Kubernetes 服务器版本 1.15.3,客户端 1.17.3。
标签: kubernetes kubernetes-ingress traefik traefik-ingress