Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Àí½âDocker¿ç¶àÖ÷»úÈÝÆ÷ÍøÂç
 
  4631  次浏览      29
 2018-5-29
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn,Ö÷Òª½²½âÁË¿ç¶àÖ÷»úÈÝÆ÷ÍøÂç»·¾³µÄ´î½¨ÒÔ¼°Ô­ÀíµÄ½²½âµÈ֪ʶ£¬Ï£ÍûÄܸø´ó¼ÒµÄѧϰ´øÀ´°ïÖú ¡£

ÔÚDocker 1.9 ³öÊÀǰ£¬¿ç¶àÖ÷»úµÄÈÝÆ÷ͨÐÅ·½°¸´óÖÂÓÐÈçÏÂÈýÖÖ£º

1¡¢¶Ë¿ÚÓ³Éä

½«ËÞÖ÷»úAµÄ¶Ë¿ÚPÓ³Éäµ½ÈÝÆ÷CµÄÍøÂç¿Õ¼ä¼àÌýµÄ¶Ë¿ÚP¡¯ÉÏ£¬½öÌṩËIJ㼰ÒÔÉÏÓ¦ÓúͷþÎñʹÓá£ÕâÑùÆäËûÖ÷»úÉϵÄÈÝÆ÷ͨ¹ý·ÃÎÊËÞÖ÷»úAµÄ¶Ë¿ÚPʵ ÏÖÓëÈÝÆ÷CµÄͨÐÅ¡£ÏÔÈ»Õâ¸ö·½°¸µÄÓ¦Óó¡¾°ºÜÓоÖÏÞ¡£

2¡¢½«ÎïÀíÍø¿¨ÇŽӵ½ÐéÄâÍøÇÅ£¬Ê¹µÃÈÝÆ÷ÓëËÞÖ÷»úÅäÖÃÔÚÍ¬Ò»Íø¶ÎÏÂ

ÔÚ¸÷¸öËÞÖ÷»úÉ϶¼½¨Á¢Ò»¸öÐÂÐéÄâÍøÇÅÉ豸br0£¬½«¸÷×ÔÎïÀíÍø¿¨eth0ÇŽÓbr0ÉÏ£¬eth0µÄIPµØÖ·¸³¸øbr0£»Í¬Ê±ÐÞ¸ÄDocker daemonµÄDOCKER_OPTS£¬ÉèÖÃ-b=br0£¨Ìæ´údocker0£©£¬²¢ÏÞÖÆContainer IPµØÖ·µÄ·ÖÅ䷶ΧΪͬÎïÀí¶ÎµØÖ·£¨¨Cfixed-cidr£©¡£ÖØÆô¸÷¸öÖ÷»úµÄDocker Daemonºó£¬´¦ÓÚÓëËÞÖ÷»úÔÚÍ¬Ò»Íø¶ÎµÄDockerÈÝÆ÷¾Í¿ÉÒÔʵÏÖ¿çÖ÷»ú·ÃÎÊÁË¡£Õâ¸ö·½°¸Í¬Ñù´æÔÚ¾ÖÏÞºÍÀ©Õ¹ÐÔ²îµÄÎÊÌ⣺±ÈÈçÐ轫ÎïÀíÍø¶ÎµÄµØÖ·»®·Ö ³ÉС¿é£¬·Ö²¼µ½¸÷¸öÖ÷»úÉÏ£¬·ÀÖ¹IP³åÍ»£»×ÓÍø»®·ÖÒÀÀµÎïÀí½»»»»úÉèÖã»DockerÈÝÆ÷µÄÖ÷»úµØÖ·¿Õ¼ä´óСÒÀÀµÎïÀíÍøÂç»®·ÖµÈ¡£

3¡¢Ê¹ÓõÚÈý·½µÄ»ùÓÚSDNµÄ·½°¸£º±ÈÈç ʹÓÃOpen vSwitch ¨C OVS »òCoreOSµÄFlannel µÈ¡£

¹ØÓÚÕâЩµÚÈý·½·½°¸µÄϸ½Ú´ó¼Ò¿ÉÒԲο¼O¡¯ReillyµÄ¡¶Docker Cookbook¡· Ò»Êé¡£

