2014-01-20 73 views
5

是否可以在NAT後面運行akka節點(每個節點位於單獨的nat後面,公共端口是DNAT'ed爲private)?目前我正試圖在Docker容器中部署akka節點。 Docker將公共端口NAT爲實例私有端口,問題在於akka節點的地址是從akka.remote.netty.tcp.hostname創建的,但是在natted環境中它不同於面向公衆的主機名。來自公共接口的消息被拒絕,導致akka被綁定到私有IP。是否有可能更改akka節點地址不尊重akka.remote.netty.tcp.hostname,可以說當前節點地址是akka.tcp://[email protected]:2551,其中172.16.10.5是akka.remote.netty .tcp.hostname,但我想將其更改爲akka.tcp://[email protected]:2551,其中10.2.0.222是公共可訪問地址,但akka仍應該在172.16.10.5:2551上進行偵聽。NAT後面的akka​​集羣節點(使用docker)

回答

2

也許你可以指示Akka或Netty綁定在特定的地址和端口上,但在另一個地方宣佈自己。我不明白Akka或Netty是否有可能。

否則,有三件事情,你可以嘗試:

  • 檢查,如果他們可以宣佈一個給定的IP地址(主機的一個),但仍然結合0.0.0.0,然後執行「身份端口綁定「,即docker run -p 1234:1234 …這將暴露容器外部的端口1234到容器內的端口1234(從而稍微減輕NAT);
  • 將集羣部署在單個Docker主機上,並使用內部IP地址 - 您將無法擴展到多臺計算機,但可以在將代理部署到更大的系統之間驗證分佈式代碼,這可以提供幫助;
  • 使用Pipework,它允許您將額外接口添加到容器,並將多個容器(在多個主機上)橋接在一個網絡上。 Docker沒有正式支持管道,但許多人發現它對於類似的場景非常有用。
+0

看起來像管道可以做的伎倆,我可以使物理接口和碼頭集裝箱接口之間的橋樑,並連接碼頭節點到主網絡不使用NAT – frx

+0

選項1(綁定到0.0.0.0)是不可能與akka 2.3,但使用https://github.com/akka/akka/issues/15007中介紹的'bind-hostname'參數可以實現akka 2.4 –