h0945634 发表于 2015-4-17 10:38:26

Docker实践(2)—虚拟网络

1 docker(container)的虚拟网络
  docker的虚拟网络结构:

  host创建一个虚拟bridge,每个container对应一个虚拟网络设备(TAP设备),与bridge一起构成一个虚拟网络,并通过虚拟bridge相互通信。
  Host的物理网络设备eth0作为内部虚拟网络的NAT网关,container通过eth0访问外部网络。
  # ifconfig
  docker0   Link encap:EthernetHWaddr 56:84:7A:FE:97:99
  inet addr:127.0.0.2Bcast:0.0.0.0Mask:255.0.0.0
  eth0      Link encap:EthernetHWaddr 00:50:56:28:39:2C
  inet addr:172.16.213.129Bcast:172.16.213.255Mask:255.255.255.0
  veth4d69Link encap:EthernetHWaddr A2:7D:7B:61:CA:2F
  inet6 addr: fe80::a07d:7bff:fe61:ca2f/64 Scope:Link
  UP BROADCAST RUNNINGMTU:1500Metric: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示意图:

  # brctl show
  bridge name   bridge id               STP enabled   interfaces
  br0             8000.0019d1891e2f       no            eth0
  vnet0

作者:YY哥
出处:http://www.iyunv.com/hustcat/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

国安信仰 发表于 2015-6-25 16:25:18

很好,很强大
页: [1]
查看完整版本: Docker实践(2)—虚拟网络