±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚdockerinfo.net£¬½éÉÜÁËDockerÈÝÆ÷ƽ̨ÖеĿçÖ÷»úͨÐÅ·½°¸£¬°üÀ¨libnetwork£¬calicoµÈ·½°¸£¬²¢¶Ôÿ¸ö·½°¸½øÐÐÁ˲ûÊö¡£ |
|
±³¾°
Docker ÈÝÆ÷¼¼ÊõÕýÔÚ±»ÆóÒµÓ¦ÓÃÔÚÔ½À´Ô½¶àµÄÁìÓòÖУ¬±ÈÈç¿ìËÙ²¿Êð»·¾³¡¢¼ò»¯»ù´¡ÉèÊ©µÄÅäÖÃÁ÷³ÌµÈµÈ¡£µ±Ä㿪ʼÔÚÕæÊµµÄÉú²ú»·¾³Ê¹ÓÃ
DockerÈÝÆ÷È¥²¿ÊðÓ¦ÓÃϵͳʱ£¬Äã¿ÉÄÜÐèÒªÓõ½¶à¸öÈÝÆ÷²¿ÊðÒ»Ì׸´ÔӵĶà²ãÓ¦ÓÃϵͳ£¬ÆäÖÐÿ¸öÈÝÆ÷²¿ÊðÒ»¸öÌØ¶¨µÄÓ¦ÓÃϵͳ¡£´Ëʱ¿ÉÄܾͻáÓöµ½ÈçÏÂÎÊÌ⣺Óжą̀ËÞÖ÷»ú£¬ÎÒÃÇÊÂÏȲ»ÖªµÀ»áÔÚÄĄ̈ËÞÖ÷»úÉÏ´´½¨ÈÝÆ÷£¬ÈçºÎ±£Ö¤ÔÚÕâЩËÞÖ÷»úÉÏ´´½¨µÄÈÝÆ÷ÃÇ¿ÉÒÔ»¥ÏàÁªÍ¨£¿
±¾ÎĽéÉÜÁËDockerÈÝÆ÷ƽ̨ÖеĿçÖ÷»úͨÐÅ·½°¸£¬°üÀ¨libnetwork£¬calico£¬weave£¬flannel£¬Kuryr£¬²¢¶Ô¸÷¸ö·½°¸µÄÔÀí½øÐвûÊö£¬×îºó¶ÔCalico£¬Weave£¬Flannel£¬overlay(libnetwork)ËÄÖÖ³£¼ûÍøÂçģʽ½øÐÐÁ˶Աȣ¬Îª²âÊÔºÍÉú²ú»·¾³µÄ·½°¸Ñ¡ÐÍÌṩ²Î¿¼¡£
Ò»¡¢Libnetwork
LibnetworkÊÇ´Ó1.6°æ±¾¿ªÊ¼½«dockerÍøÂ粿·Ö³éÀë³öÀ´³ÉΪһ¸öµ¥¶ÀµÄÏîÄ¿£¬libnetwork
µÄÄ¿±êÊǶ¨ÒåÒ»¸ö½¡×³µÄÈÝÆ÷ÍøÂçÄ£ÐÍ£¨Container Network Model£©£¬Ìṩһ¸öÒ»Öµıà³Ì½Ó¿ÚºÍÓ¦ÓóÌÐòµÄÍøÂç³éÏó¡£´Ó1.9°æ±¾¿ªÊ¼£¬dockerÒѾʵÏÖÁË»ùÓÚLibnetworkºÍlibkv¿âµÄÍøÂçģʽ¡ª¶àÖ÷»úµÄOverlayÍøÂç¡£
1¡¢Ä£ÐÍ
libnetwork ÒýÈëÁËÈÝÆ÷ÍøÂçÄ£ÐÍ£¨CNM£©µÄ¸ÅÄCNM ¶¨ÒåÁËÈý¸öеÄÊõÓ·Ö±ðÊÇÍøÂçɳÏä¡¢Endpoint¡¢Network¡£