DockerÔÚ1.9°æ±¾Öиø´ó¼Ò´øÀ´ÁËÒ»ÖÖÔ­ÉúµÄ¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçµÄ½â¾ö·½°¸£¬¸Ã·½°¸µÄʵÖÊÊDzÉÓÃÁË»ùÓÚVXLAN µÄ¸²¸ÇÍø¼¼Êõ¡£·½°¸µÄʹÓÃÓÐһЩǰÌáÌõ¼þ£º

1¡¢Linux Kernel°æ±¾ >= 3.16£»

2¡¢ÐèÒªÒ»¸öÍⲿKey-value Store£¨¹Ù·½Àý×ÓÖÐʹÓõÄÊÇconsul£©£»

3¡¢¸÷ÎïÀíÖ÷»úÉϵÄDocker DaemonÐèÒªÒ»Ð©ÌØ¶¨µÄÆô¶¯²ÎÊý£»

4¡¢ÎïÀíÖ÷»úÔÊÐíÄ³Ð©ÌØ¶¨TCP/UDP¶Ë¿Ú¿ÉÓá£

±¾ÎĽ«´ø×Å´ó¼ÒÒ»ÆðÀûÓÃDocker 1.9.1´´½¨Ò»¸ö¿ç¶àÖ÷»úÈÝÆ÷ÍøÂ磬²¢·ÖÎö»ùÓÚ¸ÃÍøÂçµÄÈÝÆ÷¼äͨÐÅÔ­Àí¡£

Ò»¡¢ÊµÑé»·¾³½¨Á¢

1¡¢Éý¼¶Linux Kernel

ÓÉÓÚʵÑé»·¾³²ÉÓõÄÊÇUbuntu 14.04 server amd64£¬Æäkernel°æ±¾²»ÄÜÂú×㽨Á¢¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçÒªÇó£¬Òò´ËÐèÒª¶ÔÄں˰汾½øÐÐÉý¼¶¡£ÔÚUbuntuµÄÄÚºËÕ¾µã ÏÂÔØ3.16.7 utopicÄÚºË µÄÈý¸öÎļþ£º

linux-headers-3.16.7-031607_3.16.7-031607.201410301735_all.deb
linux-image-3.16.7-031607-generic_3.16.7-031607.201410301735_amd64.deb
linux-headers-3.16.7-031607-generic_3.16.7-031607.201410301735_amd64.deb

ÔÚ±¾µØÖ´ÐÐÏÂÃæÃüÁî°²×°£º

sudo dpkg -i linux-headers-3.16.7-*.deb linux-image-3.16.7-*.deb

ÐèҪעÒâµÄÊÇ£ºkernel mainlineÉϵÄ3.16.7ÄÚºËûÓдølinux-image-extra£¬Ò²¾ÍûÓÐÁËaufs µÄÇý¶¯£¬Òò´ËDocker Daemon½«²»Ö§³ÖĬÈϵĴ洢Çý¶¯£º¨Cstorage-driver=aufs£¬ÎÒÃÇÐèÒª½«storage driver¸ü»»Îªdevicemapper¡£

ÄÚºËÉý¼¶ÊÇÒ»¸öÓзçÏյIJÙ×÷£¬²¢ÇÒÊÇ·ñÄÜÉý¼¶³É¹¦»¹Òª¿´µã¡°ÔËÆø¡±£ºÎÒµÄÁ½Ì¨µ¶Æ¬·þÎñÆ÷£¬¾ÍÊÇһ̨Éý¼¶³É¹¦Ò»Ì¨Éý¼¶Ê§°Ü£¨Ò»Ö±±¨Íø¿¨ÎÊÌ⣩¡£

2¡¢Éý¼¶Dockerµ½1.9.1°æ±¾

´Ó¹úÄÚÏÂÔØDocker¹Ù·½µÄ°²×°°ü±È½ÏÂý£¬ÕâÀïÀûÓÃdaocloud.ioÌṩµÄ·½·¨ ¿ìËÙ°²×°Docker×îа汾£º

$ curl -sSL https://get.daocloud.io/docker | sh

3¡¢ÍØÆË

±¾´ÎµÄ¿ç¶àÖ÷»úÈÝÆ÷ÍøÂç»ùÓÚÁ½Ì¨ÔÚ²»Í¬×ÓÍøÍø¶ÎÄÚµÄÎïÀí»ú³ÐÔØ£¬»ùÓÚÎïÀí»ú´î½¨£¬Ä¿µÄÊǼò»¯ºóÐøÍøÂçͨÐÅÔ­Àí·ÖÎö¡£

