首页 文章

多个主机Kubernetes入口控制器

提问于
浏览
3

我已经研究了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 Controller正在为哪些部署/服务提供服务,然后完全无法实现目的 .

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

2 回答

  • 2

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

    您需要一个 Service 对象,该对象将入口控制器的所有窗格分组 .

    然后,您只需要将 Service 暴露给群集外部 . 如果您在 Cloud 提供商处,则可以这样做using a LoadBalancer service . 或者你可以只使用a NodePort service .

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

  • 4

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

    默认情况下,它只会在其中一台主机上安排它 . 您可以指定您希望全球计划安排'annotation' 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/

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

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

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

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

    非常酷!

相关问题