1£©Sandbox¡£Sandbox°üº¬ÈÝÆ÷ÍøÂçÕ»µÄÅäÖ㬰üÀ¨ÈÝÆ÷½Ó¿Ú£¬Â·ÓÉ±í£¬DNSÅäÖõȵĹÜÀí¡£
linux network namespaceÊdz£¼ûµÄÒ»ÖÖsandboxµÄʵÏÖ¡£SandboxÖаüº¬ÖÚ¶àÍøÂçÖеÄÈô¸ÉEndpoint¡£
2£©Endpoint¡£NeutronÖкÍEndpointÏà¶ÔµÄ¸ÅÄîÓ¦¸ÃÊÇVNIC£¬Ò²¾ÍÊÇÐéÄâ»úµÄÐéÄâÍø¿¨£¨Ò²¿ÉÒÔ¿´³ÉÊÇVIF£©¡£EndpointµÄ³£¼ûʵÏÖ°üÀ¨veth
pair¡¢OpenvswitchµÄinternal port¡£µ±SandboxÒªºÍÍâ½çͨÐŵÄʱºò¾ÍÊÇͨ¹ýEndpointÁ¬½Óµ½Íâ½çµÄ£¬×î¼òµ¥µÄÇé¿ö¾ÍÊÇÁ¬½Óµ½Ò»¸öBridgeÉÏ¡£
3£©Network¡£NetworkÊÇÒ»×é¿ÉÒÔ»¥ÏàͨÐŵÄEndpoints¼¯ºÏ£¬³£¼ûµÄʵÏÖ°üÀ¨linux
bridge,vlanµÈ¡£libnetworkÖеÄNetwork´ó¼Ò¿ÉÒÔÈÏΪÊÇNeutronÖеÄnetwork¼´¿É£¬¸ü¼ÓÌùÇеãµÄ»°¿ÉÒÔÈÏΪÊÇNeutronÖеÄÒ»¸öÓµÓÐÒ»¸ösubnetµÄnetwork¡£
2¡¢½á¹¹Ìå¶ÔÏó
ÏÂÃæÎÒÃÇ¿´ÏÂlibnetworkΪÁ˶ÔÍâÌṩÕ⼸¸ö¸ÅÄî¶ø±©Â¶µÄ±à³Ì½á¹¹Ì壺
1£©NetworkController¡£ÓÃÓÚ»ñȡһ¸ö¿ØÖÆÆ÷£¬¿ÉÒÔÈÏΪͨ¹ýÕâ¸ö¿ØÖÆÆ÷¿ÉÒÔ¶Ô½ÓÏÂÀ´µÄËùÓÐÍøÂç²Ù×÷½øÐвÙ×÷¡£NeutronÖв¢Ã»ÓÐÕâôһ¸ö¸ÅÄÒòΪNeutronÖеÄÍøÂçÊÇÓÉagentͨ¹ýÂÖѯ»òÕßÏûÏ¢µÄ·½Ê½À´¼ä½Ó²Ù×÷µÄ£¬¶ø²»ÊÇÓÉÓû§Ê¹ÓÃdockerÃüÁîÖ±½ÓÔÚ±¾»ú½øÐвÙ×÷¡£
2£©Driver¡£ÕâÀïµÄDriverÀàËÆÓÚNeutronÖеÄcore_plugin»òÕßÊÇml2ϵĸ÷ÖÖdriver£¬±íʾµÄÊǵײãÍøÂçµÄʵÏÖ·½·¨¡£±ÈÈçÓÐbridgeµÄdriver£¬Ò²ÓлùÓÚvxlanµÄoverlayµÄdriverµÈµÈ¡£Õâ¸ö¸ÅÄîºÍNeutronÖеÄdriver¸ÅÄî»ù±¾ÉÏÊÇÒ»ÑùµÄ¡£
3£©Network¡£ÕâÀïµÄNetwork½á¹¹Ìå¾ÍÊǶÔÓ¦µÄÉÏÃæCNMÖеÄNetwork£¬±íʾ½¨Á¢ÁËÒ»¸öÍøÂ硣ͨ¹ýÕâ¸ö½á¹¹Ìå¿ÉÒÔ¶Ô½¨Á¢µÄÍøÂç½øÐвÙ×÷¡£
4£©Endpoint¡£ÕâÀïµÄEndpoint½á¹¹Ìå¾ÍÊǶÔÓ¦ÉÏÃæCNMÖеÄEndpoint£¬±íʾ½¨Á¢ÁËÒ»¸öVNIC»òÕßÊÇVIF¡£Í¨¹ýÕâ¸ö½á¹¹Ìå¿ÉÒÔ¶ÔEndpoint½øÐвÙ×÷¡£
5£©Sandbox¡£ÕâÀïµÄSandbox½á¹¹Ìå¾ÍÊǶÔÓ¦ÉÏÃæCNMÖеÄSandbox£¬±íʾ½¨Á¢ÁËÒ»¸ö¶ÀÁ¢µÄÃû×ֿռ䡣¿ÉÒÔÀà±ÈNovaµÄÐéÄâ»ú»òÕßÊÇKubernetesµÄPod£¬Òà»òÊǶÀÁ¢µÄDockerÈÝÆ÷¡£
3¡¢APIʹÓò½Öè
½Ó×ÅÎÒÃÇ¿´ÏÂÒ»°ãʹÓÃlibnetworkµÄ·½·¨£¬¾ßÌåµÄ²½ÖèÒ»°ãÊÇÏÂÃæÕâÑùµÄ£º
£¨1£©»ñȡһ¸öNetworkController¶ÔÏóÓÃÓÚ½øÐÐÏÂÃæµÄ²Ù×÷¡£»ñÈ¡¶ÔÏóµÄʱºòÖ¸¶¨Driver¡£
£¨2£©Í¨¹ýNetworkController¶ÔÏóµÄNewNetwork()½¨Á¢Ò»¸öÍøÂç¡£ÕâÀï×î¼òµ¥µÄÀí½â¾ÍÊÇÏÖÔÚÎÒÃÇÓÐÁËÒ»¸öbridgeÁË¡£
£¨3£©Í¨¹ýÍøÂçµÄCreateEndpoint()ÔÚÕâ¸öÍøÂçÉϽ¨Á¢Endpoint¡£ÕâÀï×î¼òµ¥µÄÀí½â¾ÍÊÇÿ½¨Á¢Ò»¸öEndpoint£¬ÎÒÃÇÉÏÃæ½¨Á¢µÄbridgeÉϾͻá¶à³öÒ»¸öVIF¿ÚµÈ×ÅÐéÄâ»ú»òÕßSandboxÁ¬ÉÏÀ´¡£¼ÙÉèÕâÀïʹÓõÄÊÇveth£¬ÔòvethµÄһͷĿǰ½ÓÔÚÁËbridgeÖУ¬Áíһͷ»¹±©Â¶ÔÚÍâÃæ¡£
£¨4£© µ÷ÓÃÉÏÃæ½¨Á¢µÄEndpointµÄJoin·½·¨£¬ÌṩÈÝÆ÷ÐÅÏ¢£¬ÓÚÊÇlibnetworkµÄ´úÂë¾Í»á½¨Á¢Ò»¸öSandbox¶ÔÏó£¨Ò»°ãÕâÀïµÄSandbox¾ÍÊÇÈÝÆ÷µÄnamespace£¬ËùÒÔ²»»áÖØ¸´½¨Á¢£©£¬È»ºó½«µÚÈý²½½¨Á¢µÄvethµÄһͷ½ÓÈëµ½Õâ¸öSandboxÖУ¬Ò²¾ÍÊǽ«Æä·Åµ½SandboxµÄnamespaceÖС£
£¨5£©µ±SandboxµÄÉúÃüÖÜÆÚ½áÊøÊ±£¬µ÷ÓÃEndpointµÄLeave·½·¨Ê¹Æä´ÓÕâ¸öNetworkÖнâ°ó¡£¼òµ¥µÄ˵¾ÍÊǽ«veth´ÓSandboxµÄnamespaceÖÐÄóöÀ´»Øµ½ÎïÀí»úÉÏ¡£
£¨6£©Èç¹ûÒ»¸öEndpointÎÞÓÃÁË£¬Ôò¿ÉÒÔµ÷ÓÃDelete·½·¨É¾³ý¡£
£¨7£©Èç¹ûÒ»¸öNetworkÎÞÓÃÁË£¬Ôò¿ÉÒÔµ÷ÓÃDelete·½·¨É¾³ý¡£
4¡¢driverÀàÐÍ
°üº¬ËÄÖÖÀàÐ͵Ädriver°ü£º
Host£ºÖ÷»úÍøÂ磬ֻÓÃÕâÖÖÍøÂçµÄÈÝÆ÷»áʹÓÃÖ÷»úµÄÍøÂ磬ÕâÖÖÍøÂç¶ÔÍâ½çÊÇÍêÈ«¿ª·ÅµÄ£¬Äܹ»·ÃÎʵ½Ö÷»ú£¬¾ÍÄÜ·ÃÎʵ½ÈÝÆ÷¡£
Null£ºÎÞÍøÂ磬ʹÓÃÕâÖÖÍøÂçµÄÈÝÆ÷»áÍêÈ«¸ôÀë¡£
Bridge£ºÇŽÓÍøÂ磬³ý·Ç´´½¨ÈÝÆ÷µÄʱºòÖ¸¶¨ÍøÂ磬²»È»ÈÝÆ÷¾Í»áĬÈϵÄʹÓÃÇŽÓÍøÂç¡£ÊôÓÚÕâ¸öÍøÂçµÄÈÝÆ÷Ö®¼ä¿ÉÒÔÏ໥ͨÐÅ£¬²»¹ýÍâ½çÏëÒª·ÃÎʵ½Õâ¸öÍøÂçµÄÈÝÆ÷ÄØ£¬ÐèʹÓÃÇŽÓÍøÂ磬ÓеãÏñÖ÷»úºÍÈÝÆ÷Ö®¼äµÄÒ»×ùÇÅ£¬¶ÔÈÝÆ÷ÓÐÒ»µã¸ôÀë×÷Óá£
Overlay£ºOverlayÇý¶¯¿ÉÒÔʵÏÖͨ¹ývxlanµÈÖØµþÍøÂç·â×°¼¼Êõ¿çÔ½¶à¸öÖ÷»úµÄÍøÂ磬ĿǰDockerÒѾ×Ô´ø¸ÃÇý¶¯¡£
Remote£ºRemoteÇý¶¯°ü²»ÌṩÇý¶¯£¬µ«ÊÇÌṩһ¸öÖ§³ÖÔ¶¶Ë´«ÊäµÄ·½Ê½£¬Çý¶¯µÄʵÏÖ¿ÉÒÔÓÉÄã×Ô¼ºÏ²»¶µÄÓïÑÔÀ´ÊµÏÖ¡£
¶þ¡¢Calico
Project Calico ÊÇ´¿Èý²ãµÄ SDN ʵÏÖ£¬Ã»ÓÐʹÓÃÖØÔØÍøÂ磬Ëü»ùÓÚ BPG ÐÒéºÍ
Linux ×Ô¼ºµÄ·ÓÉת·¢»úÖÆ£¬²»ÒÀÀµÌØÊâÓ²¼þ£¬Ã»ÓÐʹÓà NAT »ò Tunnel µÈ¼¼Êõ¡£Äܹ»·½±ãµÄ²¿ÊðÔÚÎïÀí·þÎñÆ÷¡¢ÐéÄâ»ú£¨Èç
OpenStack£©»òÕßÈÝÆ÷»·¾³Ï¡£Í¬Ê±Ëü×Ô´øµÄ»ùÓÚ Iptables µÄ ACL ¹ÜÀí×é¼þ·Ç³£Áé»î£¬Äܹ»Âú×ã±È½Ï¸´Ôӵݲȫ¸ôÀëÐèÇó¡£
ËùÓеÄÈÝÆ÷¾ùͨ¹ýÅäÖÃʹÓÃcalico-nodeʵÏÖÍøÂ绥ͨ¼°·ÃÎÊÒÔÌ«Íø¡£
»ù±¾ÔÀí