ÍØÆËͼÈçÏ£º

¶þ¡¢¿ç¶àÖ÷»úÈÝÆ÷ÍøÂç´î½¨

1¡¢´´½¨consul ·þÎñ

¿¼Âǵ½kv storeÔÚ±¾ÎIJ¢·Ç¹Ø¼ü£¬½ö×÷¿ç¶àÖ÷»úÈÝÆ÷ÍøÂç´´½¨Æô¶¯µÄǰÌáÌõ¼þÖ®Óã¬Òò´Ë½öÓðüº¬Ò»¸öserver½ÚµãµÄ¡±cluster¡±¡£

²ÎÕÕÍØÆËͼ£¬ÎÒÃÇÔÚ10.10.126.101ÉÏÆô¶¯Ò»¸öconsul£¬¹ØÓÚconsul¼¯ÈºÒÔ¼°·þÎñ×¢²á¡¢·þÎñ·¢ÏÖµÈϸ½Ú¿ÉÒԲο¼ÎÒ֮ǰµÄÒ» ƪÎÄÕ£º

$./consul -d agent -server -bootstrap-expect 1 -data-dir ./data -node=master -bind=10.10.126.101 -client=0.0.0.0 &

2¡¢ÐÞ¸ÄDocker Daemon DOCKER_OPTS²ÎÊý

Ç°ÃæÌáµ½¹ý£¬Í¨¹ýDocker 1.9´´½¨¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçÐèÒªÖØÐÂÅäÖÃÿ¸öÖ÷»ú½ÚµãÉϵÄDocker DaemonµÄÆô¶¯²ÎÊý£º

ubuntuϵͳÕâ¸öÅäÖÃÔÚ/etc/default/dockerÏ£º
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-advertise eth0:2375 --cluster-store consul://10.10.126.101:8500/network --storage-driver=devicemapper"

ÕâÀï¶à˵¼¸¾ä£º

-H(»ò¨Chost)ÅäÖõÄÊÇDocker client(°üÀ¨±¾µØºÍÔ¶³ÌµÄclient)ÓëDocker DaemonµÄͨÐÅý½é£¬Ò²ÊÇDocker REST apiµÄ·þÎñ¶Ë¿Ú¡£Ä¬ÈÏÊÇ/var/run/docker.sock£¨½öÓÃÓÚ±¾µØ£©£¬µ±È»Ò²¿ÉÒÔͨ¹ýtcpЭÒéͨÐÅÒÔ·½±ãÔ¶³ÌClient·ÃÎÊ£¬¾ÍÏñÉÏÃæ ÅäÖõÄÄÇÑù¡£·Ç¼ÓÃÜÍøÍ¨ÐŲÉÓÃ2375¶Ë¿Ú£¬¶øTLS¼ÓÃÜÁ¬½ÓÔòÓÃ2376¶Ë¿Ú¡£ÕâÁ½¸ö¶Ë¿ÚÒѾ­ÉêÇëÔÚIANA×¢²á²¢»ñÅú£¬±ä³ÉÁËÖªÃû¶Ë¿Ú¡£-H¿ÉÒÔÅäÖöà¸ö£¬¾ÍÏñÉÏÃæÅäÖõÄÄÇÑù¡£ unix socket±ãÓÚ±¾µØdocker client·ÃÎʱ¾µØdocker daemon£»tcp¶Ë¿ÚÔòÓÃÓÚÔ¶³Ìclient·ÃÎÊ¡£ÕâÑùÒ»À´£ºdocker pull ubuntu£¬×ßdocker.sock£»¶ødocker -H 10.10.126.101:2375 pull ubuntuÔò×ßtcp socket¡£

¨Ccluster-advertise ÅäÖõÄÊDZ¾Docker DaemonʵÀýÔÚclusterÖеĵØÖ·£»

¨Ccluster-storeÅäÖõÄÊÇClusterµÄ·Ö²¼Ê½KV storeµÄ·ÃÎʵØÖ·£»

