VirtualBox(vbox)虚拟网卡和物理网卡同时存在时,sentinel获取ip出错,问题细节描述如下:
1.在A主机上运行sentinel;
2.在B主机(物理机)上运行需要被监测流量的应用 app1;
3.在B主机上同时存在物理网卡和虚拟网卡(VirtualBox Host-Only Network),并运行 app1;
4.在A主机sentinel的控制面板(控制台)上获取的机器列表中: 取得的是app1所在主机B的虚拟网卡 VirtualBox Host-Only Network的地址,从而造成监测失败;
5.错误在于sentinel不应该取得B主机虚拟网卡ip, 而应该取得物理网卡ip,因为app1运行在物理机中。
【临时解决方法】:
把虚拟网卡 VirtualBox Host-Only Network 禁用即可,希望大神能从代码层面解决这个问题。据测试VMware的虚拟网卡不会出现类似的问题。
5条答案
按热度按时间rlcwz9us1#
Would you like to submit a PR to improve relevant logic?
muk1a3rh2#
确实是这样的,我的服务A运行在docker内,服务注册到nacos上面,nacos显示的就是物理网卡的ip,同时注册到sentinel控制台,sentinel就显示的是虚拟ip。
sentinel获取ip的逻辑在com.alibaba.csp.sentinel.util.HostNameUtil.java里面:
nacos获取ip的的逻辑在org.springframework.cloud.commons.util.InetUtils.java里面:
sentinel能不能也参照nacos的获取ip逻辑优化下?
pepwfjgg3#
@ifrozenice Would you like to submit a PR to improve it?
rqmkfv5c4#
我想从代码层面解决这个错误,但是目前以我的能力还还办不到。
qcuzuvrc5#
越来越多的关于获取ip的问题。其实这里有一个成本较高但可用的fix可以尝试,那就是做一次当前节点到dashboard汇报节点的路由查找。路由查找成功后(网络能连通的情况下),本端ip即为正确ip。
路由查找的方式,除了获取路由表直接查找,还有一种比较近似的方法,就是尝试创建一下连接,从而拿到本端ip。
获取默认路由的方法(gateway)(直接使用数据报测试1.1.1.1的连通性):
更准确的,可以把目标ip更换为dashboard地址。