ÍØÆËͼ
Ä£¿é¼äµÄ¹ØÏµ£¨¿ØÖÆÆ½Ã棩£º

Calico°Ñÿ¸ö²Ù×÷ϵͳµÄÐÒéÕ»ÈÏΪÊÇÒ»¸ö·ÓÉÆ÷£¬È»ºó°ÑËùÓеÄÈÝÆ÷ÈÏΪÊÇÁ¬ÔÚÕâ¸ö·ÓÉÆ÷ÉϵÄÍøÂçÖÕ¶Ë£¬ÔÚ·ÓÉÆ÷Ö®¼äÅܱê×¼µÄ·ÓÉÐÒ顪¡ªBGPµÄÐÒ飬ȻºóÈÃËüÃÇ×Ô¼ºÈ¥Ñ§Ï°Õâ¸öÍøÂçÍØÆË¸ÃÈçºÎת·¢¡£ËùÒÔCalico·½°¸ÆäʵÊÇÒ»¸ö´¿Èý²ãµÄ·½°¸£¬Ò²¾ÍÊÇ˵ÈÃÿ̨»úÆ÷µÄÐÒéÕ»µÄÈý²ãȥȷ±£Á½¸öÈÝÆ÷£¬¿çÖ÷»úÈÝÆ÷Ö®¼äµÄÈý²ãÁ¬Í¨ÐÔ¡£¶ÔÓÚ¿ØÖÆÆ½Ã棬Ëüÿ¸ö½ÚµãÉÏ»áÔËÐÐÁ½¸öÖ÷ÒªµÄ³ÌÐò£¬Ò»¸öÊÇFelix£¬Ëü»á¼àÌýECTDÖÐÐĵĴ洢£¬´ÓËü»ñȡʼþ£¬±ÈÈç˵Óû§ÔÚÕą̂»úÆ÷ÉϼÓÁËÒ»¸öIP£¬»òÕßÊÇ·ÖÅäÁËÒ»¸öÈÝÆ÷µÈ¡£½Ó×Å»áÔÚÕą̂»úÆ÷ÉÏ´´½¨³öÒ»¸öÈÝÆ÷£¬²¢½«ÆäÍø¿¨¡¢IP¡¢MAC¶¼ÉèÖúã¬È»ºóÔÚÄں˵Ä·ÓɱíÀïÃæÐ´Ò»Ìõ£¬×¢Ã÷Õâ¸öIPÓ¦¸Ãµ½ÕâÕÅÍø¿¨¡£ÂÌÉ«²¿·ÖÊÇÒ»¸ö±ê×¼µÄ·ÓɳÌÐò£¬Ëü»á´ÓÄÚºËÀïÃæ»ñÈ¡ÄÄһЩIPµÄ·ÓÉ·¢ÉúÁ˱仯£¬È»ºóͨ¹ý±ê×¼BGPµÄ·ÓÉÐÒéÀ©É¢µ½Õû¸öÆäËûµÄËÞÖ÷»úÉÏ£¬ÈÃÍâ½ç¶¼ÖªµÀÕâ¸öIPÔÚÕâÀÄãÃÇ·ÓɵÄʱºòµÃµ½ÕâÀïÀ´¡£
ÓÉÓÚCalicoÊÇÒ»ÖÖ´¿Èý²ãµÄʵÏÖ£¬Òò´Ë¿ÉÒÔ±ÜÃâÓë¶þ²ã·½°¸Ïà¹ØµÄÊý¾Ý°ü·â×°µÄ²Ù×÷£¬ÖмäûÓÐÈκεÄNAT£¬Ã»ÓÐÈκεÄoverlay£¬ËùÒÔËüµÄת·¢Ð§ÂÊ¿ÉÄÜÊÇËùÓз½°¸ÖÐ×î¸ßµÄ£¬ÒòΪËüµÄ°üÖ±½Ó×ßÔÉúTCP/IPµÄÐÒéÕ»£¬ËüµÄ¸ôÀëÒ²ÒòΪÕâ¸öÕ»¶ø±äµÃºÃ×ö¡£ÒòΪTCP/IPµÄÐÒéÕ»ÌṩÁËÒ»ÕûÌ׵ķÀ»ðǽµÄ¹æÔò£¬ËùÒÔËü¿ÉÒÔͨ¹ýIPTABLESµÄ¹æÔò´ïµ½±È½Ï¸´ÔӵĸôÀëÂß¼¡£

CalicoÒÑÖªÎÊÌâ
£¨1£© Ö»Ö§³Ötcp,udp,icmp,icmpv6ÐÒ飬Èç¹ûÐèÒªÖ§³ÖÆäËûL4ÐÒ飬ÐèҪѡÔñÆäËûÍøÂçģʽ£»
£¨2£© ûÓжÔÊý¾Ý·¾¶½øÐмÓÃÜ£¬Òò´Ë¶ÔÓÚ²»ÐÅÈεÄÍøÂçÊDz»°²È«µÄ£»
£¨3£© ÔÚ¹«ÖÚÍøÂçÉÏÐèҪʹÓÃ-ipipÑ¡Ï¸ÃÑ¡Ïî²ÉÓÃIP-over-IPµÄЧÂʺܵͣ»
£¨4£© ͨ³£ ÅÜÔÚÒ»¸ö´ó¶þ²ãµÄÍøÂçÀ¶ÔÓÚ´ó¶þ²ãÍøÂçÆäʵ¾ÍÊÇûÓÐÈκÎÈý²ãµÄÍø¹Ø£¬ËùÓеĻúÆ÷¡¢ËÞÖ÷»ú¡¢ÎïÀí»úÔÚ¶þ²ãÊǿɴïµÄ£¬´ËʱÈκÎÒ»¸ö¶¼»áÓÐÒ»¶¨µÄÓ²¼þ·çÏÕ»áÈÃÕû¸ö´ó¶þ²ã̱»¾£»
£¨5£© CalicoÅÜÔÚÁËÒ»¸öÈý²ãÍø¹ØµÄÎïÀíÍøÂçÉÏʱ£¬ËüÐèÒª°ÑËùÓлúÆ÷ÉϵÄ·ÓÉÐÒéºÍÕû¸öÎïÀíÍøÂçÀïÃæµÄ·ÓÉÆ÷µÄÈý²ã·ÓÉÈ«²¿ÓÃBGP´òͨ¡£ÕâÆäʵ»á´øÀ´Ò»¸öÎÊÌ⣬ÕâÀïµÄÈÝÆ÷ÊýÁ¿¿ÉÄÜÊdzÉǧÉÏÍòµÄ£¬È»ºóÄãÈÃËùÓÐÎïÀíµÄ·ÓÉѧϰµ½ÕâЩ֪ʶ£¬Õâ»á¸øÎïÀí¼¯ÈºÀïµÄBGP·ÓÉ´øÀ´Ò»¶¨µÄѹÁ¦
Calico¼È¿ÉÒÔµ¥¶ÀÅäÖÃÒ²¿ÉÒÔ×÷Ϊdocker libnetworkµÄÒ»¸öÇý¶¯Ê¹Óá£
Èý¡¢Weave
ÆäÖÐWeaveÊÇÓÉZett.io¹«Ë¾¿ª·¢µÄ£¬ËüÄܹ»´´½¨Ò»¸öÐéÄâÍøÂ磬ÓÃÓÚÁ¬½Ó²¿ÊðÔÚ¶ą̀Ö÷»úÉϵÄDockerÈÝÆ÷£¬ÕâÑùÈÝÆ÷¾ÍÏñ±»½ÓÈëÁËͬһ¸öÍøÂç½»»»»ú£¬ÄÇЩʹÓÃÍøÂçµÄÓ¦ÓóÌÐò²»±ØÈ¥ÅäÖö˿ÚÓ³ÉäºÍÁ´½ÓµÈÐÅÏ¢¡£
ÍⲿÉ豸Äܹ»·ÃÎÊWeaveÍøÂçÉϵÄÓ¦ÓóÌÐòÈÝÆ÷ËùÌṩµÄ·þÎñ£¬Í¬Ê±ÒÑÓеÄÄÚ²¿ÏµÍ³Ò²Äܹ»±©Â¶µ½Ó¦ÓóÌÐòÈÝÆ÷ÉÏ¡£WeaveÄܹ»´©Í¸·À»ðǽ²¢ÔËÐÐÔÚ²¿·ÖÁ¬½ÓµÄÍøÂçÉÏ£¬ÁíÍ⣬WeaveµÄͨÐÅÖ§³Ö¼ÓÃÜ£¬ËùÒÔÓû§¿ÉÒÔ´ÓÒ»¸ö²»ÊÜÐÅÈεÄÍøÂçÁ¬½Óµ½Ö÷»ú¡£

