ååã®èšäºã§ã DockerãLinuxä»®æ³ã€ã³ã¿ãŒãã§ãŒã¹ãšããªããžã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠãããªããžãããã¯ãŒã¯çµç±ã§ã³ã³ãããŒéã®æ¥ç¶ã確ç«ããæ¹æ³ã«ã€ããŠèª¬æããŸããã ä»åã¯ãDockerãvxlanãã¯ãããžãŒã䜿çšããŠswarmã¯ã©ã¹ã¿ãŒã§äœ¿çšããããªãŒããŒã¬ã€ãããã¯ãŒã¯ãäœæããæ¹æ³ãšããã®æ§æã確èªããã³æ€æ»ã§ããå Žæã«ã€ããŠèª¬æããŸãã ãŸããããŸããŸãªã¿ã€ãã®ãããã¯ãŒã¯ãã矀ãã¯ã©ã¹ã¿ãŒã§å®è¡ãããŠããã³ã³ãããŒã®ããŸããŸãªéä¿¡åé¡ãã©ã®ããã«è§£æ±ºãããã«ã€ããŠã説æããŸãã
èªè ã¯ã矀ãã¯ã©ã¹ã¿ãŒããããã€ããDocker Swarmã§ãµãŒãã¹ãå®è¡ããæ¹æ³ããã§ã«ç¥ã£ãŠãããšæããŸãã ãŸãããã®èšäºã®æåŸã«ãæçšãªãªãœãŒã¹ãžã®ãªã³ã¯ãæäŸããŸãããã®ãªã³ã¯ã䜿çšããŠãäž»é¡ã詳现ã«ç 究ããããã§èª¬æãããããã¯ã®ã³ã³ããã¹ããç解ã§ããŸãã ç¹°ãè¿ããŸãããç§ã¯ã³ã¡ã³ãã§ããªãã®æèŠãåŸ ã£ãŠããŸãã
ç®æ¬¡
Docker Swarmããã³ãªãŒããŒã¬ã€ãããã¯ãŒã¯
ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã¯ãã³ã³ããã®äœ¿çšããä»®æ³ãããã¯ãŒã¯ãDockerãå®è¡ããŠããè€æ°ã®ç©çãã¹ãã«æ¥ç¶ããã¯ã©ã¹ã¿ãŒïŒDocker SwarmïŒã®ã³ã³ããã¹ãã§äœ¿çšãããŸãã ïŒãµãŒãã¹ã®äžéšãšããŠïŒswarmã¯ã©ã¹ã¿ãŒã§ã³ã³ãããŒãèµ·åãããšãããã©ã«ãã§å€ãã®ãããã¯ãŒã¯ãåå ãããããããç°ãªãéä¿¡èŠä»¶ã«å¯Ÿå¿ããŸãã
ããšãã°ãããã«ãŒã¹ãŠã©ãŒã ã¯ã©ã¹ã¿ãŒã®3ã€ã®ããŒãããããŸãã
ãŸããmy-overlay-networkãšãããªãŒããŒã¬ã€ãããã¯ãŒã¯ãäœæããŸãã
次ã«ãã³ã³ããã䜿çšããŠãµãŒãã¹ãéå§ããŸããã³ã³ããã§ã¯ãç°¡åãªWebãµãŒããŒãèµ·åãããå€éšã®ããŒã8080ãåç §ããŸãã ãã®ãµãŒãã¹ã«ã¯3ã€ã®ã¬ããªã«ãããã1ã€ã®ãããã¯ãŒã¯ïŒmy-overlay-networkïŒã®ã¿ã«é¢é£ä»ããããŠããããšã«æ³šæããŠãã ããã
å®è¡äžã®ã³ã³ããã§äœ¿çšå¯èœãªãã¹ãŠã®ã€ã³ã¿ãŒãã§ã€ã¹ããªã¹ããããšã3ã«ãªããŸããåæã«ã1ã€ã®ãã¹ãã§ã³ã³ãããå®è¡ãããšã1ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ã¿ãæåŸ ã§ããŸãã
ã³ã³ããã¯ãeth2ãä»ããŠmy-overlay-network
æ¥ç¶ãããŸããããã¯IPã¢ãã¬ã¹ã§ç解ã§ããŸãã eth0ãšeth1ã¯ä»ã®ãããã¯ãŒã¯ã«æ¥ç¶ãããŠããŸãã docker network ls
ãå®è¡ãããšãè¿œå ããã2ã€ã®è¿œå ãããã¯ãŒã¯ãèŠãããšãã§ããŸãïŒ docker_gwbridge
ãšingress
ãããã³ãµããããã®ã¢ãã¬ã¹ã«ãã£ãŠãããããeth0ãšeth1ã«ãã€ã³ããããŠããããšãããããŸãã
ãªãŒããŒã¬ã€
ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã¯ãã³ã³ãããswarmã¯ã©ã¹ã¿ãŒå ã®ç°ãªããã¹ãã§äœ¿çšã§ãããµãããããäœæããŸãã ç°ãªãç©çãã¹ãäžã®ã³ã³ããã¯ããªãŒããŒã¬ã€ãããã¯ãŒã¯ãä»ããŠããŒã¿ã亀æã§ããŸãïŒãã¹ãŠãåããããã¯ãŒã¯ã«æ¥ç¶ãããŠããå ŽåïŒã
ããšãã°ãèµ·åããWebã¢ããªã±ãŒã·ã§ã³ã®å Žåãswarmã¯ã©ã¹ã¿ãŒå ã®åãã¹ãã«1ã€ã®ã³ã³ãããŒã衚瀺ã§ããŸãã
ifconfig eth2
ã䜿çšããŠãåã³ã³ãããŒã®ãªãŒããŒã¬ã€IPã¢ãã¬ã¹ãååŸã§ããŸãïŒeth2ã¯ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã«æ¥ç¶ãããã€ã³ã¿ãŒãã§ã€ã¹ã§ãïŒã
swarm01ã®å ŽåïŒ
次ã«ãswarm02ã®ã³ã³ãããã10.10.10.5ïŒswarm01ã®ã³ã³ããã®IPïŒã«pingã§ããã¯ãã§ãã
vxlan
ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã¯ãã¬ã€ã€ãŒ2ãã±ãããã¬ã€ã€ãŒ4ãã±ããïŒUDP / IPïŒã«ã«ãã»ã«åããvxlanãã¯ãããžãŒã䜿çšããŸãã ãã®ã¢ã¯ã·ã§ã³ã«ãããDockerã¯åããµããããå ã«ãããã¹ãéã®æ¢åã®æ¥ç¶ã®äžã«ä»®æ³ãããã¯ãŒã¯ãäœæããŸãã ãã®ä»®æ³ãããã¯ãŒã¯ã®äžéšã§ãããã€ã³ãã¯ãã¹ã€ãããä»ããŠæ¥ç¶ãããŠãããã®ããã«äºããæ¢ããã¡ã€ã³ã®ç©çãããã¯ãŒã¯ã®ããã€ã¹ãæ°ã«ããŸããã
ãã®ããã»ã¹ã®å®éã®åäœã確èªããã«ã¯ããªãŒããŒã¬ã€ãããã¯ãŒã¯ã®äžéšã§ãããã¹ãäžã®ãã©ãã£ãã¯ããã£ããã£ããŸãã æåŸã®äŸã§ã¯ãswarm01ãŸãã¯swarm02ã§ãã©ãã£ãã¯ããã£ããã£ãããšããããã§å®è¡ãããŠããã³ã³ããéã®icmpãã©ãã£ãã¯ãæããã«ãªããŸãïŒvxlanã¯udpããŒã4789ã䜿çšããŸãïŒã
ãã®äŸã§ã¯ãããã±ãŒãžã«2ã€ã®ã¬ã€ã€ãŒã衚瀺ãããŸãã 1ã€ç®ã¯ããŒã4789ã®ãã¹ãéã®udp vxlanãã³ãã«ãã©ãã£ãã¯ã§ã2ã€ç®ã¯ã³ã³ããIPã¢ãã¬ã¹ãæã€icmpãã©ãã£ãã¯ã§ãã
æå·å
ãã®äŸã®ãã©ãã£ãã¯ãã£ããã£ã¯ããã¹ãéã®ãã©ãã£ãã¯ãèŠããšãã³ã³ããå
ã®ãã©ãã£ãã¯ããªãŒããŒã¬ã€ãããã¯ãŒã¯ãééããããšã瀺ããŠããŸãã ãã®ãããDockerã«ã¯æå·åãªãã·ã§ã³ããããŸãã ãããã¯ãŒã¯ã®äœææã«--opt encrypted
è¿œå ããã ãã§ãvxlanãã³ãã«ã®èªåIPSecæå·åãéå§ã§ããŸãã
åããã¹ããå®è¡ããæå·åããããªãŒããŒã¬ã€ãããã¯ãŒã¯ã䜿çšããŠããå Žåããã¹ãéã§æå·åããããã±ããã®ã¿ã衚瀺ã§ããŸãã
vxlanãã³ãã«ã€ã³ã¿ãŒãã§ã€ã¹ã®æ€æ»
ããªããžãããã¯ãŒã¯ãšåæ§ã«ãDockerã¯ãªãŒããŒã¬ã€ãããã¯ãŒã¯ããšã«ããªããžã€ã³ã¿ãŒãã§ã€ã¹ãäœæãããã¹ãéã§vxlanãã³ãã«éä¿¡ãå®è¡ããä»®æ³ãã³ãã«ã€ã³ã¿ãŒãã§ã€ã¹ãæ¥ç¶ããŸãã ãã ãããããã®ãã³ãã«ã€ã³ã¿ãŒãã§ãŒã¹ïŒbridgeããã³vxlanïŒã¯ããã³ãã«ãã¹ãäžã«çŽæ¥äœæãããŸããã ãããã¯ãäœæãããåãªãŒããŒã¬ã€ãããã¯ãŒã¯ã«å¯ŸããŠDockerãèµ·åããããŸããŸãªã³ã³ãããŒã«é 眮ãããŸãã
ãããã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®éã«æ€æ»ããã«ã¯ã nsenter
ã䜿çšããŠããã³ãã«ãšä»®æ³ã€ã³ã¿ãŒãã§ã€ã¹ã管çããã³ã³ããã®ãããã¯ãŒã¯å
ã§ã³ãã³ããå®è¡ããå¿
èŠããããŸãã ãã®ã³ãã³ãã¯ããªãŒããŒã¬ã€ãããã¯ãŒã¯ã«åå ããã³ã³ãããæã€ãã¹ãã§å®è¡ããå¿
èŠããããŸãã
ãŸãã ãã®èª¬æã®æ瀺ã«åŸã£ãŠããã¹ãäžã®/etc/systemd/system/multi-user.target.wants/docker.service
ãç·šéãã MountFlags=slave
ãã³ã¡ã³ãã¢ãŠãããå¿
èŠããããŸãã
æåŸã«ãvethã€ã³ã¿ãŒãã§ã€ã¹ã§ãã©ãã£ãã¯ã®ãã£ããã£ãéå§ãããšãã³ã³ãããåºããã©ãã£ãã¯ã衚瀺ãããŸãããvxlanãã³ãã«ã«éä¿¡ãããåã§ãïŒäžèšã®pingã¯åŒãç¶ãæ©èœããŸãïŒã
é²å ¥
ã³ã³ãããæ¥ç¶ããã2çªç®ã®ãããã¯ãŒã¯ã¯ãã€ã³ã°ã¬ã¹ãããã¯ãŒã¯ã§ãã ããã¯ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã§ãããswarmã¯ã©ã¹ã¿ãŒã®èµ·åçŽåŸã«ããã©ã«ãã§ã€ã³ã¹ããŒã«ãããŸãã ãã®ãããã¯ãŒã¯ã¯ãå€çããã®ã³ã³ãããšç¢ºç«ãããéä¿¡ãæ åœããŸãã ãŸããã¹ãŠã©ãŒã ã¯ã©ã¹ã¿ãŒã«ãã£ãŠæäŸãããè² è·åæ£ãè¡ãããŸãã
è² è·åæ£ã¯ã³ã³ããå ã®IPVSã«ãã£ãŠå®è¡ãããDocker swarmã¯ããã©ã«ãã§å®è¡ãããŸãã ãã®ã³ã³ãããã€ã³ã°ã¬ã¹ãããã¯ãŒã¯ã«æ¥ç¶ãããŠããããšãããããŸãïŒä»¥åãšåãWebãµãŒãã¹ã䜿çšããŸããïŒã³ã³ããã®ããŒã80ã«æ¥ç¶ãããŠããããŒã8080ãå ¬éããŠããŸãïŒã
ãŸãããã¹ããèŠãŠãã ããâ swarmã¯ã©ã¹ã¿ãŒã«åå ããŠãããã¹ãã§ïŒ
ããã§ã¯ãããŒã8080å®ãŠã®ãã©ãã£ãã¯ãã¢ãã¬ã¹172.19.0.2ã«ãªãã€ã¬ã¯ããããã«ãŒã«ã瀺ããŠããŸãã ãã®ã¢ãã¬ã¹ã¯ingress-sboxã³ã³ãããŒã«å±ããŸããã€ã³ã¿ãŒãã§ãŒã¹ãæ€æ»ãããšã次ã®ããã«ãªããŸãã
Dockerã¯iptablesãã³ã°ã«ã«ãŒã«ã䜿çšããŠãããŒã8080ã®ãã±ããã«ç¹å®ã®çªå·ãå²ãåœãŠãŸããIPVSã¯ãã®çªå·ã䜿çšããŠãé©åãªã³ã³ããã®è² è·ãåæ£ããŸãã
Docker swarmãiptablesãšIPVSã䜿çšããŠã³ã³ãããŒã®è² è·ãåæ£ããæ¹æ³ã«ã€ããŠã¯ã Deep Dive into Docker 1.12 Networkingãããªã§ããã«è©³ãã調ã¹ãããšãã§ããŸãã
Docker_gwbridge
æåŸã«ãdocker_gwbridgeãããã¯ãŒã¯ã«ã€ããŠèª¬æããŸãã ããã¯ãdocker_gwbridgeãšåŒã°ãã察å¿ããã€ã³ã¿ãŒãã§ãŒã¹ãæã€ããªããžãããã¯ãŒã¯ã§ãããswarmã¯ã©ã¹ã¿ãŒã®åãã¹ãäžã«äœæãããŸãã docker_gwbridgeãããã¯ãŒã¯ã¯ã矀ãã¯ã©ã¹ã¿ãŒã®ã³ã³ãããŒããã®ãã©ãã£ãã¯ãå€éšã«æ¥ç¶ããŸãã ããšãã°ãGoogleã«ãªã¯ãšã¹ããéä¿¡ãããšããã®ãããªãã©ãã£ãã¯ãçºçããŸãã
以åã®èšäºã§ããªããžãããã¯ãŒã¯ã詳现ã«æ€èšãããããããã§ã¯è©³ãã説æããŸããã
ãããã«
swarmã¯ã©ã¹ã¿ãŒã§å®è¡ãããŠããã³ã³ããã¯ãããã©ã«ãã§3ã€ä»¥äžã®ãããã¯ãŒã¯ã«æ¥ç¶ã§ããŸãã æåã®ãããã¯ãŒã¯ã§ããdocker_gwbridgeã¯ãã³ã³ãããå€éšãšéä¿¡ã§ããããã«ããŸãã å ¥åãããã¯ãŒã¯ã¯ãå€éšããã®çä¿¡æ¥ç¶ã確ç«ããããã«ã®ã¿å¿ èŠã§ãã æåŸã«ããããã¯ãŒã¯ã¯ãªãŒããŒã¬ã€ã§ãããŠãŒã¶ãŒèªèº«ãäœæããã³ã³ããã«æ¥ç¶ã§ããŸãã ãããã®ãããã¯ãŒã¯ã¯ãïŒç°ãªãç©çãã¹ãã§å®è¡ãããŠããå Žåã§ãïŒããŒã¿ãçŽæ¥äº€æã§ããåäžãããã¯ãŒã¯ã®ã³ã³ããã®å ±éãµãããããšããŠæ©èœããŸãã
swarmã¯ã©ã¹ã¿ãŒäžã«ããã©ã«ãã§äœæãããããŸããŸãªãããã¯ãŒã¯ã®ã¹ããŒã¹ããããŸãã ãããã®ã¹ããŒã¹ã¯ããªãŒããŒã¬ã€ãããã¯ãŒã¯ã®vxlanãã³ãã«ãšã€ã³ããŠã³ãéä¿¡ã®è² è·åæ£ã«ãŒã«ã®ç®¡çã«åœ¹ç«ã¡ãŸãã