Kubernetes 在GKE中,如何在负载平衡器后面使用入口?

Kubernetes 在GKE中,如何在负载平衡器后面使用入口?,kubernetes,load-balancing,google-kubernetes-engine,kubernetes-ingress,nginx-ingress,Kubernetes,Load Balancing,Google Kubernetes Engine,Kubernetes Ingress,Nginx Ingress,我正在使用k8s部署我的应用程序,它有3个部分。主网站(登录页)、应用程序组件1(仅限管理员)和应用程序组件2(适用于付费用户)。我最近遇到了一种模式,其中有一个主要的外部负载平衡器,应用程序的每个部分都有一个入口。例如: LB -> Ingress1 -> Main App -> Ingress2 -> App Component 1 (only accessible by admins) -> Ingress3 -> App Componen

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

LB 
  -> Ingress1 -> Main App
  -> Ingress2 -> App Component 1 (only accessible by admins)
  -> Ingress3 -> App Component 2 (only accessible by paid users)
像这样的架构很常见吗?
有人能给我举几个很好的例子(使用k8s)来部署这样的应用程序吗。提前谢谢

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

  • 为每个入口点创建入口(成本更高)

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

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


  • 另一方面,在入口前面安装负载平衡器对您的布局没有什么好处,因为您不希望在3个入口之间平衡流量。您希望所有流量都到达入口,然后被定向到右后端并在服务吊舱之间进行平衡。

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

  • 为每个入口点创建入口(成本更高)

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

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


  • 另一方面,在入口前面安装负载平衡器对您的布局没有什么好处,因为您不希望在3个入口之间平衡流量。您希望所有流量到达入口,然后被定向到正确的后端,并在服务吊舱之间保持平衡。

    我们可以遵循的最常见的方法是创建一个入口,该入口将根据路径转发流量。 比如说,

    paths:
              - path: /app1/
                backend:
                  serviceName: app_1
                  servicePort: 80
              - path: /app2/
                backend:
                  serviceName: app_2
                  servicePort: 80
    
    所以“serviceName”是在k8s(LB/NodePort/ClusterIP)中创建的任何服务名称。
    最后,在external LB/App GW中使用此创建的入口将您的外部流量转发到您的应用程序。

    我们可以遵循的最常见的方法是创建一个入口,该入口将根据路径转发流量。 比如说,

    paths:
              - path: /app1/
                backend:
                  serviceName: app_1
                  servicePort: 80
              - path: /app2/
                backend:
                  serviceName: app_2
                  servicePort: 80
    
    所以“serviceName”是在k8s(LB/NodePort/ClusterIP)中创建的任何服务名称。
    最后,在external LB/App GW中使用这个创建的入口,将您的外部流量转发到您的应用程序。

    选项3似乎是我的选择。谢谢你-我将在接下来的几天内对此进行测试。选项3看起来是我的选择。谢谢-我将在未来几天内对此进行测试。感谢您的回复,因为我想限制用户访问应用程序的不同部分(其中一部分只能由特定IP地址下的管理员访问)-我将使用Patrick推荐的选项3。再次感谢您抽出时间回答我的问题。感谢您的回答,因为我想限制用户访问应用程序的不同部分(其中一部分只能由特定IP地址下的管理员访问)-我将使用Patrick推荐的选项3。再次感谢您抽出时间回答我的问题。