WeaveʵÏÖÔÀí
Weave»áÔÚÖ÷»úÉÏ´´½¨Ò»¸öbridge,ÿһ¸öÈÝÆ÷ͨ¹ýveth pairÁ¬½Óµ½¸ÃbridgeÉÏ£¬Í¬Ê±bridgeÉÏÓиöWeave
routerµÄÈÝÆ÷ÓëÖ®Á¬½Ó£¬¸Ãrouter»áͨ¹ýÁ¬½ÓÔÚbridgeÉϵĽӿÚÀ´×¥È¡ÍøÂç°ü£¨¸Ã½Ó¿Ú¹¤×÷ÔÚPromiscuousģʽ£©£¬Ê¹ÓõŤ¾ßΪpcap¡£
Ä£¿é¼äµÄ¹ØÏµ£º

Êý¾ÝͨµÀ£º

ËüÔÚÿ¸öÈÝÆ÷»áÆðÁ½¸öÍø¿¨£¬Ò»¸öÍø¿¨Á¬×Å×Ô¼ºÆðµÄ¿ÉÒÔ¸úÆäËûËÞÖ÷»úÁªÍ¨µÄÍøÇÅ£»ÁíÒ»¸öÍø¿¨°óÔÚÔÉúDockerµÄÒ»¸öÍøÇÅÉÏ£¬²¢ÔÚÕâ¸öÍøÇÅÉϼàÌýÒ»¸öDNSµÄ·þÎñ£¬Õâ¸öDNSʵ¼ÊÉÏǶÔÚRouterÀïÃæ£¬¼´Ëü¿ÉÒÔ´ÓRouterÀïѧϰµ½Ò»Ð©·þÎñµÄºó¶ËµÄһЩÅäÖá£ËùÒÔÕâʱÈÝÆ÷Èç¹û·¢ÆðDNS²éѯ£¬Êµ¼ÊÉϻᱻ·Óɵ¼µ½ËÞÖ÷»úÉÏ£¬DNS
ServerÉÏ£¬È»ºóDNS server×öһЩÏìÓ¦¡£

