±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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»áÓнøÒ»²½Àí½â¡£
|