Проблема развертывания узла Corda 4.0 AWS - PullRequest
0 голосов
/ 09 марта 2019

У меня возникли проблемы с запуском процессов JVM в Docker после обновления библиотеки из-за причин разработки новой версии (Corda 4), так как до сих пор я настраивал программу (узел), работающую в контейнере Docker, на прослушивание всех интерфейсы (0.0.0.0) при работе в режиме хоста на AWS EC2, который связывает его со всеми сетевыми интерфейсами, прослушивает все интерфейсы и использует эту переадресацию.

Теперь в последней версии 4 они закодированы в https://github.com/corda/corda/blob/061db8b1a1ac1fa9f1a063caf7ce4f009aa283db/node/src/main/kotlin/net/corda/node/internal/Node.kt#L322, предотвращая эту функцию.

Это в сочетании с https://docs.corda.net/corda-configuration-file.html

На практике службы обмена сообщениями ArtemisMQ связываются со всеми локальными адресами указанного порта. Однако обратите внимание, что хост включен в качестве объявленной записи на карте сети. В результате значение, указанное здесь, должно быть доступно извне при работе узлов на кластере машин. Если указанный хост недоступен, узел попытается автоматически обнаружить его общедоступный.

Это приводит к необходимости указывать общедоступный IP-адрес в конфигурации узла, который он затем пытается привязать, но он не может этого сделать, поскольку EC2 не имеет общедоступного IP-адреса, видимого как прямой сетевой интерфейс, только внутренний интерфейс маршрутизации (NIC). ) который на более позднем этапе в их стеке переводится в общедоступный IP-адрес.

Экземпляр AWS EC2 ifconfig:

 br-9121696521bd Link encap:Ethernet  HWaddr 02:42:56:7C:6A:27
      inet addr:172.18.0.1  Bcast:172.18.255.255  Mask:255.255.0.0
 ...
 docker0   Link encap:Ethernet  HWaddr 02:42:78:C3:69:1B
      inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
 ...
 eth0      Link encap:Ethernet  HWaddr 02:5F:BE:63:67:82
      inet addr:10.0.0.56  Bcast:10.0.0.255  Mask:255.255.255.0
 ...
 lo        Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
 ...
 veth0c214d6 Link encap:Ethernet  HWaddr BE:2A:29:08:94:B3
      inet6 addr: fe80::bc2a:29ff:fe08:94b3/64 Scope:Link
 ...
 veth2b54799 Link encap:Ethernet  HWaddr 66:81:E9:01:91:10
      inet6 addr: fe80::6481:e9ff:fe01:9110/64 Scope:Link
 ...
 veth60fffa5 Link encap:Ethernet  HWaddr 7A:FE:10:33:A9:80
      inet6 addr: fe80::78fe:10ff:fe33:a980/64 Scope:Link
 ...
 vethe4f9a9a Link encap:Ethernet  HWaddr EE:C7:CB:C8:25:85
      inet6 addr: fe80::ecc7:cbff:fec8:2585/64 Scope:Link

Результат:

  1. Corda теперь заставляет меня установить в node.conf p2pAddress, который затем публикуется в NMS и используется другими узлами для связи с ним.
  2. Я не могу установить общедоступный IP-адрес EC2, так как Corda пытается «привязать» к сетевой карте с таким именем хоста, которое не отображается напрямую для EC2
  3. Я не могу установить значение 0.0.0.0, чтобы привязать его ко всем сетям и прослушивать все входящие маршруты, так как они жестко заданы в основном Node.kt для остановки узла, если предоставлено 0.0.0.0
  4. Я могу установить только ip, видимый в контейнере / хосте, который не виден снаружи -> узел недоступен
  5. Я пытался обмануть сетевой стек Docker, чтобы он представлял свой локальный IP-адрес для внешнего IP-адреса, так как это виртуальный сетевой уровень, но он предоставляет возможность подсетей только существующему NIC (IP-адрес 10.0.xx) или IP-шлейфу с обратной связью. диапазоны (192.168.xx или 10.xx или 172.xxx)
  6. Этот пост Запуск узлов корды на разных машинах также точно иллюстрирует мою проблему и решение, к которому я пришел, и которое они закрыли в 4.0

Вопрос / Возможности

Вариант 1 (AWS / Docker):

Spoof Public IP будет виден в EC2 как фактический IP-адрес NIC через Docker IPAM / Pipeworks или специфичный для Linux через маскарадинг IP с виртуальным интерфейсом?

Вариант 2 (для Corda):

Измените конфигурацию так, чтобы каким-либо образом принимать 0.0.0.0 или сделать обнаружение PublicIp более интеллектуальным и использовать NMS для обнаружения собственного IP. Я ожидал, что у него будет этот интеллект, но позже я обнаружил, что он просто смотрит на доступные сетевые карты. Сбой с ошибкой AMQ224000.

Насколько я понимаю, Corda 4.0 не может работать на провайдерах общедоступного облака (Azure / AWS / GC) из-за необходимости наличия сетевой карты с общедоступным IP-адресом, элемент, которого нет в Azure / AWS / GC если кто-нибудь из команды Корда поправит меня, если я ошибаюсь?

1 Ответ

0 голосов
/ 10 марта 2019

Если я правильно понимаю, внутренний сервер Artemis не может связать, так как он использует (по умолчанию) адрес p2pAddress, который теперь должен быть действительным общедоступным. Вы можете переопределить это, предоставив также MessagingServerAddress. Подробнее см. https://docs.corda.net/corda-configuration-file.html?highlight=messagingserveraddress.

...