nebula版本:2.0.1
您好,因为nebula的thrift通信,是无ip的白名单限制的。只能通过iptables防火墙来设置。我想尝试下利用thrfitserver的接口。在thriftserver的服务端这边,获取到 客户端的ip。基于ip是否在名单里, 从而允许此连接accept。
以nebula-storage为例
gServer仅有setServerEventHandler可以使用,仅仅能获取到客户端ip。
gServer的setServerEventHandler可以实现 TServerEventHandler。
TServerEventHandler的connectionNewRequest、newConnection两个方法。等于这个连接已经被accept了。
想请教下。gServer哪里可以实现自定义对应的连接,从而判断ip是否在名单内,从而accept此连接
ThrfitServer::setAcceptorFactory这个方法
然后定制一个Wangle::Acceptor,主要是重写canAccept这个方法
我目前是这个方案:
ThrfitServer::setAcceptorFactory这个方法,
然后重写wangle/acceptor/Acceptor.h里面的AcceptorFactory。
然后。给Acceptor的LoadShedConfiguration对象加入ip白名单的地址。
这样,每次直接调用canAccept的时候,就会判断白名单了。
无需重写canAccept这个方法
以下是canAccept方法的开源代码:
loadShedConfig_.isWhitelisted(address) 白名单的实现。
可是,目前我自定义了ThrfitServer::setAcceptorFactory,发现ThrfitServer每次调用,并没调用到setAcceptorFactory的自定义类的实现。看了fbthrift源码的测试用例、demo也没类似案例代码。 所以目前有点疑惑,ThrfitServer::setAcceptorFactory确定是否能走自定义的Acceptor类。
实施的时候卡在这里了
举例,MetaDaemon.cpp的
gServer->setAcceptorFactory(XXXXAcceptorFactory);这么调用。自定义一个自定义的XXXXAcceptorFactory。
就是这样吧。那我再仔细看下调用不到的原因。我目前就想按照上面方案。canAccept其实已经有白名单了。我直接对LoadShedConfiguration里面set白名单
针对白名单。要是支持动态扩容,有没有好的方案,我想通过配置文件加载,白名单ip放置在meta里面,通过leader获取。
你这个应该不是我们用的wangle版本,我们用的v2021.03.01.00
可以的,你可以从meta获取configuration,然后canAccept里面判断一下
三方库我是使用开源图的脚本自己编译的。
这里显示是2018版本
只有
nebula-third-party的master分支,wangle的版本才是v2021.03.01.00。 2.0.1的第三方库采用是这个仓库的master分支吗
那2.0.1的图,wangle和fbthrefit。也可以升级v2021.03.01.00。 你们现在最新的第三方库采用的应该就是
nebula-third-party的master分支。是吧。
因为我发现在wangle以及fbthrefit的v2021.03.01.00版本,实现自定义accept的方式更加方便。api里面也有完整的案例
2.0.1可能需要修改源码才能升级,建议你直接用新版本
system
关闭
18
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。