У меня возникли проблемы с запуском процессов 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
Результат:
- Corda теперь заставляет меня установить в node.conf p2pAddress, который затем публикуется в NMS и используется другими узлами для связи с ним.
- Я не могу установить общедоступный IP-адрес EC2, так как Corda пытается «привязать» к сетевой карте с таким именем хоста, которое не отображается напрямую для EC2
- Я не могу установить значение 0.0.0.0, чтобы привязать его ко всем сетям и прослушивать все входящие маршруты, так как они жестко заданы в основном Node.kt для остановки узла, если предоставлено 0.0.0.0
- Я могу установить только ip, видимый в контейнере / хосте, который не виден снаружи -> узел недоступен
- Я пытался обмануть сетевой стек Docker, чтобы он представлял свой локальный IP-адрес для внешнего IP-адреса, так как это виртуальный сетевой уровень, но он предоставляет возможность подсетей только существующему NIC (IP-адрес 10.0.xx) или IP-шлейфу с обратной связью. диапазоны (192.168.xx или 10.xx или 172.xxx)
- Этот пост Запуск узлов корды на разных машинах также точно иллюстрирует мою проблему и решение, к которому я пришел, и которое они закрыли в 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 если кто-нибудь из команды Корда поправит меня, если я ошибаюсь?