2014-01-20 38 views
5

是否可以在NAT后面运行akka节点(每个节点位于单独的nat后面,公共端口是DNAT'ed为private)?目前我正试图在Docker容器中部署akka节点。 Docker将公共端口NAT为实例私有端口,问题在于akka节点的地址是从akka.remote.netty.tcp.hostname创建的,但是在natted环境中它不同于面向公众的主机名。来自公共接口的消息被拒绝,导致akka被绑定到私有IP。是否有可能更改akka节点地址不尊重akka.remote.netty.tcp.hostname,可以说当前节点地址是akka.tcp://[email protected]:2551,其中172.16.10.5是akka.remote.netty .tcp.hostname,但我想将其更改为akka.tcp://[email protected]:2551,其中10.2.0.222是公共可访问地址,但akka仍应该在172.16.10.5:2551上进行侦听。NAT后面的akka​​集群节点(使用docker)

回答

2

也许你可以指示Akka或Netty绑定在特定的地址和端口上,但在另一个地方宣布自己。我不明白Akka或Netty是否有可能。

否则,有三件事情,你可以尝试:

  • 检查,如果他们可以宣布一个给定的IP地址(主机的一个),但仍然结合0.0.0.0,然后执行“身份端口绑定“,即docker run -p 1234:1234 …这将暴露容器外部的端口1234到容器内的端口1234(从而稍微减轻NAT);
  • 将集群部署在单个Docker主机上,并使用内部IP地址 - 您将无法扩展到多台计算机,但可以在将代理部署到更大的系统之间验证分布式代码,这可以提供帮助;
  • 使用Pipework,它允许您将额外接口添加到容器,并将多个容器(在多个主机上)桥接在一个网络上。 Docker没有正式支持管道,但许多人发现它对于类似的场景非常有用。
+0

看起来像管道可以做的伎俩,我可以使物理接口和码头集装箱接口之间的桥梁,并连接码头节点到主网络不使用NAT – frx

+0

选项1(绑定到0.0.0.0)是不可能与akka 2.3,但使用https://github.com/akka/akka/issues/15007中介绍的'bind-hostname'参数可以实现akka 2.4 –