WeaveµÄ¸ôÀëÊÇ×ÓÍø¼¶µÄ¸ôÀ룬±ÈÈç˵ÓÐÁ½¸öÈÝÆ÷¶¼´¦ÔÚ10.0.1-24Íø¶Î£¬ÄÇôËü»áÔÚËùÓеÄÈÝÆ÷ÀïÃæ¼ÓÒ»Ìõ·ÓÉ˵¸ÃÍø¶Î»á×ß×ó±ßµÄÍøÇųöÈ¥£¬µ«ÊÇËùÓзǴËÍø¶ÎµÄÁ÷Á¿»á×ßDocker0£¬Õâ¸öʱºòDocker0ºÍÆäËûÊDz»ÁªÍ¨µÄ£¬ËùÒÔËü¾Í´ïµ½Ò»¸ö¸ôÀëµÄЧ¹û¡£

WeaveÓŵã
1£©Ö§³ÖÖ÷»ú¼äͨÐżÓÃÜ£»
2£©Ö§³Öcontainer¶¯Ì¬¼ÓÈë»òÕß°þÀëÍøÂ磻
3£©Ö§³Ö¿çÖ÷»ú¶à×ÓÍøÍ¨ÐÅ¡£
ȱµã
1£©²»Ö§³Ö·þÎñ·¢ÏÖ£¬Ö÷»ú²»Äܶ¯Ì¬¼ÓÈë½ÚµãÍøÂ磻
2£©Ö»ÄÜͨ¹ýweave launch»òÕßweave connect¼ÓÈëweaveÍøÂç¡£
ÐÂÍÆ³öµÄweave plugin¿ÉÒÔ¶Ô½Ólibnetwork remote driver£¬¿ÉÒÔÓëdocker¸üºÃµÄÕûºÏ¡£
×¢ÒâÊÂÏÐèҪȷ±£ÄÚ²¿µÄMTU±ÈÍⲿMTUС76¡£
ËÄ¡¢flannel
Flannel֮ǰµÄÃû×ÖÊÇRudder£¬ËüÊÇÓÉCoreOSÍŶÓÕë¶ÔKubernetesÉè¼ÆµÄÒ»¸öÖØÔØÍøÂ繤¾ß£¬ÆäÄ¿µÄÔÚÓÚ°ïÖúÿһ¸öʹÓÃ
Kuberentes µÄ CoreOS Ö÷»úÓµÓÐÒ»¸öÍêÕûµÄ×ÓÍø¡£
ÀàËÆÓÚweave¡¢vxlan£¬ÌṩÁËÒ»¸ö¿ÉÅäÖõÄÐéÄâ³ÐÔØÍøÂç¡£FlannelÒÔÒ»¸ödaemonÐÎʽÔËÐУ¬¸ºÔð×ÓÍøµÄ·ÖÅ䣬flannelʹÓÃetcd´æ´¢¡¢½»»»ÍøÂçÅäÖá¢×´Ì¬µÈÐÅÏ¢¡£
¼¯ÈºµÄÍØÆËͼʾÀýÈçÏ£º