Èç¹ûÄã֮ǰÊÖ¹¤Ð޸ĹýiptablesµÄ¹æÔò£¬½¨ÒéÖØÆôDocker Daemon֮ǰÇåÀíÒ»ÏÂiptables¹æÔò£ºsudo iptables -t nat -F, sudo iptables -t filter -FµÈ¡£

3¡¢Æô¶¯¸÷½ÚµãÉϵÄDocker Daemon

ÒÔ10.10.126.101ΪÀý£º

$ sudo service docker start
$ ps -ef|grep docker
root 2069 1 0 Feb02 ? 00:01:41 /usr/bin/docker -d --dns 8.8.8.8 --dns 8.8.4.4 --storage-driver=devicemapper -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-advertise eth0:2375 --cluster-store consul://10.10.126.101:8500/network

Æô¶¯ºóiptablesµÄnat, filter¹æÔòÓëµ¥»úDockerÍøÂç³õʼÇé¿ö²¢ÎÞ¶þÖ¡£

101½ÚµãÉϳõÊ¼ÍøÂçdriverÀàÐÍ£º
$docker network ls
NETWORK ID    NAME    DRIVER
47e57d6fdfe8    bridge    bridge
7c5715710e34    none    null
19cc2d0d76f7    host    host

4¡¢´´½¨overlayÍøÂçnet1ºÍnet2

ÔÚ101½ÚµãÉÏ£¬´´½¨net1£º

$ sudo docker network create -d overlay net1

ÔÚ71½ÚµãÉÏ£¬´´½¨net2:

$ sudo docker network create -d overlay net2

Ö®ºóÎÞÂÛÔÚ71½Úµã»¹ÊÇ101½Úµã£¬ÎÒÃDz鿴µ±Ç°ÍøÂçÒÔ¼°Çý¶¯ÀàÐͶ¼ÊÇÈçϽá¹û£º

$ docker network ls
NETWORK ID    NAME    DRIVER
283b96845cbe    net2    overlay
da3d1b5fcb8e    net1    overlay
00733ecf5065    bridge    bridge
71f3634bf562    none    null
7ff8b1007c09    host    host

´Ëʱ£¬iptables¹æÔòÒ²²¢Îޱ仯¡£

5¡¢Æô¶¯Á½¸öoverlay netϵÄcontainers

ÎÒÃÇ·Ö±ðÔÚnet1ºÍnet2ÏÂÃæÆô¶¯Á½¸öcontainer£¬Ã¿¸ö½ÚµãÉϸ÷ÖÖnet1ºÍnet2µÄcontainer¸÷Ò»¸ö£º

101:
sudo docker run -itd --name net1c1 --net net1 ubuntu:14.04
sudo docker run -itd --name net2c1 --net net2 ubuntu:14.04
71:
sudo docker run -itd --name net1c2 --net net1 ubuntu:14.04
sudo docker run -itd --name net2c2 --net net2 ubuntu:14.04

Æô¶¯ºó£¬ÎÒÃǾ͵õ½ÈçÏÂÍøÂçÐÅÏ¢£¨ÈÝÆ÷µÄipµØÖ·¿ÉÄÜÓëÇ°ÃæÍØÆËͼÖеIJ»Ò»Ö£¬Ã¿´ÎÈÝÆ÷Æô¶¯ipµØÖ·¶¼¿ÉÄܱ仯£©£º

net1:
net1c1 - 10.0.0.7
net1c2 - 10.0.0.5

net2:
net2c1 - 10.0.0.4
net2c2 - 10.0.0.6

6¡¢ÈÝÆ÷Á¬Í¨ÐÔ

ÔÚnet1c1ÖУ¬ÎÒÃÇÀ´¿´¿´Æäµ½net1ºÍnet2µÄÁ¬Í¨ÐÔ£º

root@021f14bf3924:/# ping net1c2
PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=0.670 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=0.387 ms
^C
--- 10.0.0.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.387/0.528/0.670/0.143 ms

root@021f14bf3924:/# ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
^C
--- 10.0.0.4 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1008ms

¿É¼û£¬net1ÖеÄÈÝÆ÷ÊÇ»¥Í¨µÄ£¬µ«net1ºÍnet2ÕâÁ½¸öoverlay netÖ®¼äÊǸôÀëµÄ¡£

Èý¡¢¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçͨÐÅÔ­Àí

