我需要一些有关如何使用kubernetes部署高流量移动应用程序后端的建议。此部署应至少支持HA。我们也计划运行一个灾难恢复站点,但是此问题的范围不包括灾难恢复。
我们目前使用硬件负载平衡器将传入流量路由到连接到不同设备的不同IP地址。每个此类框都将nginx实例作为反向代理运行,该代理也充当https终止符。 https终止后,流量将定向到apache网络服务器。每个盒子都有一个apache服务器,从同一盒子中运行的nginx接收所有流量。
我们想在此设置中引入kubernetes,以便我们可以更好地利用盒子。我们的流量模式波动很大,我们相信kubernetes可以帮助我们更有效地利用盒子。
我目前的计划如下:
-- Keep the hardware load balancer to route incoming traffic to different boxes. (this may not be needed but getting rid of HLB could become very political).
-- Run a kubenetes cluster utilizing all available boxes
-- pack apache + our app as docker image and deploy this image on docker container which in tern is run inside pods in the kubenetes cluster
-- setup ingress to accept external traffic, do https termination and load balance to above pods. A simple round robin or random load balancing algo is fine as our back ends are stateless
听起来不错吗?还有其他选择吗?在上述情况下,入口控制器在哪里运行?
答案 0 :(得分:0)
您的计划似乎正确。您可以将apache与代码打包在一起,但是最好将其分开,以便他们可以相互联系,并且其中任何一个版本升级都不会依赖于此。
此外,硬件负载平衡器会将流量分配到入口,这将进一步将流量输送到k8s集群,最后到达吊舱。
答案 1 :(得分:0)
入口控制器在集群内部运行。我猜您正在使用现有硬件在本地运行kuberentes。要在kubernetes之外使用现有的硬件负载均衡器,可以将nginx入口控制器作为守护程序运行,以便每个节点上都有一个实例,并通过HostPort公开它,以便每个实例都公开在同一端口上。或者,如果有lots of nodes,那么您只想使用Deployment。然后,您将需要使用NodePort,以便Kuberentes将流量发送到运行入口控制器Pod的节点。
另一种选择是通过LoadBalancer公开nginx入口控制器-为此,您需要使用https://hackernoon.com/metallb-a-load-balancer-for-bare-metal-kubernetes-clusters-f7320fde52f2
将负载均衡器与kubernetes集成。或者,您不一定必须使用入口。您可以运行nginx in the cluster并通过NodePort公开它。
我不清楚您是否需要在容器中使用Apache HTTP服务器。我想这取决于您当前的使用方式。