是否有可能在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上进行侦听.
最佳答案
也许你可以指示Akka或Netty绑定特定的地址和端口,但是在另一个地址和端口上宣布自己.我不太了解Akka或Netty,知道它是否可行.
否则,您可以尝试三件事:
>检查他们是否可以宣布给定的IP地址(主机之一),但仍然绑定到0.0.0.0,然后执行“身份端口绑定”,即docker run -p 1234:1234 …这将暴露端口1234在容器外面到容器内的端口1234(从而稍微减轻了NAT);
>在单个Docker主机上部署集群,并使用内部IP地址 – 您将无法扩展到多台计算机,而是在将其部署到更大的系统之间验证分布式代码,这可以提供帮助;
>使用Pipework,它允许您向容器添加额外的接口,并在单个网络上将多个容器(在多个主机上)桥接在一起. Docker并未正式支持Pipework,但许多人发现它对类似场景非常有用.