ÔÚ¡°µ¥»úÈÝÆ÷ÍøÂ硱һÎÄÖУ¬ÎÒÃÇ˵¹ýÈÝÆ÷¼äµÄͨÐÅÒÔ¼°ÈÝÆ÷µ½Íâ²¿ÍøÂçµÄͨÐÅÊÇͨ¹ýdocker0ÍøÇŲ¢½áºÏiptablesʵÏֵġ£ÄÇôÔÚÉÏÃæÒѾ­½¨Á¢µÄ¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçÀÈÝÆ÷µÄͨÐÅÓÖÊÇÈçºÎʵÏÖµÄÄØ£¿ÏÂÃæÎÒÃÇÒ»ÆðÀ´Àí½âһϡ£×¢Ò⣺ÓÐÁ˵¥»úÈÝÆ÷ÍøÂç»ù´¡ºó£¬ÕâÀïºÜ¶àÍøÂçϸ½Ú¾Í²»ÔÙ׸ÊöÁË¡£

ÎÒÃÇÏÈÀ´¿´¿´£¬ÔÚnet1ϵÄÈÝÆ÷µÄÍøÂçÅäÖã¬ÒÔ101ÉϵÄnet1c1ÈÝÆ÷ΪÀý£º

$ sudo docker attach net1c1
root@021f14bf3924:/# ip route
default via 172.19.0.1 dev eth1
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.4
172.19.0.0/16 dev eth1 proto kernel scope link src 172.19.0.2
root@021f14bf3924:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
8: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
link/ether 02:42:0a:00:00:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.4/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:aff:fe00:4/64 scope link
valid_lft forever preferred_lft forever
10: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:13:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.19.0.2/16 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe13:2/64 scope link
valid_lft forever preferred_lft forever

¿ÉÒÔ¿´³önet1c1ÓÐÁ½¸öÍø¿Ú£ºeth0(10.0.0.4)ºÍeth1(172.19.0.2)£»´Ó·ÓɱíÀ´¿´£¬Ä¿µÄµØÖ·ÔÚ172.19.0.0/16·¶Î§Äڵģ¬×ßeth1£»Ä¿µÄµØÖ·ÔÚ10.0.0.0/8·¶Î§Äڵģ¬×ßeth0¡£

ÎÒÃÇÌø³öÈÝÆ÷£¬»Øµ½Ö÷»úÍøÂç·¶³ë£º

ÔÚ101ÉÏ£º
$ ip a
... ...
5: docker_gwbridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:52:35:c9:fc brd ff:ff:ff:ff:ff:ff
inet 172.19.0.1/16 scope global docker_gwbridge
valid_lft forever preferred_lft forever
inet6 fe80::42:52ff:fe35:c9fc/64 scope link
valid_lft forever preferred_lft forever
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:4b:70:68:9a brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
11: veth26f6db4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP
link/ether b2:32:d7:65:dc:b2 brd ff:ff:ff:ff:ff:ff
inet6 fe80::b032:d7ff:fe65:dcb2/64 scope link
valid_lft forever preferred_lft forever
16: veth54881a0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP
link/ether 9e:45:fa:5f:a0:15 brd ff:ff:ff:ff:ff:ff
inet6 fe80::9c45:faff:fe5f:a015/64 scope link
valid_lft forever preferred_lft forever

ÎÒÃÇ¿´µ½³ýÁËÎÒÃÇÊìϤµÄdocker0ÍøÇÅÍ⣬»¹¶à³öÁËÒ»¸ödocker_gwbridgeÍøÇÅ£º

$ brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02424b70689a no
docker_gwbridge 8000.02425235c9fc no veth26f6db4
veth54881a0

²¢ÇÒ´ÓbrctlµÄÊä³ö½á¹ûÀ´¿´£¬Á½¸öveth¶¼ÇŽÓÔÚdocker_gwbridgeÉÏ£¬¶ø²»ÊÇdocker0ÉÏ£»docker0ÔÚ¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçÖв¢Ã»Óб»Óõ½¡£docker_gwbridgeÌæ´úÁËdocker0£¬ÓÃÀ´ÊµÏÖ101ÉÏÁ¥ÊôÓÚnet1ÍøÂç»ònet2ÍøÂçÖÐÈÝÆ÷¼äµÄͨÐÅÒÔ¼°ÈÝÆ÷µ½ÍⲿµÄͨÐÅ£¬ÆäÖ°Äܾͺ͵¥»úÈÝÆ÷ÍøÂçÖÐdocker0Ò»Ñù¡£

