扔掉flannel,砸掉Calico,用"单网卡多ip"的网络方案,成就《国产k8s》
原创+首发+世界唯一
前言
我把flannel比喻成任脉,把calico比喻成督脉。大名鼎鼎的k8s和docker swarm都基于这个根基修炼。
实际上修炼任督二脉绝非必须。有人修炼斗气;有人修炼魂技;蜘蛛侠修炼纵越之术和粘液系统;大不列颠巫师专耍一根木棍。。。
每种功夫都有自己的优缺点。千万不要主观自大,固步自封。
K4t(即国产k8s)的网络方案原理---单网卡多ip示例
单网卡多ip,是一个早就有的旧技术,docker早就支持。
容器启动绑定多IP和端口(跟多个-p)
docker run -ti -d --name my-nginx -p 192.168.1.11:7777:80 -p 127.0.0.1:7788:80
查看容器绑定和映射的端口及Ip地址
docker port my-nginx
容器启动时可以指定通信协议,比如tcp、udp
docker run -ti -d --name my-nginx -p 7788:80/tcp docker.io/nginx
K4t网络方案细节
图例:

· 在每个node节点上,的单个网卡上建立250,500,750个左右ip。
· 因为服务器大多是n块千兆网卡,所以建议采用多块网卡分担流量,并在每块网卡上建立250个ip。
· 这些ip只有ip掩码,没有网关,支持v6的ip。在node上形成一个ip池。可以用脚本,也可以直接修改网卡配置文件,和相关文件。
· 具体实现,需要在node上用到建立ip脚本。脚本系统需求:脚本已经支持centos7,centos8,debian9,debian10,ubuntu1604,ubuntu1804,3个月内支持ubuntu2004,因技术问题暂不支持alpine。注意:node是指docker容器的宿主linux。
· 管理员添加一个管理ip。这个ip有ip、掩码、网关、dns。这个ip不属于node的ip池。
· K4t使用前,必须给每个node建立ip池,供普通应用的容器使用。只建立一次即可。
· 只有"无双寿报"才需要在node上,根据寿报的生存周期,随时动态建立,删除ip。
K4t网络方案的优点
· 解决了docker无ip,无路由,或者需要二次转换的(node内部的虚拟)路由。
· 减少了linux虚拟ip转换所需要的内存,cpu。
· 增加了网络稳定性。降低了网络复杂性。降低了出错几率,并使管理简单了好几倍。减少了一座k8s网络大山!
· K4t有一个"无双寿报"的功能。即每个node只启动一个容器(DaemonSet pod?),这个容器只绑定一个动态ip,这个ip不属于node的ip池。这个ip跟随寿报走,让ip实现跨node移动。这使得"k4t专为构建container集群应用"打造!
K8s,docker swarm没有此功能。请看:
问:k8s,docker swarm 使用的痛点之一是什么?如何解决?
答:
在k8s集群,或docker swarm上,搭建应用集群,如redis集群,一直比较困难。因为要求固定的,虚拟机级别的ip,端口。但k8s只有nodeport,没有多个nodeip的概念,更没有可以在node之间移动的,node级别ip。这导致了痛点。Statefulset根本不灵,需要开发xxx-operator解决。
而用【k4t无双寿报】法,从根本上没有这种问题。
提示:无双寿报停止后,在另一个node的网卡上建立无双寿报后,需要掉用arping发送arp协议,更新路由。因为ip没变,但网卡mac地址变了。
· 支持用zabbix监控k4t,zabbix可以安装在k4t集群外。甚至可以是从互联网进来的监控软件。这减轻了k4t集群负担,降低集群复杂性。而k8s不行。
· 相对而言,这种扁平的ip方案,更容易实现跨地区。
K4t网络方案的缺点
· 把两层ip压扁成一层了,导致一层内ip太多。Ip太多,几乎必须用vlan技术。
□ 使用vlan技术的好处:
通过使用vlan和node协同,把容器的建立、移动限制在m个固定的node中,而不是所有node中。
· Ip多,对硬件路由器性能,要求高。
· 中小规模的公有云用户,占比很多。对这些用户没有这个缺点。因为云用户之间的网络,本身就是隔离的。
后记
K4t号称比k8s简单10倍,其中至少5---6倍,源于k4t网络方案。K4t网络方案和配套脚本,给单个容器添加了虚拟机级别的ip和端口。给单个容器添加了ip和路由!让单个容器,可以从局域网的另一个ip访问了!
这种方法太好了,我简直要赞美它。甚至可以说【docker死在没有ip,没有路由】这个问题上。加上了ip和路由,让docker重获了新生!所以,说"拳打k8s,脚踢docker swarm"过分么?
单网卡多ip法、或多网卡多ip法,不是自封任督二脉的奇葩功法。在我眼中是使用docker最好、最正宗的路子,这种docker用法潮流我要引领。
"在一定程度上,k8s,docker swarm的路走错了。搞linux内部虚拟ip,路由太麻烦了。"这话我不敢说,因为我也不是大牛啊。
欢迎讨论,提供你的看法。
