防火墙后的Akka集群

agxfikkp  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(234)

我已经配置了一个Akka集群(2个节点),可以在Oracle云的空闲示例上运行它。但是,我必须保持所有TCP端口打开。根据netstat -ano -p tcp,除了种子节点中的端口外,还使用了另外两个端口,它们的值不固定。
如果我只打开两个种子端口,那么集群节点就无法找到彼此。
(我正在使用Akka流和HTTP,但我怀疑它们与连接到种子节点的Akka集群有关)。

**EDIT:**下面你可以看到我的配置和主文件。我确实使用Akka HTTP和Akka Stream并连接到WebSocket(通过HTTP)。但正如我已经说过的,我不认为这些与Akka集群节点无法找到彼此有关。

第一个
sudo ufw status为我提供Status: inactive。我使用的是可以为Oracle示例上的虚拟云网络定义的入口/出口规则。如果我限制源端口范围或目标端口范围之一,节点将无法找到彼此。

9rygscc1

9rygscc11#

如果不看你的配置,很难知道。但是我会做一些猜测。如果这些都不起作用,发布你的配置文件和你用来初始化演员系统的代码。(因为它会帮助你知道你是否在使用引导程序,例如。)
首先,实际上并没有“种子端口”,而是有一个Akka远程监听的端口(默认情况下为25220,尽管它经常被覆盖)。该远程矶钓是唯一一个需要打开才能形成集群的矶钓。(正如我在下面提到,您可能希望打开一些管理和监视端口,但群集形成并不需要这些节点。)“种子节点”是执行发现的一种方式,基本上是已知节点(主机和端口)的列表。要点是没有用于播种/发现的特殊端口:它使用相同的远程端口。在种子节点列表中指定的主机/端口是您要连接的位置,而不是您要侦听的位置。
您看到的端口不是固定的,这让我怀疑您可能正在运行一些akka集群示例。为了演示在一台机器上的集群,这些示例通常会启动多个JVM,所有JVM都监听随机端口。这样做是为了使节点不会彼此冲突。here就是这样一个示例,其中指定了端口0。这将导致随机选择一个端口。但这只是出于演示的目的,在正常的生产配置下,不应该有任何非固定的端口侦听。
再说一遍整个Akka遥控系统(群集是其上的附加层)在单个指定端口上运行。此值在remote.artery.canonical.port下指定如果您看到多个端口被打开,特别是使用非固定值时,请查看您在配置中为该值指定了什么,以及您在代码中重写它的潜在位置。(例如:其中我提到的示例代码用命令行中指定的值覆盖了随机矶钓。)
然而,即使我说Akka远程处理运行在一个端口上,还有其他几个子系统也可以打开端口。一个是集群HTTP管理。另一个是Telemetry(又名Insights,又名Cinnamon)。然而,这两个子系统都不会打开随机端口,也不会阻止集群的形成。

chy5wohz

chy5wohz2#

事实证明,配置是正确的。我所需要的只是

  1. sudo iptables -F以清除IP表
    1.使IP表持久化,以便它们在每次重新启动后不会重置回其他值。
    清除IP表听起来像是一个巨大的安全风险,但我已经通过Oracle的虚拟云网络定义了我的规则。
    至于netstat -ano -p tcp输出中的任意端口号,我想我的解释是错误的。
  • 首先,我认为在Akka配置中我不能控制客户端端口号,只能控制服务器端口号(套接字级别的客户端/服务器)。
  • 第二,在netstat -ano -p tcp的输出中,在我的java进程的每一行中,Local AddressForeign Address 列中的一个端口正好是我在配置中拥有的端口。所以我想这就是我如何在每一行中的套接字级别上计算客户端/服务器的方法(我在配置中输入的端口号是客户端的)。

相关问题