NAT后面的akka​​集群节点(使用docker)

时间:2014-01-20 19:08:57

标签: akka docker akka-cluster

是否可以在NAT后面运行akka节点(每个节点都在单独的nat后面,公共端口是DNAT到私有)?目前我正在尝试在docker容器中部署akka节点。 Docker是natting公共端口到实例私有端口,问题是akka节点的地址是从akka.remote.netty.tcp.hostname创建的,但在natted环境中它与面向公共端口的主机名不同。来自公共接口的消息被拒绝,因为akka绑定到私有ip。是否可以更改akka节点地址而不是尊重akka.remote.netty.tcp.hostname,假设当前节点地址为akka.tcp://ClusterSystem@172.16.10.5:2551,其中172.16.10.5是akka.remote.netty .tcp.hostname,但我想将其更改为akka.tcp://ClusterSystem@10.2.0.222:2551,其中10.2.0.222是公共可访问的地址,但akka仍应该在172.16.10.5:2551上监听。 p>

2 个答案:

答案 0 :(得分:2)

也许你可以指示Akka或Netty绑定特定的地址和端口,但是在另一个地址和端口上宣布自己。我不太了解Akka或Netty,知道它是否可能。

否则,您可以尝试三件事:

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

答案 1 :(得分:2)

是的,这是可能的 - 除了通常的bind-hostbind-port之外,您还需要配置hostport进行远程处理。

来自Akka docs的

Typesafe subscription customers

自Akka 2.4.x以来,对此的本机支持已经出来了;和{{3}}的2.3.11。