µ«Î»ÓÚ²»Í¬hostÇÒÁ¥ÊôÓÚnet1µÄÁ½¸öÈÝÆ÷net1c1ºÍnet1c2¼äµÄͨÐÅÏÔÈ»²¢Ã»ÓÐͨ¹ýdocker_gwbridgeÍê³É£¬´Ónet1c1·ÓɱíÀ´¿´£¬µ±net1c1 ping net1c2ʱ£¬ÏûÏ¢ÊÇͨ¹ýeth0£¬¼´10.0.0.4Õâ¸öip³öÈ¥µÄ¡£´ÓhostµÄÊӽǣ¬net1c1µÄeth0ËÆºõûÓÐÍøÂçÉ豸ÓëÖ®Á¬½Ó£¬ÄÇÍøÂçͨÐÅÊÇÈçºÎÍê³ÉµÄÄØ£¿

ÕâÒ»ÇÐÊÇ´Ó´´½¨network¿ªÊ¼µÄ¡£Ç°ÃæÎÒÃÇÖ´ÐÐdocker network create -d overlay net1À´´´½¨net1 overlay network£¬Õâ¸öÃüÁî»á´´½¨Ò»¸öеÄnetwork namespace¡£

ÎÒÃÇÖªµÀÿ¸öÈÝÆ÷¶¼ÓÐ×Ô¼ºµÄÍøÂçnamespace£¬´ÓÈÝÆ÷µÄÊӽǿ´ÆäÍøÂçÃû×ֿռ䣬ÎÒÃÇÄÜ¿´µ½ÍøÂçÉ豸ÖîÈ磺lo¡¢eth0¡£Õâ¸öeth0ÓëÖ÷»úÍøÂçÃû×Ö¿Õ¼äÖеÄvethxÊÇÒ»¸öÐéÄâÍø¿¨pair¡£overlay networkÒ²ÓÐ×Ô¼ºµÄnet ns£¬¶øoverlay networkµÄnet nsÓëÈÝÆ÷µÄnet nsÖ®¼äÒ²ÓÐ×ÅÒ»Ð©ÍøÂçÉ豸¶ÔÓ¦¹ØÏµ¡£

ÎÒÃÇÏÈÀ´²é¿´Ò»ÏÂnetwork namespaceµÄid¡£ÎªÁËÄÜÀûÓÃiproute2¹¤¾ß¶Ônetwork ns½øÐйÜÀí£¬ÎÒÃÇÐèÒª×öÈçϲÙ×÷£º

$cd /var/run
$sudo ln -s /var/run/docker/netns netns

ÕâÊÇÒòΪiproute2Ö»ÄܲÙ×÷/var/run/netnsϵÄnet ns£¬¶ødockerĬÈϵÄnet nsÈ´·ÅÔÚ/var/run/docker/netnsÏ¡£ÉÏÃæµÄ²Ù×÷³É¹¦Ö´Ðкó£¬ÎÒÃǾͿÉÒÔͨ¹ýipÃüÁî²é¿´ºÍ¹ÜÀínet nsÁË£º

$ sudo ip netns
29170076ddf6
1-283b96845c
5ae976d9dc6a
1-da3d1b5fcb

ÎÒÃÇ¿´µ½ÔÚ101Ö÷»úÉÏ£¬ÓÐ4¸öÒѾ­½¨Á¢µÄnet ns¡£ÎÒÃǴ󵨲²âһϣ¬ÕâËĸönet ns·Ö±ðÊÇÁ½¸öcontainerµÄnet nsºÍÁ½¸öoverlay networkµÄnet ns¡£´ÓnetnsµÄID¸ñʽÒÔ¼°½áºÏÏÂÃæÃüÁîÊä³ö½á¹ûÖеÄnetwork idÀ´¿´£º

$ docker network ls
NETWORK ID NAME DRIVER
283b96845cbe   net2    overlay
da3d1b5fcb8e   net1    overlay
dd84da8e80bf   host    host
3295c22b22b8   docker_gwbridge    bridge
b96e2d8d4068   bridge    bridge
23749ee4292f   none    null

ÎÒÃÇ´óÖ¿ÉÒԲ²â³öÀ´£º

