他们居然用这种方式实现了Kubernetes与Dubbo互通!

作者:李勇

一.案例背景

在容器云项目刚刚开始的时候,发现了这样一个问题:当一个应用迁移到 k8s 集群上之后,集群外部的子系统通过 Dubbo 方式调用它,直接报错,无法连接。检查 SOA 的 Zookeeper(在集群之外)发现,应用注册到 Zookeeper 里的 IP 是容器的 IP!容器的 IP 对 k8s 集群外不可见,必然连不通。

二.案例分析

为什么容器注册到 SOA 中的会是容器的 IP?这在当时我们有些不解,要知道容器发出的数据包出集群时是要做 SNAT 转换成宿主机的 IP 的,所以按说在 SOA 注册中心看到的应该是宿主机的 IP 才对。经了解才知道,SOA 服务注册采取的是“客户端发现”机制,它并不是站在 SOA 注册中心一端看向它发注册请求的机器来自于哪个 IP,而是发注册请求的机器收集自己的本地网卡 IP,然后把这个 IP 报送给注册中心,现在应用是跑在容器里的,它收集到的自然是容器内的本地网卡 IP,也就是容器的 IP。

众所周知,针对集群外主机想访问集群内的应用,k8s 只提供一种形式:暴露一个 nodeport 类型的服务(使用宿主机 IP + 端口),映射转发到容器中(通过一系列 iptables 规则实现)。可现在集群外主机偏偏要用容器 IP 去找应用,无疑给我们出了一个大难题。

k8s 的各种网络组件,Flannel、Calico、Weave等,解决了跨主机间容器直接使用自身 IP 进行通信的问题,遗憾的是它们的作用范围仅限于集群内部宿主机。仔细研究他们的工作原理,不难发现有几个共同点:

1、容器网络模式使用网桥(Bridge)模式。

2、负责容器启动时的 IP 地址分配,每台宿主机上运行的容器都属于同一个网段,不同宿主机上的容器网段必不相同,了解整个集群内的容器网段与宿主机对应关系。

和任何一个容器 IP 通信时,根据其网段查找,数据包转发到对应宿主机(区别仅在于有的通过打 VXLAN 隧道方式转发,如 Flannel,有的使用三层路由方式转发,如 Calico),然后通过宿主机内的网桥到达容器内部。

这些组件的工作原理给了我们很大启发,不管主机位于何处,要想直接和容器 IP 通信,就得了解集群内容器网段与宿主机对应关系,沿用此思路我们想到一个办法:向集群外发布到达各宿主机容器网段的路由

三.具体实施

我们使用 Flannel 作为 k8s 网络组件,Flannel 的特点是每个宿主机上的容器网段是固定的,部署完不会再变,那我们只需要在宿主机的网关设备上添加静态路由就好。

假设集群有两个节点:

节点 1

主机IP:10.132.2.22

netmask:255.255.255.0

Gateway:10.132.2.254

容器网段:10.131.10.0/24

节点 2

主机IP:10.132.2.23

netmask:255.255.255.0

Gateway:10.132.2.254

容器网段:10.131.73.0/24

那么我们就在网关设备 10.132.2.254 上添加下列路由:

ip route 10.131.101.0/24 10.132.2.22

ip route 10.131.73.0/24 10.132.2.23

如果你的网络中运行着路由协议(OSPF、EIGRP、IS-IS…),把上述静态路由重发布(Route Redistribution)到路由协议中即可,没有,就只能一跳一跳添加静态路由了。

逻辑拓扑大致如下:

细心的读者可能会问,前面说到容器数据包出集群的时候要做 SNAT 的,那外部访问容器 IP,如果回包出集群时 SNAT 成宿主机 IP,那 TCP 三次握手不就无法建立了么,怎么能通呢?经抓包测试,k8s 只有在容器主动发起连接集群外的时候才做 SNAT,回包不做转换。

这样我们就将容器网段“透”到了集群之外,实现容器网段在机房内全网可达。

温馨提示:集群的容器网段范围在集群搭建前就要统一规划好,不能和机房任何现有网段冲突

四.总结

此法简单有效地实现了集群内外 Dubbo 方式相互调用,虽然它还不够优雅,每增加一个计算节点就要增加一条静态路由,如果集群节点数量比较多,维护就比较麻烦,但它实实在在的解决了我们的问题,对业务系统迁移容器云工作具有重大意义。

未来随着集群规模加大,我们将考虑采用 Calico 网络组件,Calico 是在每个宿主机上运行一个虚拟路由器(VR),它们之间跑 BGP 协议,发现并公告自己之上的容器网段,只要宿主机的网关设备上支持 BGP,也参与其中,就可学到容器网段路由,发布到全网,无需人工干预。此外,我们还会考虑引入 SDN 技术与容器网络进行对接的可行性,敬请期待!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 3,610评论 1 5
  • 3月25日,网易云技术布道系列第三期•对话架构师上海站的活动中,网易云基础设施技术总监张晓龙带来了题为“网易云容器...
    43ce3d72fadb阅读 826评论 0 6
  • 下午,你的手机里一定跳出来一条新闻:英达涉嫌洗钱在美国被捕。我不知道你是不是和我一样,眼睛盯着英达,脑子却不由自主...
    彼得猫乌金阅读 967评论 4 58
  • 《黄昏》节选 风带着夕阳的宣言走了。 像忽然熔化了似的, 海的无数跳跃着的金眼睛 摊平为暗绿的大面孔。 远处有悲壮...
    fionahappy阅读 3,083评论 0 1
  • 肥胖的人,腹部大,穿起衣服不好看,买衣服不好买,懒得动,坐着太低腹部有压迫辛苦。爱吃肉,喝酒,睡觉的时候有时要打呼...
    红火太阳阅读 168评论 0 1