nebula2.0.1的thriftserver服务问题

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这个方法

如果完成了,欢迎同步上上游

1 个赞

我目前是这个方案:

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类。
实施的时候卡在这里了

你要手动调用setAcceptorFactory

举例,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可能需要修改源码才能升级,建议你直接用新版本

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。