我在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”时,由于该服务具有基本身份验证,该服务将通过“ http://IP/login”进行重定向,因此我得到了404,但我期望“ http://IP/config-server/login”。 我的配置有什么问题?我还在规则类型下尝试了“ PathPrefix”和“ Path”,但是它不起作用。 服务执行重定向时,我需要保留基本路径。
答案 0 :(得分:2)
这里的问题是PathPrefixStrip
删除了/config-server
,最初它仅用/
将请求转发到了后端。但是,当您的后端重定向时,它是一个新请求,而Ingress无法识别到/
或/login
的请求。您可以为每个后端创建两个Ingress,并在每个后端中使用单个后端,并提供指向/
的路径。但这意味着添加一个新的入口类和the good news is that Traefik
supports it。您也可以尝试使用--ingress-class
选项的an nginx入口。
您可以找到有关如何创建多个入口控制器here
的更多信息。如果您想要一个Ingress,这也将非常棘手,因为您可能必须在应用程序中添加逻辑以理解例如/config-server
的路径。