解决Rancher LB的单点问题

版权说明:原创作品,允许转载,转载时请务必以超连接形式表明文章原始出处、作者信息和本声明。否则将追究法律责任。http://blog.neunn.com/wordpress/?p=276

在整个Rancher体系中,Load Balancer Service(以下简称LB)是至关重要一环,所有服务若想暴露对外访问,必须都得经过LB。LB本身可以扩容,可以做多节点HA,再加上Rancher的fail-over机制,这些因素加在一起会导致LB所在的host会动态变化,进而LB的对外访问ip也会变化。对外暴露访问大多数情况下都会通过DNS来解析访问,这就意味着需要不断的把LB的动态IP地址注册到DNS服务中,这个过程我们断然不希望是手动进行的。很多朋友在使用时为了避免这个问题,通常会使用单点的LB,这样注册一次即可,但是单点服务带来的危险系数更大。若要避免LB的单点,那么就必须要解决DNS动态注册的问题,笔者根据平日的实践经验总结了一些方法,仅供参考。

方案一:控制LB的部署范围

我们可以在有限的范围内增加LB Host的数量,这些Host可以是固定的,这时DNS的records也无需频繁的刷新。

image2016-4-14 16-6-29

在LB创建时,可以通过Scheduling机制来控制哪些Host可以部署LB服务,当然这之前你肯定需要给相应的Host打上label。

image2016-4-14 16-13-18

总得来说这种方式使用起来非常简单,比较适合稳定的生产环境,尤其是可以针对LB的Host进行一些特殊优化以保证Haproxy能够达到较好的性能,由于这种方式使得对外暴露访问的Host是基本固定的,所以在网络安全方面也更加可控。当然对于修改频繁的CI/CD环境,这种就适用性较差,尤其是在扩容减容时还需要一些手动操作以保证LB被控制在我们想要的Host范围内。

方案二:Rancher提供的external-dns

Rancher提供了一个重要的external-dns服务来协助解决此问题,源码中实现了几个Provider,Rancher在Catalog中提供了这几个Provider的使用方法。

image2016-4-14 16-27-52 image2016-4-14 16-34-8

最终会生成诸如这样的dns记录 <service_name>.<stack_name>.<environment_name>.<root_domain> {record set}

但是这些Provider有个共同的问题就是在国内的环境基本上很难使用,尽管这些都是资本主义世界极其好用的几个Public DNS服务。国内目前并没有非常好的DNS服务可以接入,类似于AWSRoute53这类功能比较全面的不多。抛开这个问题不谈,external-dns本身其实也有些弊端,细心读过代码可以知道目前的实现,它会一股脑得把所有stack&service全部注册到DNS中,如果我们想做一些控制,只暴露想要的某些服务,这还做不到。

方案三:内网环境下的精简版external-dns

这里我们可以借鉴一些external-dns的实现原理,external-dns通过读取rancher-metadata的数据来获取stack&service&host的信息,这些通过rancher-metadata的文档便可知晓。由于Rancher的external-dns采用全部注册的方式,这种不是很灵活,我们只需要取出我们想要暴露的LB服务地址即可,所以可以通过在Stack中创建一个Service并Link到LB上这样的方式读取。

image2016-4-14 16-53-28

以上图为例,在sync-dns服务中获取nginx-lb的原理,可以参考如下:

DNS记录已经拼装好,还需要一个内网的DNS服务,在服务内设置对应的A记录即可,比如可以使用skydns

这里我更多讲得是原理实现,这些脚本变成自动化程序相信是很容易的事。如此,如果我们想要暴露某个Stack的服务,那么只要在Stack里创建一个sync-dns的Service即可,而其他Stack则不会暴露,可控性很强。

总结

目前来看,还没有十全十美的方案,笔者相信只要找准自身业务定位,一定能够找到适合自己的方案。针对企业用来说,生产环境的Environment可以考虑方案一,而dev Environment会频繁做CI/CD扩容减容之类的操作可以考虑方案三,这个组合相信可以满足大部分使用场景。

东网科技有限公司(英文名NEUNN)总部位于中国沈阳,由东北大学、沈阳市政府及战略投资者联合创立,注册资本1.2亿元,是国内领先的数据与基础设施服务商,业务范围覆盖超云计算、大数据、智慧城市等领域,致力于通过技术及商业模式的突破开启“大数据时代的智慧生活”。

niusmallnan

初出茅庐在阿里口碑网,后与朋友创业创办美食点评网站meishixing.com,
后离开加入东网(Neunn)从事OpenStack和Docker相关开发工作,
在云计算领域有一定经验,目前在公司担任Rancher平台的技术负责人。

发表评论

电子邮件地址不会被公开。 必填项已用*标注