1-da3d1b5fcb ÊÇ net1µÄnet ns£»
1-283b96845cÊÇ net2µÄnet ns£»
29170076ddf6ºÍ5ae976d9dc6aÔò·ÖÊôÓÚÁ½¸öcontainerµÄnet ns¡£

ÓÉÓÚÎÒÃÇÒÔnet1ΪÀý£¬Òò´ËÏÂÃæÎÒÃǾÍÀ´·ÖÎönet1µÄnet ns ¨C 1-da3d1b5fcb¡£Í¨¹ýipÃüÁîÎÒÃÇ¿ÉÒԵõ½ÈçϽá¹û£º

$ sudo ip netns exec 1-da3d1b5fcb ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP
link/ether 06:b0:c6:93:25:f3 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::b80a:bfff:fecc:a1e0/64 scope link
valid_lft forever preferred_lft forever
7: vxlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN
link/ether ea:0c:e0:bc:19:c5 brd ff:ff:ff:ff:ff:ff
inet6 fe80::e80c:e0ff:febc:19c5/64 scope link
valid_lft forever preferred_lft forever
9: veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UP
link/ether 06:b0:c6:93:25:f3 brd ff:ff:ff:ff:ff:ff
inet6 fe80::4b0:c6ff:fe93:25f3/64 scope link
valid_lft forever preferred_lft forever $ sudo ip netns exec 1-da3d1b5fcb ip route
10.0.0.0/24 dev br0 proto kernel scope link src 10.0.0.1
$ sudo ip netns exec 1-da3d1b5fcb brctl show
bridge name bridge id STP enabled interfaces
br0 8000.06b0c69325f3 no veth2
vxlan1

¿´µ½br0¡¢veth2£¬ÎÒÃÇÐÄÀïÖÕÓÚÓÐÁ˵׶ùÁË¡£ÎÒÃDz²ânet1c1ÈÝÆ÷ÖеÄeth0Óëveth2ÊÇÒ»¸öveth pair£¬²¢ÇŽÓÔÚbr0ÉÏ£¬Í¨¹ýethtool²éÕÒvethÐòºÅµÄ¶ÔÓ¦¹ØÏµ¿ÉÒÔ֤ʵÕâµã£º

$ sudo docker attach net1c1
root@021f14bf3924:/# ethtool -S eth0
NIC statistics:
peer_ifindex: 9
101Ö÷»ú£º
$ sudo ip netns exec 1-da3d1b5fcb ip -d link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP
link/ether 06:b0:c6:93:25:f3 brd ff:ff:ff:ff:ff:ff
bridge
7: vxlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN
link/ether ea:0c:e0:bc:19:c5 brd ff:ff:ff:ff:ff:ff
vxlan
9: veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br0 state UP
link/ether 06:b0:c6:93:25:f3 brd ff:ff:ff:ff:ff:ff
veth

¿ÉÒÔ¿´µ½net1c1µÄeth0µÄpair peer indexΪ9£¬ÕýºÃÓënet ns 1-da3d1b5fcbÖеÄveth2µÄÐòºÅÒ»Ö¡£

ÄÇôvxlan1ÄØ£¿×¢ÒâÕâ¸övxlan1²¢·ÇÊÇvethÉ豸£¬ÔÚip -d linkÊä³öµÄÐÅÏ¢ÖУ¬ËüµÄÉ豸ÀàÐÍΪvxlan¡£Ç°ÃæËµ¹ýDockerµÄ¿ç¶àÖ÷»úÈÝÆ÷ÍøÂçÊÇ»ùÓÚvxlanµÄ£¬ÕâÀïµÄvxlan1¾ÍÊÇnet1Õâ¸öoverlay networkµÄÒ»¸ö VTEP£¬¼´VXLAN Tunnel End Point ¨C VXLANËíµÀ¶Ëµã¡£ËüÊÇVXLANÍøÂçµÄ±ßÔµÉ豸¡£VXLANµÄÏà¹Ø´¦Àí¶¼ÔÚVTEPÉϽøÐУ¬ÀýÈçʶ±ðÒÔÌ«ÍøÊý¾ÝÖ¡ËùÊôµÄVXLAN¡¢»ùÓÚ VXLAN¶ÔÊý¾ÝÖ¡½øÐжþ²ãת·¢¡¢·â×°/½â·â×°±¨Îĵȡ£

