【问题标题】:How do I use an ingress behind a load balancer in GKE?如何在 GKE 中使用负载均衡器后面的入口?
【发布时间】:2019-11-06 08:48:25
【问题描述】:

我正在使用 k8s 部署我的应用程序,该应用程序包含 3 个部分。主网站(登陆页面)、App 组件 1(仅限管理员)和 App 组件 2(付费用户)。我最近遇到了一种模式,其中有一个主要的外部负载均衡器,并且应用程序的每个部分都有一个入口。例如:

LB 
  -> Ingress1 -> Main App
  -> Ingress2 -> App Component 1 (only accessible by admins)
  -> Ingress3 -> App Component 2 (only accessible by paid users)

这样的架构很常见吗? 有人可以指出一些部署这样的应用程序的好例子(使用 k8s)。提前致谢!

【问题讨论】:

    标签: kubernetes load-balancing google-kubernetes-engine kubernetes-ingress nginx-ingress


    【解决方案1】:

    GKE 不支持将 Ingress 或负载均衡器用作其他负载均衡器的后端。相反,您可以执行以下操作之一:

    1. 为每个入口点创建一个入口(这更昂贵)

    2. 使用多个路径(每个后端一个)创建单个 Ingress。这将根据输入的 URL 路由流量。这可能是您最好和最具成本效益的解决方案。为了安全起见,您可以合并Cloud Armor 以确保用户只能访问他们应该访问的路径。

    3. 创建一个 Ingress 以公开您的主应用程序,然后使用服务类型 LoadBalancers 公开付费门户和管理门户。这些将作为第 4 层工作(因此您需要有一个 DNS 记录来将管理员和付费 URL 指向适当的 IP)。您可以将负载均衡器spec.loadBalancerSourceRanges 字段配置为仅允许特定 IP 范围来限制对管理门户的访问

    另一方面,在您的布局中在 Ingress 前面放置一个负载均衡器几乎没有什么好处,因为您不希望平衡 3 个 Ingress 之间的流量。您希望所有流量都到达入口,然后被引导到正确的后端并在服务 pod 之间保持平衡。

    【讨论】:

    • 选项 3 看起来适合我。谢谢 - 我将在接下来的几天内对此进行测试。
    【解决方案2】:

    我们可以遵循的最常见方法是创建一个入口,它将基于路径转发流量。 例如,

    paths:
              - path: /app1/
                backend:
                  serviceName: app_1
                  servicePort: 80
              - path: /app2/
                backend:
                  serviceName: app_2
                  servicePort: 80
    

    所以“serviceName”是在 k8s (LB/NodePort/ClusterIP) 中创建的任何服务名称。 最后在外部 LB/App GW 中使用这个创建的入口将你的外部流量转发到你的应用程序。

    【讨论】:

    • 感谢您的回复,因为我想限制访问应用程序不同部分的用户(其中​​ 1 部分只能由管理员在特定 IP 地址下访问) - 我将使用选项 3帕特里克推荐。再次感谢您抽出宝贵时间回答我的问题。
    猜你喜欢
    • 2020-07-29
    • 2021-03-18
    • 2019-06-22
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多