Docker實踐(2)—虛擬網絡


1 docker(container)的虛擬網絡

docker的虛擬網絡結構:

NewImage 

host創建一個虛擬bridge,每個container對應一個虛擬網絡設備(TAP設備),與bridge一起構成一個虛擬網絡,並通過虛擬bridge相互通信。

Host的物理網絡設備eth0作為內部虛擬網絡的NAT網關,container通過eth0訪問外部網絡。

# ifconfig

docker0   Link encap:Ethernet  HWaddr 56:84:7A:FE:97:99 

          inet addr:127.0.0.2  Bcast:0.0.0.0  Mask:255.0.0.0

eth0      Link encap:Ethernet  HWaddr 00:50:56:28:39:2C 

          inet addr:172.16.213.129  Bcast:172.16.213.255  Mask:255.255.255.0

veth4d69  Link encap:Ethernet  HWaddr A2:7D:7B:61:CA:2F 

          inet6 addr: fe80::a07d:7bff:fe61:ca2f/64 Scope:Link

          UP BROADCAST RUNNING  MTU:1500  Metric:1

 

# brctl show

bridge name     bridge id               STP enabled     interfaces

docker0         8000.56847afe9799       no              veth4d69

(1)host內部container內部互訪

通過虛擬網橋完成,比較簡單。

 

(2)container通過NAT訪問外部網絡

-t nat -A POSTROUTING -s 127.0.0.0/8 ! -d 127.0.0.0/8 -j MASQUERADE

上面127.0.0.0/8是內部container的網絡,如果目標地址非內部虛擬網絡,則進行NAT轉換。

 

(3)外部網絡訪問container

通常來說,與虛擬機一樣,我們的容器是用來服務的,這就需要讓外部網絡能夠訪問container,這通過DNAT來實現。

-t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 49153 -j DNAT --to-destination 127.0.0.3:22

127.0.0.3:22是內部container的ip和sshd端口,在host上映身為49153端口。

# docker port test_sshd 22

0.0.0.0:49153

 

2與虛擬機的比較

實際上,docker的網絡結構就是VMWare/KVM的NAT模式。在實際運營中,虛擬機一般會與host在同一個網絡,所以采用下面這種橋接模型,而對於docker,由於container內網是不暴露給外部的,所以采用NAT方式。

KVM Bridge示意圖:

 NewImage

# brctl show

bridge name     bridge id               STP enabled     interfaces

br0             8000.0019d1891e2f       no              eth0

                                                                        vnet0


作者:YY哥 
出處:http://www.cnblogs.com/hustcat/ 
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM