目录

容器化dubbo多网卡问题

概述

因为公司 Kubernetes 容器集群的网络模式的问题,在 MacVlan 是默认情况下,Pod 内会有两个网卡出现,Pod IP 是 eth0,MavVlan IP 是 eth1,然而 Dumbo 框架在选择网卡的时候会默认拿到 eth0,这样就会有一些网络问题,例如把 Pod IP 注册了,但是流量无法和集群外的网络互通。

有些专注做容器的朋友可能没用过 Dubbo,不过不管用没用过,相信凭借多年的经验,应该知道这类框架不太可能不能选网卡,因为对于某些业务从虚拟机迁移到容器环境,尽量是希望对用户是无感的,那么如果跟集群外通信的网卡名不一样了,那可比较麻烦。

解决办法

走读了一下 Dubbo 的代码,发现 isPreferredNetworkInterface 这个函数的配置是可以帮助 Dubbo 获取期望的网卡的,具体就是给 Dubbo 启动的时候加上一个参数 dubbo.network.interface.preferred,就可以指定注册的网卡了。

/%E5%AE%B9%E5%99%A8%E5%8C%96dubbo%E5%A4%9A%E7%BD%91%E5%8D%A1%E9%97%AE%E9%A2%98/img.png

总结

通过给容器注入一个环境变量 isPreferredNetworkInterface 就可以改变 Dubbo 获取 IP 的默认网卡了。

参考资料

  1. isPreferredNetworkInterface
警告
本文最后更新于 2021年12月29日,文中内容可能已过时,请谨慎参考。