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

是否有可能在NAT后面运行akka节点(每个节点落后于单独的nat,公共端口是否被DNAT转为私有)? 目前我正在尝试在Docker容器中部署akka节点。 Docker将公共端口NAT为实例私有端口,问题在于akka节点的地址是从akka.remote.netty.tcp.hostname创build的,但是在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上进行侦听。

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

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

  • 检查是否可以公布给定的IP地址(主机之一),但仍然绑定到0.0.0.0 ,然后做“身份端口绑定”,即docker run -p 1234:1234 …这将暴露端口1234外在容器内部的端口1234(从而减轻了NAT的一点点);
  • 在一个Docker主机上部署集群,并使用内部IP地址 – 您将无法扩展到多台计算机,而是将分布式代码部署到更大的系统之间进行validation。
  • 使用“ pipe道”(Pipework) ,它可以让您为容器添加额外的接口,并将多个容器(在多个主机上)桥接在一个networking上。 Docker没有正式支持pipe道,但是很多人发现它对于类似的场景非常有用。

是的,这是可能的 – 除了通常的hostport之外,您还需要configuration远程处理的bind-hostbind-port port

如何从Akka文档configurationNAT背后的Akka。

自Akka 2.4.x以来,对此的本机支持已经出来; 和2.3.11types安全订阅客户 。

Interesting Posts