éå»ã«
Service Mesh ãšããèšèãèããŠå€ãã®éçºè
ãã·ã¹ãã 管çè
ãæåã«æãæµ®ãã¶ã®ã¯ããã¬ãŒã¹ã§ãã å®éããã¹ãŠã® TCP ãã©ãã£ãã¯ãééããåãããã¯ãŒã¯ ããŒãã«ç¹å¥ãªãããã· ãµãŒããŒãè¿œå ããŸãã ãããã¯ãŒã¯äžã®ãã¹ãŠã®ãããã¯ãŒã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ã«é¢ããæ
å ±ãç°¡åã«éä¿¡ã§ããããã«ãªã£ãããã§ãã æ®å¿µãªãããå®éã«ã¯èæ
®ããå¿
èŠã®ãã埮åŠãªç¹ãæ°å€ããããŸãã ããããèŠãŠã¿ãŸãããã
誀解ãã® XNUMX ã¯ããªã³ã©ã€ã³ã®ãã€ãã³ã° ããŒã¿ãç¡æã§å ¥æã§ãããšããããšã§ãã
å®éãæ¯èŒçç¡æã§ãç¢å°ã§æ¥ç¶ãããã·ã¹ãã ã®ããŒããšããµãŒãã¹éãééããããŒã¿ ã¬ãŒã (å®éã«ã¯ãåäœæéãããã®ãã€ãæ°ã®ã¿) ããååŸã§ããŸããã ãã ããã»ãšãã©ã®å ŽåããµãŒãã¹ã¯ HTTPãgRPCãRedis ãªã©ã®äœããã®ã¢ããªã±ãŒã·ã§ã³å±€ãããã³ã«ãä»ããŠéä¿¡ããŸãã ãããŠãã¡ããããããã®ãããã³ã«ã«ç¹åãããã¬ãŒã¹æ å ±ã確èªãããã®ã§ãããããŒã¿ ã¬ãŒãã§ã¯ãªããªã¯ãšã¹ã ã¬ãŒãã確èªãããã®ã§ãã ç§ãã¡ã¯ããããã³ã«ã䜿çšãããªã¯ãšã¹ãã®ã¬ã€ãã³ã·ãŒãç解ããããšèããŠããŸãã æåŸã«ãã·ã¹ãã ã«ãã°ã€ã³ããŠãŠãŒã¶ãŒããå¿çãåãåããŸã§ã®ãªã¯ãšã¹ãã®å®å šãªãã¹ã確èªããããšæããŸãã ãã®åé¡ã¯ãã¯ãããã»ã©ç°¡åã«è§£æ±ºã§ããŸããã
ãŸããIstio ã®ã¢ãŒããã¯ãã£ã®èŠ³ç¹ããéä¿¡ãã¬ãŒã¹ ã¹ãã³ãã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã æåã®éšåã§èŠããããã«ãIstio ã«ã¯ãã¬ã¡ããªãåéããããã® Mixer ãšåŒã°ããå¥ã®ã³ã³ããŒãã³ãããããŸãã ãã ããçŸåšã®ããŒãžã§ã³ 1.0.* ã§ã¯ãéä¿¡ã¯ãããã· ãµãŒããŒãã€ãŸã envoy ãããã·ããçŽæ¥è¡ãããŸãã Envoy ãããã·ã¯ãããã«äœ¿ãã zipkin ãããã³ã«ã䜿çšãããã¬ãŒã¹ ã¹ãã³ã®éä¿¡ããµããŒãããŸãã ä»ã®ãããã³ã«ã«æ¥ç¶ããããšãå¯èœã§ããããã©ã°ã€ã³ãä»ããŠã®ã¿æ¥ç¶ã§ããŸãã Istio ã䜿çšãããšãzipkin ãããã³ã«ã®ã¿ããµããŒããããçµã¿ç«ãŠããæ§æããã envoy ãããã·ãããã«ååŸã§ããŸãã ããšãã°ãJaeger ãããã³ã«ã䜿çšããUDP çµç±ã§ãã¬ãŒã¹ ã¹ãã³ãéä¿¡ãããå Žåã¯ãç¬èªã® istio-proxy ã€ã¡ãŒãžãæ§ç¯ããå¿ èŠããããŸãã istio-proxy ã®ã«ã¹ã¿ã ãã©ã°ã€ã³ã®ãµããŒãã¯ãããŸããããŸã ã¢ã«ãã¡çã§ãã ãããã£ãŠãå€æ°ã®ã«ã¹ã¿ã èšå®ã䜿çšããã«æžã¿ããå Žåã¯ããã¬ãŒã¹ ã¹ãã³ã®ä¿åãšåä¿¡ã«äœ¿çšããããã¯ãããžã®ç¯å²ãæžããŸãã å®éãäž»èŠãªã·ã¹ãã ã§ã¯ãZipkin èªäœãŸã㯠Yeter ã䜿çšã§ããããã«ãªããŸããããzipkin ãšäºææ§ã®ãããããã³ã« (å¹çã¯å€§å¹ ã«äœäžããŸã) ã䜿çšããŠãã¹ãŠãããã«éä¿¡ããŸãã zipkin ãããã³ã«èªäœã«ã¯ãHTTP ãããã³ã«çµç±ã§ãã¹ãŠã®ãã¬ãŒã¹æ å ±ãã³ã¬ã¯ã¿ãŒã«éä¿¡ããå¿ èŠããããããã«ã¯éåžžã«ã³ã¹ããããããŸãã
ãã§ã«è¿°ã¹ãããã«ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãããã³ã«ããã¬ãŒã¹ããããšèããŠããŸãã ããã¯ãåãµãŒãã¹ã®é£ã«ãããããã· ãµãŒããŒããçŸåšã©ã®ãããªå¯Ÿè©±ãè¡ãããŠããããç解ããå¿ èŠãããããšãæå³ããŸãã ããã©ã«ãã§ã¯ãIstio ã¯ãã¹ãŠã®ããŒãããã¬ãŒã³ TCP ãšããŠæ§æããŸããã€ãŸãããã¬ãŒã¹ã¯éä¿¡ãããŸããã ãã¬ãŒã¹ãéä¿¡ããã«ã¯ããŸãã¡ã€ã³ ã¡ãã·ã¥æ§æã§ãã®ãªãã·ã§ã³ãæå¹ã«ããéåžžã«éèŠãªããšãšããŠããµãŒãã¹ã§äœ¿çšããããããã³ã«ã«åŸã£ãŠ Kubernetes ãµãŒãã¹ ãšã³ãã£ãã£ã®ãã¹ãŠã®ããŒãã«ååãä»ããå¿ èŠããããŸãã ããã¯ãäŸãã°æ¬¡ã®ããã«ãªããŸãã
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
targetPort: 80
name: http
selector:
app: nginx
http-magic ã®ãããªè€ååã䜿çšããããšãã§ããŸã (Istio 㯠http ãèªèãããã®ããŒãã http ãšã³ããã€ã³ããšããŠèªèããŸã)ã 圢åŒã¯ããããšã¯ã¹ãã©ã§ãã
ãããã³ã«ã決å®ããããã«èšå€§ãªæ°ã®æ§æã«ããããé©çšããªãããã«ããã«ã¯ãæ±ãåé¿çã䜿çšã§ããŸããã€ãŸããPilot ã³ã³ããŒãã³ããã¡ããã©å®æããæç¹ã§ããããé©çšããŸãã
ãããã³ã«ãæ¬åœã«æ£ããå®çŸ©ãããŠãããã©ãããç解ããã«ã¯ãenvoy ãããã·ãåããããããã®ãµã€ãã«ãŒ ã³ã³ããã«ç§»åããå Žæ /config_dump ã® envoy ã€ã³ã¿ãŒãã§ã€ã¹ã®ç®¡çããŒãã«ãªã¯ãšã¹ããè¡ãå¿ èŠããããŸãã çµæãšããŠåŸãããæ§æã§ã¯ãç®çã®ãµãŒãã¹ã®æäœãã£ãŒã«ãã確èªããå¿ èŠããããŸãã Istio ã§ã¯ããªã¯ãšã¹ããè¡ãããå Žæã®èå¥åãšããŠäœ¿çšãããŸãã Istio ã§ãã®ãã©ã¡ãŒã¿ãŒã®å€ãã«ã¹ã¿ãã€ãºããã«ã¯ (ãã®åŸããã¬ãŒã¹ ã·ã¹ãã ã§ç¢ºèªããŸã)ããµã€ãã«ãŒ ã³ã³ãããŒãèµ·åãã段é㧠serviceCluster ãã©ã°ãæå®ããå¿ èŠããããŸãã ããšãã°ãäžåãã® kubernetes API ããååŸããå€æ°ãã次ã®ããã«èšç®ã§ããŸãã
--serviceCluster ${POD_NAMESPACE}.$(echo ${POD_NAME} | sed -e 's/-[a-z0-9]*-[a-z0-9]*$//g')
envoy ã§ã®ãã¬ãŒã¹ã®ä»çµã¿ãç解ããããã®è¯ãäŸã¯æ¬¡ã®ãšããã§ãã
ãã¬ãŒã¹ ã¹ãã³ãéä¿¡ããããã®ãšã³ããã€ã³ãèªäœããEnvoy ãããã·èµ·åãã©ã°ã§æå®ããå¿
èŠããããŸãã次ã«äŸã瀺ããŸãã --zipkinAddress tracing-collector.tracing:9411
誀解ãã® XNUMX: ããã«äœ¿ããã·ã¹ãã ãéããŠããªã¯ãšã¹ãã®å®å šãªãã¬ãŒã¹ãå®äŸ¡ã«ååŸã§ãã
æ®å¿µãªããããã§ã¯ãããŸããã å®è£ ã®è€éãã¯ããµãŒãã¹ã®çžäºäœçšãã©ã®ããã«å®è£ ãããã«ãã£ãŠç°ãªããŸãã äœæ ã§ããïŒ
å®éã®ãšãããistio-proxy ããµãŒãã¹ãžã®åä¿¡ãªã¯ãšã¹ããšåããµãŒãã¹ããéä¿¡ããããªã¯ãšã¹ãã®å¯Ÿå¿ãç解ã§ããããã«ããã«ã¯ããã¹ãŠã®ãã©ãã£ãã¯ãåã«ã€ã³ã¿ãŒã»ããããã ãã§ã¯ååã§ã¯ãããŸããã äœããã®éä¿¡èå¥åãå¿ èŠã§ãã HTTP ãšã³ã〠ãããã·ã¯ç¹æ®ãªããããŒã䜿çšããŸããããã«ããããšã³ãã€ã¯ããµãŒãã¹ãžã®ç¹å®ã®ãªã¯ãšã¹ããä»ã®ãµãŒãã¹ãžã®ç¹å®ã®ãªã¯ãšã¹ããçæããããšãç解ããŸãã ãã®ãããªããããŒã®ãªã¹ã:
- x-ãªã¯ãšã¹ãIDã
- x-b3-traceidã
- x-b3-ã¹ããããã
- x-b3-parentspanidã
- x-b3-ãµã³ããªã³ã°ãããã
- x-b3-ãã©ã°ã
- x-ot-span-contextã
ãã®ãããªããžãã¯ãè¿œå ã§ããåäžãã€ã³ã (ããšãã°ãåºæ¬ã¯ã©ã€ã¢ã³ã) ãããå Žåã¯ããã¹ãŠåé¡ãªãããã®ã©ã€ãã©ãªããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«å¯ŸããŠæŽæ°ããããŸã§åŸ ã€å¿ èŠããããŸãã ããããéåžžã«ç°çš®æ··åã®ã·ã¹ãã ãããããããã¯ãŒã¯äžã§ãµãŒãã¹éã移åããéã«çµ±äžæ§ããªãå Žåãããã¯å€§ããªåé¡ãšãªãå¯èœæ§ãé«ããªããŸãã ãã®ãããªããžãã¯ãè¿œå ããªããšããã¹ãŠã®ãã¬ãŒã¹æ å ±ã¯ãåäžã¬ãã«ãã®ã¿ã«ãªããŸãã ã€ãŸãããµãŒãã¹éã®ããåãã¯ãã¹ãŠåä¿¡ããŸããããããã¯ãããã¯ãŒã¯ãä»ããåäžã®çµè·¯ã«åºå®ãããããšã¯ãããŸããã
ãŸãšã
Istio ã¯ããããã¯ãŒã¯çµç±ã§ãã¬ãŒã¹æ å ±ãåéããããã®äŸ¿å©ãªããŒã«ãæäŸããŸãããå®è£ ããã«ã¯ã·ã¹ãã ãé©å¿ãããIstio å®è£ ã®æ©èœãèæ ®ããå¿ èŠãããããšãç解ããå¿ èŠããããŸãã ãã®çµæãXNUMX ã€ã®äž»ãªç¹ã解決ããå¿ èŠããããŸããXNUMX ã€ã¯ã¢ããªã±ãŒã·ã§ã³ ã¬ãã«ã®ãããã³ã«ã®å®çŸ© (Envoy ãããã·ã«ãã£ãŠãµããŒããããŠããå¿ èŠããã)ããã XNUMX ã€ã¯ãµãŒãã¹ããã®ãªã¯ãšã¹ããããµãŒãã¹ãžã®ãªã¯ãšã¹ãã®æ¥ç¶ã«é¢ããæ å ±ã®è»¢éã®èšå® (ããããŒã䜿çš) ã§ãã ãHTTP ãããã³ã«ã®å Žå)ã ãããã®åé¡ã解決ããããšãå€ãã®ç°ãªãèšèªããã¬ãŒã ã¯ãŒã¯ã§æžãããéåžžã«ç°è³ªãªã·ã¹ãã ã§ãã£ãŠãããããã¯ãŒã¯ããééçã«æ å ±ãåéã§ãã匷åãªããŒã«ãæã«å ¥ããŸãã
Service Mesh ã«é¢ãã次ã®èšäºã§ã¯ãIstio ã®æ倧ã®åé¡ã® XNUMX ã€ã§ããåãµã€ãã«ãŒ ãããã· ã³ã³ããã«ãã RAM ã®å€§éæ¶è²»ãåãäžããããã«å¯ŸåŠããæ¹æ³ã«ã€ããŠèª¬æããŸãã
åºæïŒ habr.com