Kubernetes上的Traefik不会保留重定向路径

时间:2018-09-28 14:55:37

标签: kubernetes traefik traefik-ingress

我在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”,但是它不起作用。 服务执行重定向时,我需要保留基本路径。

1 个答案:

答案 0 :(得分:2)

这里的问题是PathPrefixStrip删除了/config-server,最初它仅用/将请求转发到了后端。但是,当您的后端重定向时,它是一个新请求,而Ingress无法识别到//login的请求。您可以为每个后端创建两个Ingress,并在每个后端中使用单个后端,并提供指向/的路径。但这意味着添加一个新的入口类和the good news is that Traefik supports it。您也可以尝试使用--ingress-class选项的an nginx入口。

您可以找到有关如何创建多个入口控制器here

的更多信息。

如果您想要一个Ingress,这也将非常棘手,因为您可能必须在应用程序中添加逻辑以理解例如/config-server的路径。