²¿ÊðÄ£¿éÖ®¼äµÄ¹ØÏµÈçÏ£¨¿ØÖÆÆ½Ã棩£º

»ù±¾ÔÀí
ÿ̨Ö÷»úÔËÐÐÔÚÒ»¸ö×ÓÍøÄÚ£¬¶ą̀Ö÷»ú¹²Í¬¹éÊôÓÚÒ»¸ö´óµÄ×ÓÍø£¬Ö÷»ú¼äͨ¹ýudp»òÕßvxlanʵÏÖ¿çÖ÷»ú¼äµÄͨÐÅ¡£
ÿ¸ö»úÆ÷ÉÏÃæµÄFlannel½ø³Ì»á¼àÌýETCD£¬ÏòETCDÉêÇëÿ¸ö½Úµã¿ÉÓõÄIPµØÖ·¶Î£¬²¢ÇÒ´ÓETCDÄõ½ÆäËûËùÓÐËÞÖ÷»úµÄÍø¶ÎÐÅÏ¢£¬ÕâÑùËü¾Í¿ÉÒÔ×öһЩ·ÓÉ¡£¶ÔÓÚËüµÄת·¢Æ½Ã桪¡ª×ª·¢Æ½ÃæÖ÷Òª±íÏÖÊý¾ÝÁ÷µÄÁ÷Ïò¡ª¡ªËüÔÚDocker½øÀ´µÄÍøÇÅ»ù´¡Ö®ÉÏ£¬ÓÖ´´½¨ÁËÒ»¸öеĽÐVXLANµÄÉ豸£¬VXLANÊÇÒ»¸öËíµÀµÄ·½°¸£¬Ëü¿ÉÒÔ°ÑÒ»¸ö¶þ²ãµÄ°ü£¬Ç°Ãæ¼ÓÒ»¸ö°üÍ·£¬È»ºóÔÙ°ÑÕû¸ö°ü×÷ΪÎïÀíÍøÂçµÄÒ»¸ö°ü£¬È¥ÎïÀíÍøÂçÀïÃæÈ¥Â·ÓÉ£¬Á÷ת¡£

ÌØµã
1£©·Ç³£ÊʺÏÔÚKuberntesÖÐʹÓã»
2£©ÓÉÓÚÿ¸öÖ÷»úÒ»¸ö×ÓÍø£¬Áé»îÐÔ²»×ã¡£
Îå¡¢Kuryr
KuryrÊÇÒ»¸öDockerÍøÂç²å¼þ£¬Æäͨ¹ýNeutronΪDockerÈÝÆ÷Ìá¹©ÍøÂç·þÎñ¡£Kuryr¿ÉÒÔµ¥¶À»òÒÔÈÝÆ÷»¯µÄ·½Ê½Ê¹Óã¬ÕâʹµÃËüÃÇ¿ÉÒÔʹÓÃͨÓÃNeutron²å¼þ½«ÈÝÆ÷½ÓÈëµ½NeutronÍøÂçÖС£
KuryrÖ÷ҪʵÏÖͨ¹ý½«libnetworkÓ³Éäµ½neutron api¡£Â߼ͼÈçÏ£º

ÔÀíͼÈçÏ£º

