3

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

4

1 回答 1

2

这里的问题是PathPrefixStrip删除/config-server,它最初只是将请求转发到您的后端/。但是,当您的后端重定向时,这是一个新请求,并且 Ingress 不理解对/or的请求/login。您可以为每个后端创建两个 Ingress(es),并在每个后端中使用一个带有/. 但这意味着添加一个新的入口类,好消息是它Traefik支持它。您也可以尝试一个具有该选项的 nginx入口。--ingress-class

您可以在此处找到有关如何创建多个入口控制器的更多信息

如果你想要一个单一的 Ingress,它也会很棘手,因为你可能必须在你的应用程序中添加逻辑来理解/config-server路径。

于 2018-09-28T17:32:03.127 回答