多个主机Kubernetes Ingress控制器

时间:2018-02-12 04:52:31

标签: kubernetes rancher kubernetes-ingress

我已经学习Kubernetes几周了,使用kube-lego NGINX示例(https://github.com/jetstack/kube-lego)已经使用Rancher on DigitalOcean成功地将服务部署到Kubernetes集群。

我已经部署了样本静态站点,Wordpress,Laravel,Craft CMS等。所有这些都使用自定义命名空间,部署,秘密,容器和外部注册表,服务和入口定义。

使用示例(lego)NGINX Ingress Controller设置,我可以将DNS应用于我的K8s群集的公开IP地址,并显示生成的网站。

但我不知道的是,如何允许多个主机让Ingress Controller为相同的部署提供服务,从而为群集提供HA Ingress。 (通过应用外部负载均衡器服务,或geo-ip,或者你有什么)。

Rancher(稳定版)允许我添加多个主机,我一次旋转3到5个,并且Kubernetes在所有主机上配置和部署。此外,我将定义许多副本和/或部署(如上所列),它们将分布在群集上,并且可以按预期访问。我甚至指定了Ingress Controller的多个副本,但当然它们都安排在同一台主机上,只给我一个Ingress的IP地址。

那么如何允许多个主机(每个主机都有自己的面向公众的IP地址)允许进入群集?我还阅读了有关设置多个Ingress控制器的内容,但是您必须指定Ingress Controller正在为哪些部署/服务提供服务,这完全违背了目的。

也许我错过了什么,但是如果K8s多主机应该提供HA,并且带有Ingress Controller的主机关闭,那么该服务将在其他主机上重新安排,但IP地址一切都是指着将死,因此停电。有多个IP地址到同一组部署/服务的方法吗?

2 个答案:

答案 0 :(得分:4)

今天我调查了一下我的设置,我想我发现了为什么我遇到了困难。经常提到“LoadBalancer”与云提供商一起使用(在两个文档中,以及@fiunchinho描述的内容)。我在Rancher设置中使用它,它会在主机上为您自动创建HA-Proxy LoadBalancer入口。

默认情况下,它只会在其中一台主机上安排它。您可以指定要在全球范围内安排调度,提供io.rancher.scheduler.global: "true"的“注释”。

像这样:

annotations:
  # Create load balancers on every host in the environment
  io.rancher.scheduler.global: "true"

http://rancher.com/docs/rancher/v1.6/en/rancher-services/load-balancer/

我更喜欢在NodePort上使用LoadBalancer,因为我希望能够将端口80(以及将来的端口443)发送到任何节点,并通过检查主机头并根据需要指导它们来成功完成我的请求。

也可以在“基础架构堆栈”菜单下的Rancher UI中设置这些LB.我已成功删除了单个LB,并重新添加了一个启用了“始终在每个主机上运行此容器的一个实例”选项。

配置完成后,我可以向任何主机发出任何Ingress请求,并获得响应,无论容器是在哪个主机上安排的。

https://rancher.com/docs/rancher/v1.6/en/rancher-services/load-balancer/

太酷了!

答案 1 :(得分:2)

入口控制器的部署方式与任何常规pod一样。这意味着您可以拥有任意数量的副本,这些副本将在您的所有节点之间传播。

您需要一个Service对象,该对象可以对入口控制器的所有窗格进行分组。

然后,您只需要将Service暴露给群集外部。如果您在云提供商处,则可以执行此操作using a LoadBalancer service。或者您只能使用a NodePort service

关键是该服务将平衡入口控制器在不同kubernetes节点上运行的所有pod之间接收的流量。如果其中一个节点出现故障,则无关紧要,因为还有其他节点包含入口控制器盒。