æ¥ç¶è¿œè·¡ (ãconntrackã) ã¯ãLinux ã«ãŒãã« ãããã¯ãŒãã³ã° ã¹ã¿ãã¯ã®äžæ žæ©èœã§ãã ããã«ãããã«ãŒãã«ã¯ãã¹ãŠã®è«çãããã¯ãŒã¯æ¥ç¶ãŸãã¯ãããŒã远跡ããããã«ãã£ãŠåãããŒãæ§æãããã¹ãŠã®ãã±ãããèå¥ããŠãããããé çªã«ãŸãšããŠåŠçã§ããããã«ãªããŸãã
Conntrack ã¯ãããã€ãã®åºæ¬çãªã±ãŒã¹ã§äœ¿çšãããéèŠãªã«ãŒãã«æ©èœã§ãã
- NAT 㯠conntrack ããã®æ å ±ã«äŸåããŠãããããåãã¹ããªãŒã ããã®ãã¹ãŠã®ãã±ãããåçã«æ±ãããšãã§ããŸãã ããšãã°ããããã Kubernetes ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããå Žåãkube-proxy ããŒã ãã©ã³ãµãŒã¯ NAT ã䜿çšããŠãã©ãã£ãã¯ãã¯ã©ã¹ã¿ãŒå ã®ç¹å®ã®ãããã«éä¿¡ããŸãã Conntrack ã¯ãç¹å®ã®æ¥ç¶ã«ã€ããŠãIP ãµãŒãã¹ãžã®ãã¹ãŠã®ãã±ããã¯åããããã«éä¿¡ãããå¿ èŠããããããã¯ãšã³ã ãããããè¿ããããã±ããã¯èŠæ±ã®éä¿¡å ã®ãããã« NAT å€æãããŠæ»ãããå¿ èŠããããšèšé²ããŠããŸãã
- Calico ãªã©ã®ã¹ããŒããã« ãã¡ã€ã¢ãŠã©ãŒã«ã¯ãconnecttrack ããã®æ å ±ã«äŸåããŠãå¿çããã©ãã£ãã¯ããã¯ã€ããªã¹ãã«ç»é²ããŸãã ããã«ãããå¿çãã©ãã£ãã¯ãæ瀺çã«èš±å¯ããããªã·ãŒãäœæããªããŠãããããããä»»æã®ãªã¢ãŒã IP ã¢ãã¬ã¹ã«æ¥ç¶ã§ããããã«ããããšãããããã¯ãŒã¯ ããªã·ãŒãäœæã§ããããã«ãªããŸãã (ãããè¡ããªããšãã¯ããã«å®å šæ§ã®äœããä»»æã® IP ããã®ããããžã®ãã±ãããèš±å¯ãããã«ãŒã«ãè¿œå ããå¿ èŠããããŸãã)
ããã«ãconntrack ã¯éåžžãã¹ããªãŒã å
ã®æåã®ãã±ããã®ã¿ãåŠçããããã(CPU æ¶è²»éãšãã±ããé
延ãåæžããããšã«ãã£ãŠ) ã·ã¹ãã ããã©ãŒãã³ã¹ãåäžãããŸãã
ãããã¯ãŒã¯ ã¹ã¿ãã¯å
šäœã調ã¹ãŠããã®åŠçã決å®ããå¿
èŠããããŸãã æçš¿ãåç
§ããŠãã ãããã
ãã ããconntrack ã«ã¯å¶éããããŸã...
ã§ã¯ãã©ãã§ãã¹ãŠãããŸããããªãã£ãã®ã§ãããã?
conntrack ããŒãã«ã«ã¯æ§æå¯èœãªæ倧ãµã€ãºããããããããã£ã±ãã«ãªããšãéåžžãæ¥ç¶ãæåŠãŸãã¯ããããããå§ããŸãã ããŒãã«ã«ã¯ãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã®ãã©ãã£ãã¯ãåŠçããã®ã«ååãªç©ºãé åãããããããåé¡ã«ãªãããšã¯ãããŸããã ãã ããconntrack ããŒãã«ã®äœ¿çšãæ€èšããã»ããããã·ããªãªãããã€ããããŸãã
- æãæçœãªã±ãŒã¹ã¯ããµãŒããŒãéåžžã«å€æ°ã®åæã«ã¢ã¯ãã£ããªæ¥ç¶ãåŠçããå Žåã§ãã ããšãã°ãconntrack ããŒãã«ã 128k ãšã³ããªçšã«èšå®ãããŠããã«ãããããããåææ¥ç¶æ°ã 128k ãè¶ ããŠããå Žåã確å®ã«åé¡ãçºçããŸãã
- å°ãåããã«ããã±ãŒã¹ã§ããããµãŒããŒã 120 ç§ãããéåžžã«å€ãã®æ¥ç¶ãåŠçããå Žåã§ãã æ¥ç¶ã®åç¶æéãçãå Žåã§ããLinux ã«ãã£ãŠäžå®æé (ããã©ã«ãã§ã¯ 128 ç§) ç£èŠããç¶ããŸãã ããšãã°ãconntrack ããŒãã«ã 1100k ãšã³ããªçšã«æ§æãããŠããã128 ç§ããã 120 ã®æ¥ç¶ãåŠçããããšããŠããå Žåãæ¥ç¶ã®æå¹æéãéåžžã«çãå Žåã§ããconntrack ããŒãã«ã®ãµã€ãºãè¶ ããŸã (1092k/XNUMXs = XNUMX æ¥ç¶/ sïŒã
ãããã®ã«ããŽãªã«åé¡ãããããããªã¿ã€ãã®ã¢ããªãããã€ããããŸãã ããã«ãæªæã®ããæ»æè ãå€æ°ååšããå ŽåããµãŒããŒã® conntrack ããŒãã«ãå€æ°ã®ããŒããªãŒãã³æ¥ç¶ã§ãã£ã±ãã«ãªããšããµãŒãã¹æåŠ (DOS) æ»æã®äžéšãšããŠäœ¿çšãããå¯èœæ§ããããŸãã ã©ã¡ãã®å Žåããconntrack ãã·ã¹ãã ã®å¶éçãªããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã å Žåã«ãã£ãŠã¯ãconntrack ããŒãã«ã®ãã©ã¡ãŒã¿ã調æŽããã ãã§ããŒãºãæºããããšãã§ããŸãããµã€ãºã倧ããããããconntrack ã®ã¿ã€ã ã¢ãŠããæžããããããããšã§ã (ãã ããããæ¹ãééãããšãå€ãã®åé¡ã«ééããããšã«ãªããŸã)ã ä»ã®ã±ãŒã¹ã§ã¯ãæ»æçãªãã©ãã£ãã¯ã«å¯Ÿã㊠conntrack ããã€ãã¹ããå¿ èŠããããŸãã
å®éã®äŸ
å ·äœçãªäŸãæããŠã¿ãŸããããç§ãã¡ãååãããã倧èŠæš¡ãª SaaS ãããã€ããŒã§ã¯ããã¹ã (ä»®æ³ãã·ã³ã§ã¯ãªã) äžã«å€æ°ã® memcached ãµãŒããŒããããããããã 50 ç§ããã XNUMX 以äžã®çææ¥ç¶ãåŠçããŠããŸããã
圌ã㯠conntrack æ§æãè©ŠããŠãããŒãã« ãµã€ãºãå¢ããã远跡æéãççž®ããŸãããããã®æ§æã¯ä¿¡é Œæ§ãäœããRAM æ¶è²»éãå€§å¹ ã«å¢å ããŠåé¡ãçºçã (GBytes åäœ!)ãæ¥ç¶ãçããããã conntrack ã¯äœ¿çšã§ããŸããã§ãããéåžžã®ããã©ãŒãã³ã¹äžã®å©ç¹ (CPU æ¶è²»ãŸãã¯ãã±ããé 延ã®åæž) ãçã¿åºããŸãã
圌ãã¯ä»£æ¿æ¡ãšã㊠Calico ã«ç®ãåããŸããã Calico ãããã¯ãŒã¯ ããªã·ãŒã䜿çšãããšãç¹å®ã®çš®é¡ã®ãã©ãã£ãã¯ã«å¯Ÿã㊠conntrack ã䜿çšããªãããšãã§ããŸã (doNotTrack ããªã·ãŒ ãªãã·ã§ã³ã䜿çš)ã ããã«ãããå¿ èŠãªã¬ãã«ã®ããã©ãŒãã³ã¹ã«å ããŠãCalico ã«ãã£ãŠæäŸãããè¿œå ã¬ãã«ã®ã»ãã¥ãªãã£ãæäŸãããŸããã
conntrackããã€ãã¹ããã«ã¯ã©ã®ãããã®é·ããè¡ããªããã°ãªããŸããã?
- Do-Not Track ãããã¯ãŒã¯ ããªã·ãŒã¯éåžžã察称çã§ããå¿ èŠããããŸãã SaaS ãããã€ããŒã®å Žå: ã¢ããªã±ãŒã·ã§ã³ã¯ä¿è·ãŸãŒã³å ã§å®è¡ãããŠããããããããã¯ãŒã¯ ããªã·ãŒã䜿çšããŠãmemcached ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããä»ã®ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ããã®ãã©ãã£ãã¯ããã¯ã€ããªã¹ãã«ç»é²ã§ããŸããã
- do-not-track ããªã·ãŒã§ã¯ãæ¥ç¶ã®æ¹åã¯èæ ®ãããŸããã ãããã£ãŠãmemcached ãµãŒããŒããããã³ã°ãããå Žåã§ããçè«çã«ã¯ãæ£ããéä¿¡å ããŒãã䜿çšããŠããéããã©ã® memcached ã¯ã©ã€ã¢ã³ãã«ãæ¥ç¶ãè©Šã¿ãããšãã§ããŸãã ãã ããmeââmcached ã¯ã©ã€ã¢ã³ãã®ãããã¯ãŒã¯ ããªã·ãŒãæ£ããå®çŸ©ããŠããå Žåã§ãããããã®æ¥ç¶è©Šè¡ã¯ã¯ã©ã€ã¢ã³ãåŽã§æåŠãããŸãã
- do-not-track ããªã·ãŒã¯ããããŒå ã®æåã®ãã±ããã«ã®ã¿é©çšãããéåžžã®ããªã·ãŒãšã¯å¯Ÿç §çã«ããã¹ãŠã®ãã±ããã«é©çšãããŸãã ããªã·ãŒããã±ããããšã«é©çšããå¿ èŠãããããããã±ããããšã® CPU æ¶è²»éãå¢å ããå¯èœæ§ããããŸãã ãã ããåç¶æéãçãæ¥ç¶ã®å Žåããã®è²»çšã¯ãconntrack åŠçã®ãªãœãŒã¹æ¶è²»ã®åæžã«ãã£ãŠãã©ã³ã¹ããšããŸãã ããšãã°ãSaaS ãããã€ããŒã®å Žåãåæ¥ç¶ã®ãã±ããæ°ã¯éåžžã«å°ãªããããåãã±ããã«ããªã·ãŒãé©çšãããšãã«è¿œå ã® CPU æ¶è²»ãæ£åœåãããŸããã
ãã¹ããå§ããŸããã
8 ç§ãããéåžžã«å€ãã®æ¥ç¶ãå®è¡ã§ããããã«ãmemcached ãµãŒããŒãåããåäžã®ããããšãªã¢ãŒã ããŒãã§å®è¡ãããŠããè€æ°ã® memcached ã¯ã©ã€ã¢ã³ã ãããã§ãã¹ããå®è¡ããŸããã memcached ãµãŒã㌠ããããåãããµãŒããŒã«ã¯ 512 ã³ã¢ããããconntrack ããŒãã« (ãã¹ãã®æšæºæ§æããŒãã« ãµã€ãº) ã« XNUMXk ãšã³ããªããããŸããã
ãããã¯ãŒã¯ ããªã·ãŒããªãå Žåãšããããã¯ãŒã¯ ããªã·ãŒããªãå Žåã®ããã©ãŒãã³ã¹ã®éãã枬å®ããŸããã éåžžã® Calico ããªã·ãŒã䜿çšããŸãã Calico ã®è¿œè·¡çŠæ¢ããªã·ãŒã
æåã®ãã¹ãã§ã¯ãCPU æ¶è²»éã®éãã«æ³šç®ã§ããããã«ãæ¥ç¶æ°ã 4.000 ç§ããã 20 ã«èšå®ããŸããã ããªã·ãŒãªããšéåžžã®ããªã·ãŒã®éã«å€§ããªéãã¯ãããŸããã§ãããã远跡ããªããš CPU æ¶è²»éãçŽ XNUMX% å¢å ããŸããã
4,000 çªç®ã®ãã¹ãã§ã¯ãã¯ã©ã€ã¢ã³ããçæã§ããã ãå€ãã®æ¥ç¶ãéå§ããmemcached ãµãŒããŒãåŠçã§ãã 512 ç§ãããã®æ倧æ¥ç¶æ°ã枬å®ããŸããã äºæ³éãããããªã·ãŒãªããã±ãŒã¹ãšãéåžžããªã·ãŒãã±ãŒã¹ã¯äž¡æ¹ãšãã120 ç§ããã 4,369 æ¥ç¶ãè¶ ãã conntrack å¶é (60,000k / XNUMX ç§ = XNUMX æ¥ç¶/ç§) ã«éããŸããã do-not-track ããªã·ãŒã䜿çšãããšãã¯ã©ã€ã¢ã³ãã¯åé¡ãªã XNUMX ç§ããã XNUMX ã®æ¥ç¶ãéä¿¡ã§ããŸããã ã¯ã©ã€ã¢ã³ããããã«è¿œå ããããšã§ãã®æ°ãå¢ããããšãã§ãããšç¢ºä¿¡ããŠããŸããããã®èšäºã®èŠç¹ã説æããã«ã¯ãããã®æ°ã§ååã§ãããšèããŠããŸãã
ãŸãšã
Conntrack ã¯éèŠãªã«ãŒãã«æ©èœã§ãã 圌ã¯èªåã®ä»äºãå®ç§ã«ããªããŸãã äž»èŠãªã·ã¹ãã ã³ã³ããŒãã³ãã§ãã䜿çšãããŸãã ãã ããç¹å®ã®ã·ããªãªã§ã¯ãconntrack ã«ãã茻茳ããconntrack ãæäŸããéåžžã®å©ç¹ãäžåããŸãã ãã®ã·ããªãªã§ã¯ãCalico ãããã¯ãŒã¯ ããªã·ãŒã䜿çšããŠããããã¯ãŒã¯ ã»ãã¥ãªãã£ã匷åããªãã conntrack ã®äœ¿çšãéžæçã«ç¡å¹ã«ããããšãã§ããŸãã ä»ã®ãã¹ãŠã®ãã©ãã£ãã¯ã«ã€ããŠã¯ãconntrack ãåŒãç¶ãããªãã®å人ã§ãã
ç§ãã¡ã®ããã°ã®ä»ã®èšäºããèªã¿ãã ããã
Nginx çšã®åçã¢ãžã¥ãŒã«ã®æ§ç¯ Hashicorp Consul ã® Kubernetes èªèšŒã®æŠèŠ Kubernetes ã®ã¹ããŒããã« ããã¯ã¢ãã å€æ°ã®ç°çš® Web ãããžã§ã¯ãã®ããã¯ã¢ãã Redmineã®ãã¬ã°ã©ã ãããã èªåèªèº«ãšä»äººã®ç掻ãç°¡çŽ åããæ¹æ³
åºæïŒ habr.com