我在容器集群部署dubbo服务,我的镜像是同一个,集群有多台宿主机,dubbo服务会部署多个实例,分散在不同的宿主机上,那么在暴露服务的配置,我怎么能够通过docker实例在那个宿主机上就配置DUBBO_IP_TO_REGISTRY那个宿主机的ip呢
[apache/dubbo]DUBBO_IP_TO_REGISTRY怎么动态指定
回答
如果是多个 docker 实例的话,建议是将 docker 内的网络打通,不要使用 host 绑定的方式。
可以在容器的启动参数里添加DUBBO_IP_TO_REGISTRY=物理机ip。
个人觉得DUBBO_IP_TO_REGISTRY用处其实很有限。 我们应该搞一个黑名单(10.0.0.0/8)和白名单(比如业务网段)。然后遍历所有网卡,找到在白名单中的地址(或者不在黑名单中的地址),注册就可以。
好处就是,这个环境变量会更加通用些,要不然每个机器环境变量的设置不一样,还是比较麻烦的。
如果服务都能在容器内部,不用host就行,只是目前的现状是有些服务在容器集群内部,有些是外部,涉及到内外互访的问题所以必须这么搞。我提问题的原因是,现在dubbo3.1.3获取本机ip的方法很奇怪,有的机器获取的是机器的vip,有的机器获取的是机器上一个docker0的网卡的IP,相当大一部分即使采取host模式也不能正确获取ip,我现在的办法是通过设置偏好网卡dubbo.network.interface.preferred=eth0这种形式,暂时解决了host模式下的部署问题
可以在容器的启动参数里添加DUBBO_IP_TO_REGISTRY=物理机ip。
个人觉得DUBBO_IP_TO_REGISTRY用处其实很有限。 我们应该搞一个黑名单(10.0.0.0/8)和白名单(比如业务网段)。然后遍历所有网卡,找到在白名单中的地址(或者不在黑名单中的地址),注册就可以。
好处就是,这个环境变量会更加通用些,要不然每个机器环境变量的设置不一样,还是比较麻烦的。
这个参数的确是没有用的,很多时候基于k8s自研的部署平台,一个应用的打包,启动脚本是固定的,没办法根据宿主机来动态指定的,集群多个宿主机的话,跟根本没法写死一个ip
如果是多个 docker 实例的话,建议是将 docker 内的网络打通,不要使用 host 绑定的方式。
应用完全部署在一个集群内布,可以不用host的
如果是多个 docker 实例的话,建议是将 docker 内的网络打通,不要使用 host 绑定的方式。
应用完全部署在一个集群内布,可以不用host的
如果是 k8s 集群部署的话,本身就不需要指定注册的ip为宿主机ip的,除非是多个集群的服务都要互相发现调用,不然用k8s内的网络互通就可以了