Kubernetes 上的 Traefik 不会保留重定向路径
Traefik on Kubernetes does not keep path over redirect
我在 Kubernetes 上有一个 Traefik,它充当入口和负载均衡器。
我有这样的入口设置:
{
"apiVersion": "extensions/v1beta1",
"kind": "Ingress",
"metadata": {
"name": "nppl-ingress",
"annotations": {
"kubernetes.io/ingress.class": "traefik",
"traefik.frontend.rule.type": "PathPrefixStrip"
}
},
"spec": {
"rules": [
{
"host": "" ,
"http": {
"paths": [
{
"path": "/discover-service",
"backend": {
"serviceName": "discover-service",
"servicePort": "discover-port"
}
},
{
"path": "/config-server",
"backend": {
"serviceName": "config-server",
"servicePort": "config-port"
}
}
]
}
}
]
}
}
例如,当我点击“http://IP/config-server", because I have a basic auth on that service, the service does a redirect over "http://IP/login" so I get a 404 but I was expecting "http://IP/config-server/login”时。
我的配置有什么问题?我还在规则类型下尝试了 "PathPrefix" 和 "Path" 但它不起作用。
当我的服务执行重定向时,我需要保留我的基本路径。
这里的问题是 PathPrefixStrip
删除了 /config-server
并且它最初仅使用 /
将请求转发到您的后端。但是,当您的后端重定向时,它是一个新请求,而 Ingress 不理解对 /
或 /login
的请求。您可以为每个后端创建两个 Ingress(es),并在每个后端中使用单个后端,路径为 /
。但这将意味着添加一个新的 ingress-class 和 the good news is that Traefik
supports it. You could also try an nginx 具有 --ingress-class
选项的入口。
您可以找到有关如何创建多个入口控制器的更多信息here
如果您想要单个 Ingress,这也很棘手,因为您可能必须在应用中添加逻辑才能理解 /config-server
路径。
我在 Kubernetes 上有一个 Traefik,它充当入口和负载均衡器。 我有这样的入口设置:
{
"apiVersion": "extensions/v1beta1",
"kind": "Ingress",
"metadata": {
"name": "nppl-ingress",
"annotations": {
"kubernetes.io/ingress.class": "traefik",
"traefik.frontend.rule.type": "PathPrefixStrip"
}
},
"spec": {
"rules": [
{
"host": "" ,
"http": {
"paths": [
{
"path": "/discover-service",
"backend": {
"serviceName": "discover-service",
"servicePort": "discover-port"
}
},
{
"path": "/config-server",
"backend": {
"serviceName": "config-server",
"servicePort": "config-port"
}
}
]
}
}
]
}
}
例如,当我点击“http://IP/config-server", because I have a basic auth on that service, the service does a redirect over "http://IP/login" so I get a 404 but I was expecting "http://IP/config-server/login”时。 我的配置有什么问题?我还在规则类型下尝试了 "PathPrefix" 和 "Path" 但它不起作用。 当我的服务执行重定向时,我需要保留我的基本路径。
这里的问题是 PathPrefixStrip
删除了 /config-server
并且它最初仅使用 /
将请求转发到您的后端。但是,当您的后端重定向时,它是一个新请求,而 Ingress 不理解对 /
或 /login
的请求。您可以为每个后端创建两个 Ingress(es),并在每个后端中使用单个后端,路径为 /
。但这将意味着添加一个新的 ingress-class 和 the good news is that Traefik
supports it. You could also try an nginx 具有 --ingress-class
选项的入口。
您可以找到有关如何创建多个入口控制器的更多信息here
如果您想要单个 Ingress,这也很棘手,因为您可能必须在应用中添加逻辑才能理解 /config-server
路径。