【问题标题】:How to handle sub-route and a root route in the same ingress如何在同一个入口处理子路由和根路由
【发布时间】:2021-09-01 01:26:13
【问题描述】:

我有一个入口处理 2 个不同服务的流量:

rules:
    - http:
        paths:
          - path: /stats
            backend:
              serviceName: info-dashboard
              servicePort: 80
          - path: /*
            backend:
              serviceName: portal
              servicePort: 80

我还有info-dashboard 的 URL 重写规则。当流量发送到服务时重写/stats -> /。因为后端服务背后的应用程序希望其端点命中以 / 开头,而不是 /stats。

所以,问题是在 LB 上点击 /stats 很好,但后续调用失败(例如,自动应用调用以获取 javascript 和其他逻辑)。他们失败是因为他们尝试从 / 加载,这是一个不同的应用程序。

该应用是 Next.js 应用。所以,我也尝试设置basePath。但问题依然存在。

实际上,如果我从 LB 中删除 /stats -> / 重定向规则,任何对 /stats 的点击都会将我引导到入口上的另一个应用程序 - portal。我很困惑为什么以及如何工作。

我是否在设置中遗漏了什么?

【问题讨论】:

    标签: google-cloud-platform next.js url-routing load-balancing kubernetes-ingress


    【解决方案1】:

    从 k8s-ingress 的角度来看,一切都很好。看起来问题出在您的 info-dashboard 应用程序中,它不“知道”它在代理后面运行。要解决此问题,您的应用程序应使用某种指向 /stats 的 basePath/rootPath 标志(取决于您的应用程序)进行配置,以便它可以按照配置访问 /stats。

    【讨论】:

    • 该应用程序是 Next.js 应用程序,它确实配置了 basePath。我忘了提这个。我会将它添加到 OP 中。
    • 能否提供您的服务、部署和完整的 Ingress 清单?我想在我的环境中复制它。另外,您是如何部署 Ingress Controller 的?使用 Helm 或 Nginx Docs?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2020-05-04
    • 2011-12-13
    相关资源
    最近更新 更多