具有绑定端口和绑定主机名的 Akka 集群

Akka Cluster with bind-port and bind-hostname

按照 Akka FAQ 的规定在 application.conf 中配置绑定主机名和绑定端口并启动集群后,我收到错误消息:

[ERROR] [07/09/2015 19:54:24.132] [default-akka.remote.default-remote-dispatcher-20] 
[akka.tcp://default@54.175.105.30:2552/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2Fdefault%4054.175.105.30%3A2552-757/endpointWriter]
dropping message [class akka.actor.ActorSelectionMessage] 
for non-local recipient[Actor[akka.tcp://default@54.175.105.30:32810/]] 
arriving at [akka.tcp://default@54.175.105.30:32810] 
inbound addresses are [akka.tcp://default@54.175.105.30:2552]

这似乎表明攻击者收到了发往端口 32810(外部端口)的消息,但由于内部端口 (2552) 不匹配而将其丢弃。

文件的相关部分是:

  hostname = 54.175.105.30
  port = 32810

  bind-hostname = 172.17.0.44
  bind-port = 2552

我已经在 2.4-M1、2.4-M2 和 2.4-SNAPSHOT 上试过了,效果都一样。

有没有其他人遇到过这种情况?有什么建议吗?

编辑: 此 actor 系统在 docker 容器中的 ECS 中 运行。 docker 容器配置设置为从临时范围转发到容器私有 IP 上的 2552。 ECS 成功地将 hostname:port 映射到 bind-hosname:bind-port。参与者成功 运行 并绑定到本地绑定主机名和绑定端口,但正在丢弃消息并发出上述错误。

bind-* 配置设置用于 Akka 节点在 NAT 后面启动的情况(或在 docker 容器中)。您是否配置了从 hostname:portbind-hostname:bind-port 的地址转换?

在您的特定配置中,当您这样做时

ctx.actorSelection("akka.tcp://default@54.175.105.30:32810/user/actor") ! "Hi"

那么 54.175.105.30 的某个人应该正在侦听 TCP 端口 32810 并将端口转发到 172.17.0.44:2552。 Actor 系统应该是 运行 您在 172.17.0.44:2552 提供的配置。是这样吗?

您还必须为 NAT 后面的每个节点配置它,因为 Actor Systems 之间的连接是 peer to peer

这是由于我的配置错误造成的。一些覆盖绑定端口的样板代码仍然存在。