Kuryr¹¤×÷Á÷³Ì£º
1£©DockersÒýÇæµÄ²Ù×÷ת»»³É¶ÔLibnetworkµÄRemoteÇý¶¯µÄ²Ù×÷£»
2£©¶ÔRemoteÇý¶¯µÄ²Ù×÷£¬Í¨¹ýKuryrת»»³É¶ÔNeutron APIµÄ²Ù×÷£»
3£©¶ÔNeutron APIµÄ²Ù×÷£¬Í¨¹ýNeutron²å¼þµÄ»úÖÆ×ª»»³É¶Ô¾ßÌåÍøÂç·½°¸Çý¶¯µÄ²Ù×÷
Áù¡¢¶Ô±È

Calico·½°¸ÒòΪûÓÐËíµÀ·â×°µÄÍøÂ翪Ïú£¬»á´øÀ´Ïà¶Ô½Ï¸ßµÄÍøÂçÐÔÄÜ£¬µ«ÊDz»Ö§³Ö¶à×â»§£¬ÓÉÓÚûÓзâ×°£¬ËùÓеÄÈÝÆ÷Ö»ÄÜͨ¹ýÕæÊµµÄIPÀ´Çø·Ö×Ô¼º£¬Õâ¾ÍÒªÇóËùÓÐ×â»§µÄÈÝÆ÷ͳһ·ÖÅäÒ»¸öµØÖ·¿Õ¼ä¡£
FlannelºÍoverlay·½°¸¾ùʹÓóÐÔØÍøÂ磬³ÐÔØÍøÂçµÄÓÅÊÆºÍÁÓÊÆ¶¼ÊǷdz£Ã÷ÏÔ¡£
ÓÅÊÆÓУº¶Ôµ×²ãÍøÂçÒÀÀµ½ÏÉÙ£¬²»¹Üµ×²ãÊÇÎïÀíÍøÂ绹ÊÇÐéÄâÍøÂ磬¶Ô²ãµþÍøÂçµÄÅäÖùÜÀíÓ°Ïì½ÏÉÙ£»ÅäÖüòµ¥£¬Âß¼ÇåÎú£¬Ò×ÓÚÀí½âºÍѧϰ£¬·Ç³£ÊÊÓÃÓÚ¿ª·¢²âÊԵȶÔÍøÂçÐÔÄÜÒªÇ󲻸ߵij¡¾°¡£
ÁÓÊÆÖ÷Òª°üÀ¨£ºÍøÂç·â×°ÊÇÒ»ÖÖ´«Ê俪Ïú£¬¶ÔÍøÂçÐÔÄÜ»áÓÐÓ°Ï죬²»ÊÊÓÃÓÚ¶ÔÍøÂçÐÔÄÜÒªÇó¸ßµÄÉú²ú³¡¾°£»ÓÉÓڶԵײãÍøÂç½á¹¹È±·¦Á˽⣬ÎÞ·¨×öµ½ÕæÕýÓÐЧµÄÁ÷Á¿¹¤³Ì¿ØÖÆ£¬Ò²»á¶ÔÍøÂçÐÔÄܲúÉúÓ°Ï죻ijЩÇé¿öÏÂÒ²²»ÄÜÍêÈ«×öµ½ÓëϲãÍøÂçÎ޹أ¬ÀýÈçËíµÀ·â×°»á¶ÔÍøÂçµÄMTUÏÞÖÆ²úÉúÓ°Ïì¡£
weave¿ÉÒÔ´©Í¸·À»ðǽ£¬°²È«ÐԽϸߣ¬Á÷Á¿ÊDZ»¼ÓÃܵģ¬ÔÊÐíÖ÷»úÁ¬½Óͨ¹ýÒ»¸ö²»±»ÐÅÈεÄÍøÂ磬ͬÑù»áÓгÐÔØÍøÂçµÄ´øÀ´µÄÓÅȱµã£¬²»¹ý¿ÉÒÔͨ¹ýFast
datapathÀ´Ìá¸ßÐÔÄÜ¡£
KuryrÏîÄ¿Ö÷ÒªÓÃÀ´½¨Á¢DockerÓëneutronµÄÁ¬½Ó£¬±¾Éí²»Ìá¹©ÍøÂç¿ØÖÆ¹¦ÄÜ£¬¶øÖ»ÊÇÌṩÏÂÃæÒ»²ãÍøÂç¿ØÖÆ¹¦Äܵ½ÈÝÆ÷ÍøÂçµÄ¹ÜÀí½Ó¿Ú·â×°£¬ÊÇ×÷ΪlibnetworkµÄÒ»¸ö²å¼þ£¬»ùÓÚneutronÄ£¿é¹¤×÷£¬±È½ÏÊÊÓÃÓÚopenstackÓëÈÝÆ÷¼¯³ÉµÄ»·¾³¡£
|