Docker網(wǎng)絡學習第四篇-Namespace通信實戰(zhàn)

作者: 耳朵里有風

通過前三篇對網(wǎng)絡基本概念的理解胜宇,本篇來具體實戰(zhàn)如何搭建比較的完整的Namespace的網(wǎng)絡環(huán)境,搭建過程主要是解決下列問題:

  • namespace在主機上的網(wǎng)絡:包括和主機通信际看,namespace之間的通信舵变;
  • namespace訪問主機所在的局域網(wǎng)內其他機器硕并;
  • namespace訪問互聯(lián)網(wǎng)霎褐;
  • 不同主機之間的namespace通信;

另外還有如namespace 端口映射等問題混移,再后續(xù)篇章中遇到了再展開說明

本地通信

這里的本地通信是指在同一個主機內的不同namespace之間的通信祠墅,以及namespace和主機的通信,也就是要解決的第一個問題歌径;其實此問題在Docker網(wǎng)絡學習第一篇-Linux虛擬網(wǎng)絡 有演示過毁嗦,這里再回顧一遍。

要解決第一個問題回铛,需要借助網(wǎng)橋和veth-pair 實現(xiàn)狗准。


圖1

具體演示步驟如下:

  • 創(chuàng)建命名空間
ip netns add ns1
ip netns add ns2
  • 創(chuàng)建網(wǎng)橋
ip link add name bridge0 type bridge
  • 創(chuàng)建veth-pair
ip link add veth1 type veth peer name vethb1
ip link add veth2 type veth peer name vethb2
  • 將veth的一端放在網(wǎng)橋上
ip link set vethb1 master bridge0
ip link set vethb2 master bridge0
  • 將veth另一端放在namespace
ip link set veth1 netns ns1
ip link set veth2 netns ns2
  • 給網(wǎng)絡設備配置ip地址
ip netns exec ns1 ip addr add 10.1.1.2/24 dev veth1
ip netns exec ns2 ip addr add 10.1.1.3/24 dev veth2
ip addr add 10.1.1.1/24 dev bridge0
  • 啟動網(wǎng)絡設備
ip link set bridge0 up
ip link set vethb1  up
ip link set vethb2  up
ip netns exec ns1 ip link set veth1 up
ip netns exec ns2 ip link set veth2 up

圖1的網(wǎng)絡模型到此搭建完成,因為給bridge0 和 veth1 veth2 設置了同一網(wǎng)段網(wǎng)絡地址茵肃,所以它們之間網(wǎng)絡已經(jīng)是互通的了腔长。


圖2

局域網(wǎng)內訪問

在ns1 中現(xiàn)在已經(jīng)能夠ping 通 10.1.1.1(host)和 10.1.1.3(ns2)。假設當前主機的ip是172.31.131.149, 另外一臺機器主機ip為172.31.131.150验残, 那么在ns1或ns2中如何能夠訪問172.31.131.150 呢捞附?
ns1 無法直接訪問150, 但是在ns1所在host 149 是可以訪問150的,當ns1請求150時鸟召,先將請求從veth1設備通過vethb1發(fā)送到bridge0, bridge0再將請求轉發(fā)給eth0(149的物理網(wǎng)卡)胆绊,最終發(fā)送到150。


圖3

依據(jù)上述文字描述和圖示欧募,將過程分為3步

  • 第一步压状,將ns1中的請求發(fā)送到10.1.1.1
    回顧系列第三篇所講的路由知識(Docker網(wǎng)絡學習第三篇-路由),要指定請求發(fā)給誰跟继,就需要在ns1中添加一條路由規(guī)則(默認網(wǎng)關)
ip netns exec ns1 ip route add default via 10.1.1.1

將bridge0 作為ns1 的默認網(wǎng)關种冬。

  • 第二步,將bridge0上的請求轉給eth0

圖4

學習了iptables(Docker網(wǎng)絡學習第二篇-認識iptables)之后會了解請求在進出網(wǎng)絡設備時會先經(jīng)過iptables的各種鏈舔糖,請求從bridge0發(fā)出時娱两,先經(jīng)過prerouting, 因為目標地址不是本機所以不會進入INPUT鏈,此處需要加條規(guī)則剩盒,允許請求走FORWARD鏈。

iptables -A FORWARD -i bridge0 ! -o bridge0 -j ACCEPT

這句命令的意思就是允許從設備bridge0進非bridge0出的請求通過慨蛙;同時不要忘了加一條

iptables -A FORWARD -o bridge0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

加上這句話的意思是允許回包辽聊,假設請求成功到達150,那么150給出的響應會原路返回期贫,eth0拿到響應后跟匆,同樣會經(jīng)過prerouting鏈,因為響應的目標地址不是本機(是ns1)通砍,所以需要走FORWARD鏈轉給bridge0;

從Linux2.6.15的內核版本后玛臂,iptables開始支持狀態(tài)跟蹤(conntrack),該功能依賴于netfilter的內核模塊nf_conntrack封孙。iptables可以根據(jù)包的狀態(tài)進行二次的過濾攔截和狀態(tài)跟蹤迹冤。它也是state/ctstate和nat的主要依賴模塊。conntrack共可以為連接標記五種狀態(tài)虎忌,分別如下:

  • NEW 新建連接請求的數(shù)據(jù)包
  • ESTABLISHED 該連接是某NEW狀態(tài)連接的回包
  • RELATED ESTABLISHED連接的衍生連接
  • INVALID 無法識別或沒有任何狀態(tài)的數(shù)據(jù)包
  • UNTRACKED 它是管理員在raw表中泡徙,為連接設置NOTRACK規(guī)則后的狀態(tài)

