Есть идеи, почему этот порт недоступен из другого экземпляра GCP?

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

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


person Stéphane    schedule 08.03.2020    source источник
comment
1) Включили ли вы правило входа брандмауэра для порта 10800? 2) Находятся ли обе системы в одном VPC? 3) Вы используете публичные или частные IP-адреса? Для ответа на ваш вопрос требуется более подробная информация.   -  person John Hanley    schedule 08.03.2020
comment
Спасибо за ваш ответ! 1) Для порта 10800 нет правила входа. 2) Оба находятся в сети по умолчанию. 3) Я использую внутренние IP-адреса (я зарезервировал статический внутренний IP-адрес для базы данных).   -  person Stéphane    schedule 08.03.2020
comment
@JohnHanley Я включил ведение журнала брандмауэра GCP, и похоже, что соединение проходит через брандмауэр GCP (в журнале для этой попытки отображается «disposition: ALLOWED»). Очень загадочно ...   -  person Stéphane    schedule 08.03.2020


Ответы (2)


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

person Stéphane    schedule 08.03.2020
comment
Вам не нужен публичный IP-адрес. Ваше решение указывает, возможно, на другую проблему. У вашего экземпляра не было маршрута в Интернет, и, включив общедоступный IP-адрес, вы дали ему маршрут. Возможно, вам потребуется настроить NAT для вашей внутренней частной сети. - person John Hanley; 10.03.2020

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 к GCP по внутренним / частным IP-адресам (даже экземпляры, работающие в разных зонах GCP)
  • вы НЕ должны иметь возможность подключаться к общедоступным / внешним IP-адресам, даже если соединение исходит от экземпляров GCP

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

person Gianluca Bonetti    schedule 08.03.2020