如何在GKE中的负载均衡器后面使用入口?

时间:2019-06-24 14:07:35

标签: 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 Component 2 (only accessible by paid users)

拥有这样的架构是否普遍? 有人可以给我指出一些很好的例子(使用k8s),这些例子正在部署这样的应用程序。预先感谢!

2 个答案:

答案 0 :(得分:1)

GKE不支持将Ingress或Load Balancer用作其他Load Balancer的后端。相反,您可以执行以下任一操作:

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

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

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

另一方面,由于您不想在3个入口之间平衡流量,因此在入口前面放置负载均衡器对您的布局几乎没有好处。您希望所有流量都到达入口,然后定向到正确的后端,并在服务容器之间保持平衡。

答案 1 :(得分:1)

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

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中创建的入口将您的外部流量转发到您的应用。