知道为什么无法从另一个 GCP 实例访问此端口吗?

Any idea why this port is not reachable from another GCP instance?

我已经创建了一个 Ignite 数据库实例,它应该在端口 10800 上接受来自瘦客户端的连接。在 SSH-ing 到该实例和 运行 netstat -tunlp 之后,我可以看到:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
...
tcp        0      0 0.0.0.0:10800           0.0.0.0:*               LISTEN      871/java
...

来自另一台主机的端口扫描却显示:

abcdef@ssh-instance:~$ sudo nmap -sS -p10800-10800 x.x.x.x
Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-08 03:33 UTC
Nmap scan report for a.b.d.e.f (x.x.x.x)
Host is up (0.00020s latency).

PORT      STATE    SERVICE
10800/tcp filtered gap

Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds

所以它似乎无法访问。一开始以为是GCP防火墙屏蔽了端口,但是启用了规则default-allow-internal,所以端口应该是暴露的。我也尝试在连接时启用防火墙日志,但没有生成日志。

知道会发生什么吗?

Apache Ignite 使用更多端口和端口范围,而不仅仅是端口 10800(这只是 JDBC 连接器端口)

看看这里,这些是标准配置中使用的端口:

可能端口 10800 不是您需要的端口,或者不仅如此。

因此,根据您的配置,它可能会有很大变化。 你如何设置集群? 如何启动服务器节点并指定节点列表?

通过Java代码,您可以指定节点列表做这样的事情...

TcpDiscoverySpi        discover = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder finder   = new TcpDiscoveryVmIpFinder();

finder.setAddresses(Arrays.asList("10.10.10.1", "10.10.10.2")); // input the relevant IP addresses
discover.setIpFinder(finder);

...当然要使用正确的(本地、内部)IP 地址。

关于 GCP 测试的最后一个说明,请 运行 在您的节点上进行一些 netcat 测试。 如果您在一台服务器上启动侦听器,您应该能够从另一台服务器连接。

在第一台服务器上启动 netcat 侦听器(例如:此服务器具有私有 IP 10.0.0.1)

# netcat -l -p 10800

然后从另一台服务器(在您的 GCP 专用网络内)连接到侦听器

# netcat 10.10.10.1 10800

请根据需要测试更多端口。

默认 GCP 设置:

  • 您应该能够在 internal/private IP 上从 GCP 连接到 GCP 地址(甚至实例 运行ning 在不同的 GCP 区域)
  • 您应该无法连接到 public/external 个 IP 地址 即使连接来自 GCP 实例

希望对您有所帮助!

感谢您的回答!我又尝试了一些东西,最后发现我的实例需要有一个外部 IP。使用外部 IP 创建实例后,实例可以访问! (我仍在使用内部 IP 连接,幸运的是我的防火墙仍然阻止来自互联网的连接)