ÖÁ´Ë£¬ÎÒÃÇ¿ÉÒÔ´óÖ»­³öÒ»·ù¿ç¶àÖ÷»úÍøÂçµÄÔ­Àíͼ£º

Èç¹ûÔÚnet1c1ÖÐping net1c2£¬Êý¾Ý°üµÄÐÐ×ß·¾¶ÊÇÔõÑùµÄÄØ£¿

1¡¢net1c1(10.0.0.4)ÖÐping net1c2(10.0.0.5)£¬¸ù¾Ýnet1c1µÄ·ÓÉ±í£¬Êý¾Ý°ü¿Éͨ¹ýÖ±Á¬ÍøÂçµ½´ïnet1c2¡£ÓÚÊÇarpÇëÇó»ñÈ¡net1c2µÄMACµØÖ·£¨ÔÚvxlanÉϵÄarpÕâÀï²»ÏêÊöÁË£©£¬µÃµ½macµØÖ·ºó£¬·â°ü£¬´Óeth0·¢³ö£»

2¡¢eth0ÇŽÓÔÚnet ns 1-da3d1b5fcbÖеÄbr0ÉÏ£¬Õâ¸öbr0ÊǸöÍøÇÅ(½»»»»ú)ÐéÄâÉ豸£¬ÐèÒª½«À´×Ôeth0µÄ°üת·¢³öÈ¥£¬ÓÚÊǽ«°üת¸øÁËvxlanÉ豸£»Õâ¸ö¿ÉÒÔͨ¹ýarp -a¿´µ½Ò»Ð©¶ËÄߣº

$ sudo ip netns exec 1-da3d1b5fcb arp -a
? (10.0.0.5) at 02:42:0a:00:00:05 [ether] PERM on vxlan1

3¡¢vxlanÊǸöÌØÊâÉ豸£¬ÊÕµ½°üºó£¬ÓÉvxlanÉ豸´´½¨Ê±×¢²áµÄÉ豸´¦Àí³ÌÐò¶Ô°ü½øÐд¦Àí£¬¼´½øÐÐVXLAN·â°ü£¨ÕâÆÚ¼ä»á²éѯconsulÖд洢µÄnet1ÐÅÏ¢£©£¬½«ICMP°üÕûÌå×÷ΪUDP°üµÄpayload·â×°ÆðÀ´£¬²¢½«UDP°üͨ¹ýËÞÖ÷»úµÄeth0·¢ËͳöÈ¥¡£

4¡¢71ËÞÖ÷»úÊÕµ½UDP°üºó£¬·¢ÏÖÊÇVXLAN°ü£¬¸ù¾ÝVXLAN°üÖеÄÏà¹ØÐÅÏ¢£¨±ÈÈçVxlan Network Identifier£¬VNI=256)ÕÒµ½vxlanÉ豸£¬²¢×ª¸ø¸ÃvxlanÉ豸´¦Àí¡£vxlanÉ豸µÄ´¦Àí³ÌÐò½øÐнâ°ü£¬²¢½«UDPÖеÄpayloadÈ¡³ö£¬ÕûÌåͨ¹ýbr0ת¸øveth¿Ú£¬net1c2´Óeth0ÊÕµ½ICMPÊý¾Ý°ü£¬»Ø¸´icmp reply¡£

ÎÒÃÇ¿ÉÒÔͨ¹ýwiresharkץȡÏà¹Øvxlan°ü£¬¸ß°æ±¾wiresharkÄÚÖÃVXLANЭÒé·ÖÎöÆ÷£¬¿ÉÒÔÖ±½Óʶ±ðºÍչʾVXLAN°ü£¬ÕâÀï°²×°µÄÊÇ2.0.1°æ±¾£¨×¢Ò⣺һЩµÍ°æ±¾wireshark²»Ö§³ÖVXLAN·ÖÎöÆ÷£¬±ÈÈç1.6.7°æ±¾£©£º

¹ØÓÚVXLANЭÒéµÄϸ½Ú£¬¹ýÓÚ¸´ÔÓ£¬ÔÚºóÐøµÄÎÄÕÂÖÐmaybe»áÓнøÒ»²½Àí½â¡£

 

   
4631 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