閱讀820 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何訪問虛擬機裏的虛擬機裏的虛擬機裏的....


如何訪問虛擬機裏的虛擬機裏的虛擬機裏的....

起源

題目有點誇大了,其實就是訪問虛擬機裏的docker虛擬機。但是道理和訪問虛擬機裏的虛擬機裏的虛擬機裏的...是一樣的你懂的。

最近在研究spark和docker,利用docker搭建了個分布式spark環境。我本機是windows,開了一台虛擬機centos跑docker及spark.

一般情況下

由於docker虛擬出來的網段是172.17.0.x,我windows主機肯定訪問不了。但我可以訪問master:

docker run -p 7077:7077 -p 8080:8080 -v /opt/CDH/spark-0.9.1-bin-cdh4/:/opt/spark spark-test-mas
ter

將docker的端口映射成虛擬機的ip端口。

難以忍受的是

192.168.152.131是我的虛擬機centos的ip,當我要訪問多個workers的時候,為了避免端口衝突,必須修改對應的映射ip,比如192.168.152.131:8081,192.168.152.131:8082,但是這樣就沒辦法通過192.168.152.131:8080主頁直接訪問其他worker的web頁麵。

懶惰的人要解決這些問題

我們分析一下

我虛擬機用的是NAT方式連接。vmware會在windows主機虛擬一個vm8網卡,作為NAT,let's see:

以太網適配器 VMware Network Adapter VMnet8:

   連接特定的 DNS 後綴 . . . . . . . :
   本地鏈接 IPv6 地址. . . . . . . . : fe80::98a3:2540:507c:c401%20
   IPv4 地址 . . . . . . . . . . . . : 192.168.152.1
   子網掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網關. . . . . . . . . . . . . :

centos虛擬機的ip:

eth0      Link encap:Ethernet  HWaddr 00:0C:29:69:19:94  
          inet addr:192.168.152.131  Bcast:192.168.152.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:95126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37664 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:121109914 (115.4 MiB)  TX bytes:4068705 (3.8 MiB)

docker虛擬的網卡:

docker0   Link encap:Ethernet  HWaddr FE:54:65:6F:81:5C  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12802 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38684 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1516399 (1.4 MiB)  TX bytes:56376971 (53.7 MiB)

docker container的各個ip:

spark-master=172.17.0.2spark-woker=172.17.0.3spark-woker=172.17.0.4spark-worker=172.17.0.5

解決辦法

完整的路由:
本機->虛擬網卡(192.168.152.1)->linux虛擬機ip(192.168.152.131) ->linux虛擬機裏的虛擬網卡(172.17.41.1)->linux虛擬機裏的虛擬機(172.17.0.2)

所以添加一條路由就好了:

route add -p 172.17.0.0 mask 255.255.255.0 192.168.152.131

跟蹤一下看:

C:\Users\Administrator>tracert 172.17.0.2
通過最多 30 個躍點跟蹤到 172.17.0.2 的路由
  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.152.131
  2    <1 毫秒   <1 毫秒   <1 毫秒 172.17.0.2
跟蹤完成。

插曲

由於校園網也是172.17.0.0網段的,會有網關衝突。路由表也有優先級,一開始設置的添加路由之後,走的居然是校園網的那條。問了大神,大神說一般是優先走明細路由。我這邊明顯不一樣。最後是這樣:

route delete 0.0.0.0

不能上網了0..0

route add -p 172.17.0.0 mask 255.255.255.0 192.168.152.131

重新添加校園網的網關,兩邊都ok了。

Reference

https://tonyguo.blog.51cto.com/379574/176104


最後更新:2017-04-03 08:26:19

  上一篇:go 【端午小練】HDU1596-find the safest road
  下一篇:go NYOJ248-BUYING FEED