如何在 GKE 中的负载均衡器后面使用入口?
How do I use an ingress behind a load balancer in GKE?
我正在使用 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 不支持使用 Ingress 或负载均衡器作为其他负载均衡器的后端。相反,您可以执行以下操作之一:
为每个入口点创建一个入口(这更昂贵)
使用多个路径创建单个 Ingress(每个后端一个)。这将根据输入的 URL 路由流量。这可能是您最好且最具成本效益的解决方案。为了安全起见,您可以合并 Cloud Armor 以确保用户只访问他们应该访问的路径。
创建一个 Ingress 来公开您的主应用程序,然后使用服务类型 LoadBalancers 来公开付费门户和管理门户。这些将作为第 4 层工作(因此您需要有一个 DNS 记录来将管理员和付费 URL 指向适当的 IP)。您可以将负载均衡器 spec.loadBalancerSourceRanges 字段配置为仅允许特定 IP 范围以限制对管理门户的访问
另一方面,在入口前放置负载均衡器对您的布局没有什么好处,因为您不希望平衡 3 个入口之间的流量。您希望所有流量都进入入口,然后被定向到正确的后端并在服务 pods.
之间保持平衡
我们可以遵循的最常见的方法是创建一个入口,它将根据路径转发流量。
例如,
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 中创建的入口将您的外部流量转发到您的应用程序。
我正在使用 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 不支持使用 Ingress 或负载均衡器作为其他负载均衡器的后端。相反,您可以执行以下操作之一:
为每个入口点创建一个入口(这更昂贵)
使用多个路径创建单个 Ingress(每个后端一个)。这将根据输入的 URL 路由流量。这可能是您最好且最具成本效益的解决方案。为了安全起见,您可以合并 Cloud Armor 以确保用户只访问他们应该访问的路径。
创建一个 Ingress 来公开您的主应用程序,然后使用服务类型 LoadBalancers 来公开付费门户和管理门户。这些将作为第 4 层工作(因此您需要有一个 DNS 记录来将管理员和付费 URL 指向适当的 IP)。您可以将负载均衡器 spec.loadBalancerSourceRanges 字段配置为仅允许特定 IP 范围以限制对管理门户的访问
另一方面,在入口前放置负载均衡器对您的布局没有什么好处,因为您不希望平衡 3 个入口之间的流量。您希望所有流量都进入入口,然后被定向到正确的后端并在服务 pods.
之间保持平衡我们可以遵循的最常见的方法是创建一个入口,它将根据路径转发流量。 例如,
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 中创建的入口将您的外部流量转发到您的应用程序。