由于开发原因将库升级到新版本(Corda 4)后,我在升级库后在Docker上运行JVM进程时遇到了问题,因为到目前为止,我将运行在Docker容器中的程序(节点)设置为侦听所有接口(0.0.0.0)在AWS EC2上以主机模式运行时,会将其绑定到所有网络接口,在所有接口上侦听并使用该转发。
现在,他们已经在https://github.com/corda/corda/blob/061db8b1a1ac1fa9f1a063caf7ce4f009aa283db/node/src/main/kotlin/net/corda/node/internal/Node.kt#L322中进行了编码,最近阻止了该功能,为4。
与https://docs.corda.net/corda-configuration-file.html
结合使用实际上,ArtemisMQ消息传递服务绑定到指定端口上的所有本地地址。但是,请注意,主机已作为广告中的条目包含在网络图中。因此,当跨计算机群集运行节点时,此处列出的值必须可从外部访问。如果提供的主机不可访问,则该节点将尝试自动发现其公共主机。
这导致必须在节点配置中指定公共IP,然后尝试绑定到该公共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(AWS / Docker):
通过公有IP接口伪装的IP,通过Docker IPAM / Pipeworks可以在EC2中将欺骗性的公共IP作为实际的NIC IP看到?
选项2(特定于Corda):
将配置更改为以某种方式接受0.0.0.0或使detectPublicIp更智能,并使用NMS查找其自己的IP。我希望它具有这种智能,但是后来我发现它只是在可用的NIC上查找。失败,出现AMQ224000错误。
据我了解, Corda 4.0无法无法在公共云提供商(Azure / AWS / GC)上运行,因为它要求存在具有公共IP的NIC,而Azure / AWS / GC则需要这样做没有空位,如果我错了,Corda团队的人可以纠正我吗?
答案 0 :(得分:0)
如果我正确理解,内部Artemis服务器将无法绑定,因为它正在使用(默认情况下)p2pAddress,该地址现在必须是有效的公共地址。您也可以通过提供messagingServerAddress来覆盖它。有关更多详细信息,请参见https://docs.corda.net/corda-configuration-file.html?highlight=messagingserveraddress。