再回到請求,當請求從bridge0到prerouting再到forward, 然后到postrouting鏈處理膜蠢,這一步需要將請求轉發(fā)給設備eth0堪藐,進而訪問150。具體命令如下:

iptables -A POSTROUTING -s 10.1.1.0/24 ! -o bridge0 -j MASQUERADE

把所有來自10.1.2.0/24網(wǎng)段的請求且出口不是bridge0的請求進行轉發(fā)挑围。(試了下不加礁竞! -o bridge0,暫時沒看出影響杉辙,只是規(guī)則更加具體模捂。 ) MASQUERADE,地址偽裝,算是SNAT中的一種特例枫绅,可以實現(xiàn)自動化的SNAT泉孩。也可以手動指定snat的地址:

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 172.31.131.149
  • 第三步,轉出
    eth0 因為已經(jīng)和150 是聯(lián)通的并淋,這一步不需要在做任何配置寓搬。此時在ns1中ping 下150,ip netns exec ns1 ping 172.31.131.150, 測試一下县耽,如果有問題句喷,檢查下上述操作是否都正確,正常應該是OK的兔毙。

namespace訪問互聯(lián)網(wǎng)

當解決了第二個問題后唾琼,這個問題其實已經(jīng)隨之解決了。嘗試運行ip netns exec ns1 ping www.baidu.com 發(fā)現(xiàn)確實是可以ping通的澎剥,這是因為在解決第二個問題時锡溯,已經(jīng)將請求交給了eth0,不管是訪問局域網(wǎng)還是訪問互聯(lián)網(wǎng)都已經(jīng)是eth0的事情了哑姚。在我實驗的環(huán)境中172.31.131.149 這臺機器是可以連上互聯(lián)網(wǎng)的祭饭,所以ns1自然也可以。(主機聯(lián)網(wǎng)和解決第二個問題的過程是類似的)

不同主機之間的namespace通信叙量;

要模擬不同主機之間的namespace通信倡蝙,先在150上也新建個ns1、網(wǎng)橋bridge0以及veth1-vethb1绞佩、不同的是bridge0的ip 設為10.1.2.1寺鸥, veth1 的ip設為10.1.2.2, 和149上的10.1.1.0/24作區(qū)分品山。


圖5

現(xiàn)在紅色線就是待實現(xiàn)的部分胆建。下面演示下用vxlan實現(xiàn),本文再原理上不作深究肘交,后續(xù)篇章中還會具體學習眼坏。具體操作如下:

  1. 首先創(chuàng)建簡單的點對點 VxLAN 環(huán)境, 在149和150建一條虛擬通道酸些。


    圖6

在149上執(zhí)行

ip link add vxlan1 type vxlan id 1 remote 172.31.131.150 dstport 4789 dev eth0
ip link set vxlan1 up
ip addr add 10.0.0.2/24 dev vxlan1

在150上執(zhí)行

ip link add vxlan1 type vxlan id 1 remote 172.31.131.149 dstport 4789 dev eth0
ip link set vxlan1 up
ip addr add 10.0.0.3/24 dev vxlan1

在149上執(zhí)行ping 10.0.0.3, 顯示結果已經(jīng)可以ping通宰译,說明vxlan虛擬通道已建立。

  1. 將vxlan1 添加到網(wǎng)橋中魄懂,ns1 請求到bridge0后沿侈,再將請求轉到vxlan虛擬通道上。先把vxlan1的ip地址給移除(第一步添加ip只是為了確認通道是否建立市栗,因為加到bridge0, ip地址也沒用了缀拭。)
ip addr del 10.0.0.2/24 dev vxlan1 (149上執(zhí)行)
ip addr del 10.0.0.3/24 dev vxlan1 (150上執(zhí)行)

將vxlan1添加到網(wǎng)橋咳短,分別在149和150上執(zhí)行

ip link set vxlan1 master bridge0 

為了方便測試,在150上添加一個ns2, ip設置為10.1.1.5(和149中的ns同網(wǎng)段)

圖7

進入10.1.1.2 去訪問10.1.1.5蛛淋, 成功咙好!

總結

本篇演示了namespace通信的一些簡單場景,在實際的使用中還有很多方面需要考慮褐荷。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末勾效,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叛甫,更是在濱河造成了極大的恐慌层宫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其监,死亡現(xiàn)場離奇詭異萌腿,居然都是意外死亡,警方通過查閱死者的電腦和手機抖苦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門毁菱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锌历,你說我怎么就攤上這事贮庞。” “怎么了辩涝?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵贸伐,是天一觀的道長勘天。 經(jīng)常有香客問我怔揩,道長,這世上最難降的妖魔是什么脯丝? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任商膊,我火速辦了婚禮,結果婚禮上宠进,老公的妹妹穿的比我還像新娘晕拆。我一直安慰自己,他們只是感情好材蹬,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布实幕。 她就那樣靜靜地躺著,像睡著了一般堤器。 火紅的嫁衣襯著肌膚如雪昆庇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天闸溃,我揣著相機與錄音整吆,去河邊找鬼拱撵。 笑死,一個胖子當著我的面吹牛表蝙,可吹牛的內容都是我干的拴测。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼府蛇,長吁一口氣:“原來是場噩夢啊……” “哼集索!你這毒婦竟也來了?” 一聲冷哼從身側響起欲诺,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤抄谐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扰法,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛹含,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年塞颁,在試婚紗的時候發(fā)現(xiàn)自己被綠了浦箱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡祠锣,死狀恐怖酷窥,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情伴网,我是刑警寧澤蓬推,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站澡腾,受9級特大地震影響沸伏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜动分,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一毅糟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澜公,春花似錦姆另、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甚侣,卻和暖如春明吩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渺绒。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工贺喝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菱鸥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓躏鱼,卻偏偏與公主長得像氮采,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子染苛,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353