我需要一些关于如何使用kubernetes部署高流量移动应用后端的建议。此部署至少应支持HA。我们也计划运行灾难恢复站点,但此问题的范围不包括灾难恢复。
我们目前使用硬件负载平衡器将传入流量路由到连接到不同盒子的不同IP地址。每个这样的框都运行一个nginx实例作为反向代理,它也充当https终结符。在https终止后,流量将被定向到Apache Web服务器。每个盒子都有一个apacher服务器接收来自同一个盒子中运行的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
这听起来不错吗?还有其他选择吗?在上面的例子中,入口控制器在哪里运行?
你的计划似乎正确。您可以使用代码打包apache,但最好将它保持独立,以便它们可以相互联系,任何一个版本升级都不依赖于此。
此外,硬件负载平衡器将对进入的流量进行搔痒,这将进一步将其降低到k8s群集并最终进入pod。
入口控制器在集群内部运行。我想你希望在现有的硬件上运行kuberentes。要使用kubernetes之外的现有硬件负载均衡器,您可以将nginx入口控制器作为守护进程运行,以便每个节点上都有一个实例,并通过HostPort公开它,以便每个都暴露在同一个端口上。或者,如果有lots of nodes,那么你只想使用部署。然后你会想要使用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服务器。我想这取决于你目前如何使用它。