Есть идеи, почему этот порт недоступен из другого экземпляра GCP? - PullRequest
0 голосов
/ 08 марта 2020

Я создал экземпляр базы данных Ignite, который должен принимать подключения от тонкого клиента через порт 10800. После S SH -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 включено, поэтому порт должен быть открыт. Я также пытался включить журналы брандмауэра при подключении, но журналы не генерируются.

Есть идеи, что может происходить?

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Спасибо за ваши ответы! Я попробовал еще несколько вещей и в итоге обнаружил, что моему экземпляру нужен внешний IP. После создания экземпляра с внешним IP-адресом экземпляр был доступен! (Я все еще подключаюсь по внутреннему IP, мой брандмауэр, к счастью, все еще блокирует соединения от inte rnet)

0 голосов
/ 08 марта 2020

Apache Ignite использует больше портов и диапазонов портов, а не только порт 10800 (который является просто JDB C соединительным портом)

Посмотрите здесь, эти порты используются в стандартной конфигурации:

Вероятно, порт 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:

  • вы должны иметь возможность подключаться из GCP к GCP по внутренним / частным IP-адресам (даже экземплярам, ​​работающим в разных зонах GCP)
  • вы не должны иметь возможность подключаться к публичным / внешним IP-адресам, даже если подключение исходит от экземпляров GCP

Надеюсь, это поможет как-то!

...