ã³ã³ãããããã¯ãŒãã³ã°ã®ä»çµã¿
ã³ã³ããã£ãŠç¬ç«ããç°å¢ãªã®ã«ãã©ããã£ãŠå€ãšéä¿¡ããŠãã®ïŒ
ãã質åã ããã³ã³ããã¯Linuxã®ããããã¯ãŒã¯åå空éããšããä»çµã¿ã§ãããããç¬ç«ãããããã¯ãŒã¯ç°å¢ãæã£ãŠãããã ãIPã¢ãã¬ã¹ãã«ãŒãã£ã³ã°ããŒãã«ãã³ã³ããããšã«å¥ã ã ãã
åå空éâŠïŒç¬ç«ããŠãã®ã«ã©ããã£ãŠå€ãšç¹ããã®ïŒ
ããã§ç»å Žããã®ããvethïŒããŒãã£ã«ã€ãŒãµãããïŒãã¢ãã ããããã¯2æ¬ã»ããã®ä»®æ³LANã±ãŒãã«ã¿ãããªãã®ã§ãçæ¹ãã³ã³ããã®åå空éã«ãããçæ¹ããã¹ãåŽã«çœ®ãããã®2æ¬ãåžžã«ç¹ãã£ãŠãããããã³ã³ãããšãã¹ãã®éã§éä¿¡ãã§ãããã ã
ãªãã»ã©ãä»®æ³ã®ã±ãŒãã«ã§ç¹ãã§ããã ïŒãããã³ã³ããå士ã¯ã©ããã£ãŠè©±ãã®ïŒ
Dockerã®å Žåããdocker0ããšããããªããžãããã¯ãŒã¯ãããã©ã«ãã§äœãããããããã¯ä»®æ³çãªLANã¹ã€ããã¿ãããªãã®ã§ãåã³ã³ããã®vethãã¢ããã®ããªããžã«æ¥ç¶ããããåãããªããžã«ç¹ãã£ãã³ã³ããå士ã¯ãæ®éã®LANå ã®éä¿¡ãšåãããã«çŽæ¥ãããšãã§ãããã ã
ãããå€éšããã³ã³ããã«ã¢ã¯ã»ã¹ãããšãã®ã-p 8080:80ãã£ãŠã©ãããä»çµã¿ãªã®ïŒ
ããã¯ããŒããããã³ã°ãšåŒã°ããæ©èœã§ãè£åŽã§ã¯iptablesã®NATã«ãŒã«ãèªåçã«èšå®ããããããã¹ãã®8080çªããŒãã«æ¥ããã±ããããã³ã³ããã®80çªããŒãã«è»¢éïŒDNATïŒããä»çµã¿ã ããdocker runã®ãã³ã«iptablesã®ã«ãŒã«ã远å ãããŠãããã ã
Dockerã«ã¯ãããã¯ãŒã¯ã¢ãŒããããã€ãããã£ãŠèãããã©ãã©ãéãã®ïŒ
äž»ã«4ã€ãããããbridgeããããã©ã«ãã§ããã£ã説æããdocker0ããªããžã䜿ãã¢ãŒãããhostãã¯ã³ã³ããããã¹ãã®ãããã¯ãŒã¯ããã®ãŸãŸäœ¿ãã¢ãŒãã§ãNATã®ãªãŒããŒãããããªãåé«éã ãã©é颿§ã¯ãªãããnoneãã¯ãããã¯ãŒã¯ãªãããããŠãoverlayãã¯è€æ°ãã¹ãéã§ã³ã³ãããç¹ãããã®ã¢ãŒãã ãã
Kubernetesã«ãªããšãããã«ãããã¯ãŒã¯ãè€éã«ãªãã£ãŠèããã©âŠ
Kubernetesã®ãããã¯ãŒã¯ã¢ãã«ã«ã¯å€§äºãªã«ãŒã«ããããã ãããã¹ãŠã®Podã¯NATãªãã§ä»ã®ãã¹ãŠã®PodãšçŽæ¥éä¿¡ã§ããããšãããã®ããããå®çŸããããã«ãPodééä¿¡ãServiceã«ããããŒããã©ã³ã·ã³ã°ãIngressã«ããå€éšå ¬éãšãã3ã€ã®ã¬ã€ã€ãŒã§æ§æãããŠãããã
ãããå®çŸããŠãã®ãCNIãã©ã°ã€ã³ã£ãŠãã€ïŒ
ããã ããCNIïŒContainer Network InterfaceïŒã¯Kubernetesã®ãããã¯ãŒã¯ããã©ã°ã€ã³æ¹åŒã§å®è£ ããä»çµã¿ã ããFlannelã¯ã·ã³ãã«ãªãªãŒããŒã¬ã€ãããã¯ãŒã¯ãCalicoã¯BGPã䜿ã£ãã«ãŒãã£ã³ã°ããŒã¹ãCiliumã¯eBPFãæŽ»çšãã髿§èœåãçšéãã¯ã©ã¹ã¿ã®èŠæš¡ã§äœ¿ãåãããã ã
ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã£ãŠå ·äœçã«ã¯ã©ãããä»çµã¿ãªã®ïŒ
ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã¯ãæ¢åã®ç©çãããã¯ãŒã¯ïŒã¢ã³ããŒã¬ã€ïŒã®äžã«ä»®æ³çãªãããã¯ãŒã¯ãéããæè¡ã ããå€ãã®å ŽåVXLANã䜿ãããŠããŠãã³ã³ããã®ãã±ãããUDPã§ã«ãã»ã«åããŠå¥ãã¹ãã«éããåãåã£ãåŽã§ã«ãã»ã«ãè§£ããŠãäžã®ãã±ãããç®çã®ã³ã³ããã«å±ãããæçŽãå°çã«å ¥ããŠããã«å¥ã®å°çã«å ¥ãããããªã€ã¡ãŒãžã ãã
iptablesã®è©±ãåºããã©ãå€§èŠæš¡ã«ãªããšé ããªããªãã®ïŒ
éããïŒå®ã¯Kubernetesã§Serviceãå¢ãããšiptablesã®ã«ãŒã«ãèšå€§ã«ãªã£ãŠããã±ããåŠçãé ããªãåé¡ããããã ãããã§æ³šç®ãããŠããã®ãCiliumãæ¡çšããŠããeBPFãšããæè¡ãã«ãŒãã«å ã§çŽæ¥ãã±ãããåŠçã§ãããããiptablesã®ã«ãŒã«ãã§ãŒã³ã蟿ãå¿ èŠããªããªã£ãŠãæ°äžServiceã§ãé«éã«åäœãããã
eBPFã£ãŠãããªã«ããããã âŠïŒ
eBPFã¯ãããã¯ãŒã¯ã ããããªããã»ãã¥ãªãã£ç£èŠããã¬ãŒã·ã³ã°ã«ã䜿ããæ±çšçãªã«ãŒãã«æè¡ã ããCiliumã¯ãããæŽ»çšããŠããããã¯ãŒã¯ããªã·ãŒã®é©çšãL7ïŒHTTPã¬ãã«ïŒã®ããŒããã©ã³ã·ã³ã°ãŸã§ã«ãŒãã«ç©ºéã§å®çŸããŠãããåŸæ¥ã®kube-proxy + iptablesã®ä»çµã¿ãäžžããšçœ®ãæãããããããå€§èŠæš¡ã¯ã©ã¹ã¿ã§ã¯äºå®äžã®æšæºã«ãªãã€ã€ãããã