ããŒãã 翻蚳ã: ãµãŒãã¹ ã¡ãã·ã¥ã¯ããã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã«åŸãã¢ããªã±ãŒã·ã§ã³ã®ææ°ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«é¢é£ãããœãªã¥ãŒã·ã§ã³ã«ãªã£ãŠããã®ã¯ééããããŸããã Istio ã¯å€ãã® DevOps ãšã³ãžãã¢ãç¥ã£ãŠãããããããŸããããéåžžã«æ°ãã補åã§ãããæäŸãããæ©èœãšããç¹ã§ã¯å
æ¬çã§ã¯ãããŸãããæ
£ãããŸã§ã«ããªãã®æéãå¿
èŠãšããå¯èœæ§ããããŸãã é»æ°éä¿¡äŒç€Ÿ Orange Networks ã§å€§èŠæš¡é¡§å®¢åãã®ã¯ã©ãŠã ã³ã³ãã¥ãŒãã£ã³ã°ãæ
åœãããã€ã人ãšã³ãžãã¢ã® Rinor Maloku ã¯ãIstio ãçŽ æ©ãæ·±ãæãäžããããã®çŽ æŽãããäžé£ã®è³æãå·çããŸããã 圌ã¯ãIstio ã§äžè¬çã«äœãã§ããã®ãããããŠãããèªåã®ç®ã§ããã«ç¢ºèªã§ããæ¹æ³ãã話ãå§ããŸãã
ã€ã¹ãã£ãª â GoogleãIBMãLyft ã®ããŒã ãšååããŠéçºããããªãŒãã³ãœãŒã¹ ãããžã§ã¯ãã ããã¯ããã€ã¯ããµãŒãã¹ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§çãã次ã®ãããªè€éãã解決ããŸãã
- 亀é管ç: ã¿ã€ã ã¢ãŠããåè©Šè¡ãè² è·åæ£;
- ã»ãã¥ãªãã£: ãšã³ããŠãŒã¶ãŒã®èªèšŒãšèªå¯ã
- å¯èŠ³æž¬æ§: ãã¬ãŒã¹ãã¢ãã¿ãªã³ã°ããã®ã³ã°ã
ãããã¯ãã¹ãŠã¢ããªã±ãŒã·ã§ã³ ã¬ãã«ã§è§£æ±ºã§ããŸããããã以éã¯ãµãŒãã¹ã¯ããã€ã¯ããã§ã¯ãªããªããŸãã ãããã®åé¡ã解決ããããã®äœåãªåŽåã¯ãã¹ãŠãããžãã¹äŸ¡å€ã«çŽæ¥äœ¿çšã§ããäŒç€ŸãªãœãŒã¹ã®ç¡é§ã§ãã äŸãèŠãŠã¿ãŸããã:
ãããžã§ã¯ã ãããŒãžã£ãŒ: ãã£ãŒãããã¯æ©èœãè¿œå ããã®ã«ã©ããããæéãããããŸãã?
éçºè : ã¹ããªã³ã㯠XNUMX ã€ã§ããMP: ãã£?.ããã¯åãªã CRUD ã§ã!
R: CRUD ãå®è¡ããã®ã¯ç°¡åã§ããããŠãŒã¶ãŒãšãµãŒãã¹ãèªèšŒããèªå¯ããå¿ èŠããããŸãã ãããã¯ãŒã¯ã®ä¿¡é Œæ§ãäœããããç¹°ãè¿ããªã¯ãšã¹ããå®è£ ããå¿ èŠããããŸãããµãŒããããã¬ãŒã«ãŒã®ãã¿ãŒã³ ã¯ã©ã€ã¢ã³ãã§ã ãŸããã·ã¹ãã å šäœãã¯ã©ãã·ã¥ããªãããã«ããã«ã¯ãã¿ã€ã ã¢ãŠããšéå£ (åè¿°ã®äž¡æ¹ã®ãã¿ãŒã³ã®è©³çŽ°ã«ã€ããŠã¯ãèšäºåŸåã®ããããã®ç¿»èš³ãåç §ããŠãã ããã)ãåé¡ãæ€åºããããã«ãç£èŠã远跡ã[âŠ]MP: ãããããã§ã¯ãã®æ©èœã Product ãµãŒãã¹ã«æ¿å ¥ããŸãããã
ãã®èãã¯æããã ãšæããŸããXNUMX ã€ã®ãµãŒãã¹ãè¿œå ããã®ã«å¿ èŠãªæé ãšåŽåã¯èšå€§ã§ãã ãã®èšäºã§ã¯ãIstio ãäžèšã®ãã¹ãŠã®è€éã (ããžãã¹ ããžãã¯ãæå³ãããã®ã§ã¯ãããŸãã) ããµãŒãã¹ããã©ã®ããã«é€å»ããããèŠãŠãããŸãã
泚æ: ãã®èšäºã¯ãKubernetes ã«é¢ããå®è·µçãªç¥èãããããšãåæãšããŠããŸãã ãã以å€ã®å Žåã¯ãèªãããšããå§ãããŸã
Istio ã®ã¢ã€ãã¢
Istio ã®ãªãäžçã§ã¯ããããµãŒãã¹ãå¥ã®ãµãŒãã¹ã«çŽæ¥ãªã¯ãšã¹ããéä¿¡ããé害ãçºçããå Žåã«ã¯ããµãŒãã¹èªäœããããåŠçããå¿ èŠããããŸããã€ãŸããæ°ããè©Šè¡ãè¡ã£ãããã¿ã€ã ã¢ãŠããèšå®ãããããµãŒããã ãã¬ãŒã«ãŒãéãããããå¿ èŠããããŸãã
Kubernetes ã®ãããã¯ãŒã¯ ãã©ãã£ãã¯
Istio ã¯ããããã¯ãŒã¯éä¿¡ã劚害ããããšã«ãã£ãŠãµãŒãã¹ãæ©èœããå®å šã«åé¢ããããç¹æ®ãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ãããã£ãŠã次ã®ããã«å®è£ ãããŸãã
- èé害æ§: å¿çã®ã¹ããŒã¿ã¹ ã³ãŒãã«åºã¥ããŠããªã¯ãšã¹ãã倱æãããã©ãããç解ãããªã¯ãšã¹ããåå®è¡ããŸãã
- ã«ããªã¢ã®ããŒã«ã¢ãŠã: äžå®ã®å²åã®ãªã¯ãšã¹ãã®ã¿ãæ°ããããŒãžã§ã³ã®ãµãŒãã¹ã«ãªãã€ã¬ã¯ãããŸãã
- ã¢ãã¿ãªã³ã°ãšã¡ããªã¯ã¹: ãµãŒãã¹ãå¿çãããŸã§ã«ã©ããããæéãããããŸããã?
- ãã¬ãŒã¹ãšå¯èŠ³æž¬æ§: åãªã¯ãšã¹ãã«ç¹å¥ãªããããŒãè¿œå ããã¯ã©ã¹ã¿ãŒå šäœã§ãããã远跡ããŸãã
- ã»ãã¥ãªãã£: JWT ããŒã¯ã³ãååŸãããŠãŒã¶ãŒãèªèšŒããã³èªå¯ããŸãã
ãããã¯ãèå³ããããããå¯èœæ§ã®ã»ãã®äžéš (å®éã«ã¯ã»ãã®äžéšã§ã!) ã§ãã ããã§ã¯ãæè¡çãªè©³çŽ°ãèŠãŠãããŸãããã
Istio ã¢ãŒããã¯ãã£
Istio ã¯ãã¹ãŠã®ãããã¯ãŒã¯ ãã©ãã£ãã¯ãååããããã«äžé£ã®ã«ãŒã«ãé©çšãããµã€ãã«ãŒ ã³ã³ãããŒã®åœ¢åŒã§ã¹ããŒã ãããã·ãåãããã«æ¿å ¥ããŸãã ãã¹ãŠã®æ©èœãã¢ã¯ãã£ãåãããããã·ã¯ã ããŒã¿ãã¬ãŒã³ã䜿çšããŠåçã«æ§æã§ããŸãã ã³ã³ãããŒã«ãã¬ãŒã³.
ããŒã¿ãã¬ãŒã³
ãããã«ãããã·ãæ¿å ¥ãããšãIstio ã¯å¿ èŠãªèŠä»¶ãç°¡åã«æºããããšãã§ããŸãã ããšãã°ããªãã©ã€æ©èœããµãŒããããã¬ãŒã«ãŒæ©èœã確èªããŠã¿ãŸãããã
Envoy ã§ã®åè©Šè¡ãšãµãŒããã ãã¬ãŒã¯ã®å®è£
æ¹æ³
ãŸãšãããšïŒ
- ãšã³ã〠(ããã§è©±ããŠããã®ã¯ããµã€ãã«ãŒ ã³ã³ããå
ã«ãããããã·ã§ããã次ã®ããã«é
åžãããŸãã
å¥è£œå â çŽç¿»èš³ïŒ ãµãŒãã¹ B ã®æåã®ã€ã³ã¹ã¿ã³ã¹ã«ãªã¯ãšã¹ããéä¿¡ããŸããã倱æããŸãã - Envoy ãµã€ãã«ãŒãåè©Šè¡ããŸã ïŒãªãã©ã€ïŒ. (1)
- ãªã¯ãšã¹ãã¯å€±æãããããåŒã³åºãããããã·ã«è¿ãããŸãã
- ããã«ããããµãŒããã ãã¬ãŒã«ãŒãéããåŸç¶ã®ãªã¯ãšã¹ãã«å¯ŸããŠæ¬¡ã®ãµãŒãã¹ãåŒã³åºãããŸãã (2)
ããã¯ãå¥ã® Retry ã©ã€ãã©ãªã䜿çšããå¿ èŠããªããããã°ã©ãã³ã°èšèª XãYããŸã㯠Z ã§ãµãŒããã ãã¬ãŒã¯ãšãµãŒãã¹ ãã£ã¹ã«ããªã®ç¬èªã®å®è£ ãäœæããå¿ èŠããªãããšãæå³ããŸããããããã¹ãŠããã³ãã®ä»ã®æ©èœãããã«å©çšå¯èœã§ãã Istio ã«ãããå¿ èŠãããŸãã ã㌠ã³ãŒãã®å€æŽã
çŽ æŽãããïŒ ããã§ãIstio ã䜿ã£ãŠæ ã«åºãããšæã£ãŠãããããããŸãããããŸã çåãæ®ã£ãŠããã®ã§ããªãŒãã³ãªè³ªåãããŠãã ããã ããã人çã®ããããå Žé¢ã«åœãŠã¯ãŸãæ®éçãªè§£æ±ºçã§ãããªãã°ãããªãã¯èªç¶ãªç念ãæ±ããŸããçµå±ã®ãšãããçŸå®ã«ã¯ãã®ãããªè§£æ±ºçã¯ãã¹ãŠãã©ã®ãããªå Žåã«ãäžé©åã§ããããšãå€æããŸãã
ãããŠæåŸã«ããã«ã¹ã¿ãã€ãºå¯èœã§ãã?ããšå°ããŸãã
ããã§èªæµ·ã®æºåãæŽããŸãããã³ã³ãããŒã« ãã¬ãŒã³ã«ã€ããŠèŠãŠã¿ãŸãããã
ã³ã³ãããŒã«ãã¬ãŒã³
ãã㯠XNUMX ã€ã®ã³ã³ããŒãã³ãã§æ§æãããŸãã ãã€ããã, ãããµãŒ О èŠå¡ãããã¯é£æºããŠããã©ãã£ãã¯ã®ã«ãŒãã£ã³ã°ãããªã·ãŒã®é©çšããã¬ã¡ã㪠ããŒã¿ã®åéãè¡ãããã« Envoy ãæ§æããŸãã æŠç¥çã«ã¯ããã¹ãŠæ¬¡ã®ããã«ãªããŸãã
ã³ã³ãããŒã« ãã¬ãŒã³ãšããŒã¿ ãã¬ãŒã³ã®çžäºäœçš
Envoy (ã€ãŸããããŒã¿ ãã¬ãŒã³) ã¯æ¬¡ã䜿çšããŠæ§æãããŸãã
ãµãŒãã¹ãš Istio ã®é¢ä¿
Istio ãšãµãŒãã¹ã®é¢ä¿ã«ã€ããŠã¯èª¬æããŸãããããã®éã«ã€ããŠã¯èª¬æããŸããã§ããããµãŒãã¹ã¯ Istio ã«ã©ã®ããã«é¢ä¿ããã®ã§ãããã?
æ£çŽã«èšããšããµãŒãã¹ã¯ããããããæ°Žãšã¯äœã ãã?ããšèªåãããšãã«ãéãæ°Žã«ã€ããŠèããã®ãšåãããããIstio ã®ååšãèªèããŠããŸãã
ã€ã©ã¹ã
ãããã£ãŠãåäœäžã®ã¯ã©ã¹ã¿ãŒãååŸããIstio ã³ã³ããŒãã³ãããããã€ããåŸãããã®ã¯ã©ã¹ã¿ãŒå ã«ãããµãŒãã¹ã¯åŒãç¶ãåäœãããããã®ã³ã³ããŒãã³ããåé€ãããšããã¹ãŠãæ£åžžã«æ»ããŸãã ãã®å ŽåãIstio ãæäŸããæ©èœã倱ãããããšã¯æããã§ãã
çè«ã¯ååã§ãããã®ç¥èãå®è·µããŠã¿ãŸãããã
Istio ã®å®è·µ
Istio ã«ã¯ãå°ãªããšã 4 ã€ã® vCPU ãš 8 GB ã® RAM ãå©çšå¯èœãª Kubernetes ã¯ã©ã¹ã¿ãŒãå¿
èŠã§ãã ã¯ã©ã¹ã¿ãŒããã°ããã»ããã¢ããããŠèšäºã®æé ã«åŸãã«ã¯ãæ°èŠãŠãŒã¶ãŒåãã® Google Cloud Platform ã䜿çšããããšããå§ãããŸãã
ã¯ã©ã¹ã¿ãŒãäœæããã³ã³ãœãŒã« ãŠãŒãã£ãªãã£ã䜿çšã㊠Kubernetes ãžã®ã¢ã¯ã»ã¹ãæ§æããåŸãHelm ããã±ãŒãž ãããŒãžã£ãŒã䜿çšã㊠Istio ãã€ã³ã¹ããŒã«ã§ããŸãã
ãã«ã ã®åãä»ã
ãHelm ã¯ã©ã€ã¢ã³ããã®èª¬æã«åŸã£ãŠãã³ã³ãã¥ãŒã¿ãŒã« Helm ã¯ã©ã€ã¢ã³ããã€ã³ã¹ããŒã«ããŸãã
Istio ã®ã€ã³ã¹ããŒã«
Istio ãªãœãŒã¹ã次ããããŠã³ããŒãããŸã [istio-resources]
.
Istio ãªãœãŒã¹ãç°¡åã«èå¥ããã«ã¯ãK8s ã¯ã©ã¹ã¿ãŒã«åå空éãäœæããŸãã istio-system
:
$ kubectl create namespace istio-system
ãã£ã¬ã¯ããªã«ç§»åããŠã€ã³ã¹ããŒã«ãå®äºããŸã [istio-resources]
ãããŠã³ãã³ããå®è¡ããŸã:
$ helm template install/kubernetes/helm/istio
--set global.mtls.enabled=false
--set tracing.enabled=true
--set kiali.enabled=true
--set grafana.enabled=true
--namespace istio-system > istio.yaml
ãã®ã³ãã³ãã¯ãIstio ã®äž»èŠã³ã³ããŒãã³ãããã¡ã€ã«ã«åºåããŸãã istio.yaml
ã æšæºãã³ãã¬ãŒããèªåãã¡ã«åãããŠå€æŽãã次ã®ãã©ã¡ãŒã¿ãæå®ããŸããã
-
global.mtls.enabled
ã«ã€ã³ã¹ããŒã«ãããŠããŸãfalse
(ã€ãŸããmTLS èªèšŒãç¡å¹ã«ãªã£ãŠããŸã - çŽ)ããŒãã®ããã»ã¹ãç°¡çŽ åããããã -
tracing.enabled
Yeter ã䜿çšãããªã¯ãšã¹ã ãã¬ãŒã¹ãå«ãŸããŸãã -
kiali.enabled
Kiali ãã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ããŠããµãŒãã¹ãšãã©ãã£ãã¯ãèŠèŠåããŸãã -
grafana.enabled
åéãããã¡ããªã¯ã¹ãèŠèŠåããããã« Grafana ãã€ã³ã¹ããŒã«ããŸãã
çæããããªãœãŒã¹ã次ã®ã³ãã³ãã§äœ¿çšããŠã¿ãŸãããã
$ kubectl apply -f istio.yaml
ã¯ã©ã¹ã¿ãŒãžã® Istio ã®ã€ã³ã¹ããŒã«ãå®äºããŸããã ãã¹ãŠã®ããããåå空éã«å
¥ããŸã§åŸ
ã¡ãŸã istio-system
ããšãã§ããããã«ãªããŸã Running
ãŸã㯠Completed
以äžã®ã³ãã³ããå®è¡ããŸãã
$ kubectl get pods -n istio-system
ããã§ã次ã®ã»ã¯ã·ã§ã³ã«é²ã¿ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŠå®è¡ããæºåãæŽããŸããã
ææ åæã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£
ãã§ã«è¿°ã¹ãã§äœ¿çšãããŠããã»ã³ãã¡ã³ãåæãã€ã¯ããµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³ã®äŸã䜿çšããŠã¿ãŸãããã
ã¢ããªã±ãŒã·ã§ã³ã¯ XNUMX ã€ã®ãã€ã¯ããµãŒãã¹ã§æ§æãããŸãã
- ãµãŒãã¹ SAããã³ããšã³ããReactjs ã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ããšããŠæ©èœããŸãã
- ãµãŒãã¹ SA-WebAppææ åæã¯ãšãªãåŠçããŸãã
- ãµãŒãã¹ SAããžãã¯ãããèªäœãå®è¡ãããŸã
ææ åæ ; - ãµãŒãã¹ SA ãã£ãŒãããã¯ãåæã®ç²ŸåºŠã«ã€ããŠãŠãŒã¶ãŒãããã£ãŒãããã¯ãåãåããŸãã
ãã®å³ã§ã¯ããµãŒãã¹ã«å ããŠãKubernetes ã§åä¿¡ãªã¯ãšã¹ããé©åãªãµãŒãã¹ã«ã«ãŒãã£ã³ã°ãã Ingress ã³ã³ãããŒã©ãŒã衚瀺ãããŸãã Istio ã¯ãIngress Gateway å
ã§åæ§ã®æŠå¿µã䜿çšããŠããŸãã詳现ã«ã€ããŠã¯åŸè¿°ããŸãã
Istio ãããããã·ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ãã
èšäºã§èª¬æãããŠãããããªãæäœãè¡ãã«ã¯ããªããžããªã®ã¯ããŒã³ãäœæããŸãã
ãµã€ãã«ãŒã®æ¿å ¥
æ¿å
¥ãã§ãã èªåçã« ãŸã㯠æåã§ã ãµã€ãã«ãŒ ã³ã³ãããèªåçã«æ¿å
¥ããã«ã¯ãåå空éã«ã©ãã«ãèšå®ããå¿
èŠããããŸãã istio-injection=enabled
ããã¯æ¬¡ã®ã³ãã³ãã§å®è¡ããŸãã
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
ããã§ãåããããããã©ã«ãã®åå空é (default
) ã¯ãµã€ãã«ãŒ ã³ã³ãããŒãåãåããŸãã ããã確èªããã«ã¯ããªããžããªã®ã«ãŒã ãã£ã¬ã¯ããªã«ç§»åããŠãã¹ã ã¢ããªã±ãŒã·ã§ã³ããããã€ããŠã¿ãŸãããã [istio-mastery]
ãããŠæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created
ãµãŒãã¹ããããã€ãããã次ã®ã³ãã³ããå®è¡ããŠããããã« XNUMX ã€ã®ã³ã³ãã㌠(ãµãŒãã¹èªäœãšãã®ãµã€ãã«ãŒãå«ã) ãããããšã確èªããŠã¿ãŸãããã kubectl get pods
åã®äžã«ããããšã確èªããŠãã ãã READY
æå®å€ 2/2
ãäž¡æ¹ã®ã³ã³ãããå®è¡ãããŠããããšã瀺ããŠããŸãã
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sa-feedback-55f5dc4d9c-c9wfv 2/2 Running 0 12m
sa-frontend-558f8986-hhkj9 2/2 Running 0 12m
sa-logic-568498cb4d-2sjwj 2/2 Running 0 12m
sa-logic-568498cb4d-p4f8c 2/2 Running 0 12m
sa-web-app-599cf47c7c-s7cvd 2/2 Running 0 12m
èŠèŠçã«ã¯æ¬¡ã®ããã«ãªããŸãã
ããããã®ãããã® Envoy ãããã·
ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŠå®è¡ãããããã«ãªã£ãã®ã§ãã¢ããªã±ãŒã·ã§ã³ãžã®åä¿¡ãã©ãã£ãã¯ãèš±å¯ããå¿ èŠããããŸãã
ã€ã³ã°ã¬ã¹ã²ãŒããŠã§ã€
ãããéæãã (ã¯ã©ã¹ã¿ãŒå ã®ãã©ãã£ãã¯ãèš±å¯ãã) ãã¹ã ãã©ã¯ãã£ã¹ã¯ã次ã®ãšããã§ãã ã€ã³ã°ã¬ã¹ã²ãŒããŠã§ã€ Istio ã§ã¯ãã¯ã©ã¹ã¿ãŒã®ããšããžãã«äœçœ®ããã«ãŒãã£ã³ã°ãããŒã ãã©ã³ã·ã³ã°ãã»ãã¥ãªãã£ãåä¿¡ãã©ãã£ãã¯ã®ç£èŠãªã©ã® Istio æ©èœãæå¹ã«ããããšãã§ããŸãã
Ingress Gateway ã³ã³ããŒãã³ããšãããå€éšã«è»¢éãããµãŒãã¹ã¯ãIstio ã®ã€ã³ã¹ããŒã«äžã«ã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ãããŸããã ãµãŒãã¹ã®å€éš IP ã¢ãã¬ã¹ã確èªããã«ã¯ã次ãå®è¡ããŸãã
$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP
istio-ingressgateway LoadBalancer 10.0.132.127 13.93.30.120
ãã® IP (EXTERNAL-IP ãšåŒã³ãŸã) ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ãç¶ããããã䟿å®äžãå€ãå€æ°ã«æžã蟌ã¿ãŸãã
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
ããã§ãã©ãŠã¶çµç±ã§ãã® IP ã«ã¢ã¯ã»ã¹ããããšãããšãããµãŒãã¹å©çšäžå¯ããšã©ãŒã衚瀺ãããŸãã ããã©ã«ãã§ã¯ãIstio ã¯ãã¹ãŠã®åä¿¡ãã©ãã£ãã¯ããããã¯ããŸã, ã²ãŒããŠã§ã€ã¯ãŸã å®çŸ©ãããŠããŸããã
ã²ãŒããŠã§ã€ãªãœãŒã¹
ã²ãŒããŠã§ã€ã¯ Kubernetes ã® CRD (ã«ã¹ã¿ã ãªãœãŒã¹å®çŸ©) ã§ãããã¯ã©ã¹ã¿ãŒã« Istio ãã€ã³ã¹ããŒã«ããåä¿¡ãã©ãã£ãã¯ãèš±å¯ããããŒãããããã³ã«ããã¹ããæå®ã§ããããã«ããåŸã«å®çŸ©ãããŸãã
ãã®äŸã§ã¯ããã¹ãŠã®ãã¹ãã«å¯ŸããŠããŒã 80 ã§ã® HTTP ãã©ãã£ãã¯ãèš±å¯ããããšèããŠããŸãã ã¿ã¹ã¯ã¯æ¬¡ã®å®çŸ©ã«ãã£ãŠå®è£
ãããŸã (
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
ãã®æ§æã¯ã»ã¬ã¯ã¿ãŒãé€ããŠèª¬æã®å¿
èŠã¯ãããŸããã istio: ingressgateway
ã ãã®ã»ã¬ã¯ã¿ãŒã䜿çšãããšãæ§æãé©çšãã Ingress Gateway ãæå®ã§ããŸãã ãã®å Žåããã㯠Istio ã«ããã©ã«ãã§ã€ã³ã¹ããŒã«ããã Ingress Gateway ã³ã³ãããŒã©ãŒã§ãã
æ§æã¯ã次ã®ã³ãã³ããåŒã³åºãããšã§é©çšãããŸãã
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
ã²ãŒããŠã§ã€ã¯ããŒã 80 ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸããããªã¯ãšã¹ããã©ãã«ã«ãŒãã£ã³ã°ããã°ãããããããŸããã ãã®ããã«å¿ èŠãšãªãã®ã¯ã ä»®æ³ãµãŒãã¹.
ä»®æ³ãµãŒãã¹ãªãœãŒã¹
VirtualService ã¯ãã¯ã©ã¹ã¿ãŒå ã§èš±å¯ãããŠãããªã¯ãšã¹ããã«ãŒãã£ã³ã°ããæ¹æ³ã Ingress Gateway ã«æ瀺ããŸãã
http-gateway çµç±ã§éä¿¡ãããã¢ããªã±ãŒã·ã§ã³ãžã®ãªã¯ãšã¹ãã¯ãsa-frontendãsa-web-appãããã³ sa-ãã£ãŒããã㯠ãµãŒãã¹ã«éä¿¡ããå¿ èŠããããŸãã
VirtualServices ã§æ§æããå¿
èŠãããã«ãŒã
SA ããã³ããšã³ãã«éä¿¡ããå¿ èŠããããªã¯ãšã¹ããèŠãŠã¿ãŸãããã
- éäžã§å®å
šäžèŽ
/
index.html ãååŸããã«ã¯ãSA-Frontend ã«éä¿¡ããå¿ èŠããããŸãã - æ¥é èŸä»ããã¹
/static/*
CSS ã JavaScript ãªã©ãããã³ããšã³ãã§äœ¿çšãããéçãã¡ã€ã«ãåä¿¡ããã«ã¯ãSA ããã³ããšã³ãã«éä¿¡ããå¿ èŠããããŸãã - æ£èŠè¡šçŸã§äžèŽãããã¹
'^.*.(ico|png|jpg)$'
ãSA ããã³ããšã³ãã«éä¿¡ããå¿ èŠããããŸãã ããŒãžã«è¡šç€ºãããŠããåçã§ãã
å®è£
ã¯ä»¥äžã®æ§æã§å®çŸããŸã (
kind: VirtualService
metadata:
name: sa-external-services
spec:
hosts:
- "*"
gateways:
- http-gateway # 1
http:
- match:
- uri:
exact: /
- uri:
exact: /callback
- uri:
prefix: /static
- uri:
regex: '^.*.(ico|png|jpg)$'
route:
- destination:
host: sa-frontend # 2
port:
number: 80
éèŠäºé ïŒ
- ãã® VirtualService ã¯ãçµç±ãããªã¯ãšã¹ããæããŸã httpã²ãŒããŠã§ã€;
- Ð
destination
ãªã¯ãšã¹ããéä¿¡ããããµãŒãã¹ã決å®ãããŸãã
泚æ: äžèšã®èšå®ã¯ãã¡ã€ã«ã«ä¿åãããŸã sa-virtualservice-external.yaml
ããã«ã¯ãSA-WebApp ããã³ SA-Feedback ã®ã«ãŒãã£ã³ã°ã®èšå®ãå«ãŸããŠããŸãããç°¡æœã«ããããã«ãã®èšäºã§ã¯ççž®ãããŠããŸãã
次ãåŒã³åºã㊠VirtualService ãé©çšããŸãããã
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created
泚æ: Istio ãªãœãŒã¹ã䜿çšãããšãKubernetes API ãµãŒããŒã¯ Istio ã³ã³ãããŒã« ãã¬ãŒã³ã«ãã£ãŠåä¿¡ãããã€ãã³ããäœæãããã®åŸãæ°ããæ§æãåãããã® Envoy ãããã·ã«é©çšãããŸãã ãŸããIngress Gateway ã³ã³ãããŒã©ãŒã¯ãã³ã³ãããŒã« ãã¬ãŒã³ã§æ§æãããå¥ã® Envoy ã§ããããã«èŠããŸãã ããããã¹ãŠãå³ã«ç€ºããšæ¬¡ã®ããã«ãªããŸãã
ãªã¯ãšã¹ãã«ãŒãã£ã³ã°ã®ããã® Istio-IngressGateway æ§æ
ã»ã³ãã¡ã³ãåæã¢ããªã±ãŒã·ã§ã³ã次ããå©çšå¯èœã«ãªããŸããã http://{EXTERNAL-IP}/
ã ãèŠã€ãããŸãããã¹ããŒã¿ã¹ã衚瀺ãããŠãå¿é
ããå¿
èŠã¯ãããŸããã æ§æãæå¹ã«ãªããEnvoy ãã£ãã·ã¥ãæŽæ°ããããŸã§ã«å°ãæéããããå ŽåããããŸãã.
å ã«é²ãåã«ãã¢ããªãå°ãããã£ãŠãã©ãã£ãã¯ãçæããŠãã ããã (ãã®åŸã®ã¢ã¯ã·ã§ã³ãæ確ã«ããããã«ãã®ååšãå¿ èŠã§ã - ããããã®ç¿»èš³).
ãã¢ãª: å¯èŠ³æž¬æ§
Kiali 管çã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ kubectl port-forward
$(kubectl get pod -n istio-system -l app=kiali
-o jsonpath='{.items[0].metadata.name}')
-n istio-system 20001
...ãããŠéããŸã
Grafana: ã¡ããªã¯ã¹ã®èŠèŠå
Istio ã§åéãããã¡ããªã¯ã¹ã¯ Prometheus ã«éãããGrafana ã§èŠèŠåãããŸãã Grafana 管çã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ã以äžã®ã³ãã³ããå®è¡ããŠéããŸãã
$ kubectl -n istio-system port-forward
$(kubectl -n istio-system get pod -l app=grafana
-o jsonpath={.items[0].metadata.name}) 3000
ã¡ãã¥ãŒãã¯ãªãã¯ãããš ããŒã å·Šäžã§éžæäž Istio ãµãŒãã¹ ããã·ã¥ããŒã å·Šäžé ã§ãµãŒãã¹ããå§ããŠãã ãã sa-ãŠã§ãã¢ããªåéãããã¡ããªã¯ã¹ã確èªããã«ã¯:
ããã§ç§ãã¡ãåŸ
ã£ãŠããã®ã¯ã空èã§ãŸã£ããéå±ãªããã©ãŒãã³ã¹ã§ããçµå¶é£ã¯ããã決ããŠæ¿èªããŸããã 次ã®ã³ãã³ãã䜿çšããŠãå°ããªè² è·ãäœæããŠã¿ãŸãããã
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
çŸåšã§ã¯ãããåªããã°ã©ãã衚瀺ãããããã«å ããŠãç£èŠçšã®åªãã Prometheus ããŒã«ãšãæéã®çµéã«äŒŽããµãŒãã¹ã®ããã©ãŒãã³ã¹ãå¥å šæ§ãæ¹å/äœäžã«ã€ããŠåŠç¿ã§ããã¡ããªã¯ã¹ãèŠèŠåããããã® Grafana ãæäŸãããŠããŸãã
æåŸã«ããµãŒãã¹å ã®ãªã¯ãšã¹ãã®ãã¬ãŒã¹ãèŠãŠã¿ãŸãããã
ã€ã§ãŒã¬ãŒ: 远跡äž
ãµãŒãã¹ãå¢ããã°å¢ããã»ã©ãé害ã®åå ãçªãæ¢ããã®ãé£ãããªãããããã¬ãŒã¹ãå¿ èŠã«ãªããŸãã 以äžã®å³ããç°¡åãªã±ãŒã¹ãèŠãŠã¿ãŸãããã
ã©ã³ãã ã«å€±æãããªã¯ãšã¹ãã®å
žåçãªäŸ
äŸé Œãæ¥ããéãââ çç±ã¯äœã§ããïŒ åããŠã®ãµãŒãã¹ïŒ ãããšãXNUMXçªç®ã§ããïŒ ã©ã¡ãã«ãäŸå€ããããŸããããããã®ãã°ãèŠãŠã¿ãŸãããã äœåºŠãããªããšãããŠããããšã«æ°ã¥ããŸããã? ç§ãã¡ã®ä»äºã¯éçºè ãšãããããœãããŠã§ã¢æ¢åµã«äŒŒãŠããŸã...
ããã¯ãã€ã¯ããµãŒãã¹ã§ããããåé¡ã§ãããåæ£ãã¬ãŒã·ã³ã° ã·ã¹ãã ã«ãã£ãŠè§£æ±ºãããŸããåæ£ãã¬ãŒã·ã³ã° ã·ã¹ãã ã§ã¯ããµãŒãã¹ãçžäºã«åºæã®ããããŒãæž¡ãããã®åŸããã®æ å ±ããã¬ãŒã¹ ã·ã¹ãã ã«è»¢éããããªã¯ãšã¹ã ããŒã¿ãšæ¯èŒãããŸãã 以äžã«å³ã瀺ããŸãã
TraceId ã¯ãªã¯ãšã¹ããèå¥ããããã«äœ¿çšãããŸã
Istio ã¯ããã³ããŒã«äŸåããªã OpenTracing API ãã¬ãŒã ã¯ãŒã¯ãå®è£ ãã Jaeger Tracer ã䜿çšããŸãã 次ã®ã³ãã³ãã䜿çšããŠãJaeger ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
$ kubectl port-forward -n istio-system
$(kubectl get pod -n istio-system -l app=jaeger
-o jsonpath='{.items[0].metadata.name}') 16686
ä»ããã«è¡ããŸã
ãã®ãã¬ãŒã¹ã¯æ¬¡ã®ããšã瀺ããŠããŸãã
- ãªã¯ãšã¹ããå ¥ã£ãŠãã istio-ã€ã³ã°ã¬ã¹ã²ãŒããŠã§ã€ (ããã¯ãµãŒãã¹ã® XNUMX ã€ãšã®æåã®å¯Ÿè©±ã§ããããã®èŠæ±ã«å¯ŸããŠãã¬ãŒã¹ ID ãçæãããŸã)ããã®åŸãã²ãŒããŠã§ã€ã¯èŠæ±ããµãŒãã¹ã«éä¿¡ããŸãã sa-ãŠã§ãã¢ããª.
- ãµãŒãã¹äž sa-ãŠã§ãã¢ã㪠ãªã¯ãšã¹ã㯠Envoy ãµã€ãã«ãŒã«ãã£ãŠååŸãããã¹ãã³å
ã«ãåããäœæãã (ããããã¬ãŒã¹ã«è¡šç€ºãããçç±ã§ã)ãã³ã³ããã«ãªãã€ã¬ã¯ããããŸãã sa-ãŠã§ãã¢ããª. (
ã¹ãã³ - ååãæäœã®éå§æå»ãããã³ãã®æéãæã€ãJaeger ã®äœæ¥ã®è«çåäœã ã¹ãã³ã¯ãã¹ãããŠé åºä»ãããããšãã§ããŸãã ã¹ãã³ã®æåéå·¡åã°ã©ãããã¬ãŒã¹ã圢æããŸãã â çŽç¿»èš³ïŒ - ããã§ãªã¯ãšã¹ãã¯ã¡ãœããã«ãã£ãŠåŠçãããŸã ææ åæã ãããã®ãã¬ãŒã¹ã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠãã§ã«çæãããŠããŸãã ã³ãŒãã®å€æŽãå¿ èŠã§ããã
- ãã®ç¬éãããPOST ãªã¯ãšã¹ãã¯æ¬¡ã®ããã«éå§ãããŸãã ãµããžãã¯ã ãã¬ãŒã¹ ID ã¯æ¬¡ãã転éããå¿ èŠããããŸã sa-ãŠã§ãã¢ããª.
- ...
泚æ: ã¹ããã 4 ã§ã¯ã以äžã®å³ã«ç€ºãããã«ãã¢ããªã±ãŒã·ã§ã³ã¯ Istio ã«ãã£ãŠçæãããããããŒã確èªããåŸç¶ã®ãªã¯ãšã¹ãã«æž¡ãå¿ èŠããããŸãã
(A) Istio ã¯ããããŒã®è»¢éãæ
åœããŸãã (B) ãµãŒãã¹ãããããŒãæ
åœãã
Istio ãã»ãšãã©ã®äœæ¥ãå®è¡ããŸãããã®çç±ã¯... åä¿¡ãªã¯ãšã¹ãã®ããããŒãçæããåãµã€ãã±ã¢ã«æ°ããã¹ãã³ãäœæããŠè»¢éããŸãã ãã ãããµãŒãã¹å ã®ããããŒãæäœããªããšãå®å šãªãªã¯ãšã¹ã ãã¬ãŒã¹ ãã¹ã倱ãããŸãã
次ã®ããããŒãèæ ®ããå¿ èŠããããŸãã
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
ããã¯é£ããäœæ¥ã§ã¯ãããŸããããå®è£
ãç°¡çŽ åããããã«ãã§ã«çšæãããŠããŸãã
ã»ã³ãã¡ã³ãåæã¢ããªã±ãŒã·ã§ã³ã¯ãFlaskãSpringãããã³ ASP.NET Core ã§ã®å®è£ ã瀺ããŠããããšã«æ³šæããŠãã ããã
ç®±ããåºããŠãã (ãŸãã¯ã»ãŒç®±ããåºããŠããã«) äœãåŸããããã¯æããã«ãªã£ãã®ã§ã次ã«ã埮調æŽãããã«ãŒãã£ã³ã°ããããã¯ãŒã¯ ãã©ãã£ãã¯ç®¡çãã»ãã¥ãªãã£ãªã©ãèŠãŠã¿ãŸãããã
ããŒãã 翻蚳ã: ããã«ã€ããŠã¯ãRinor Maloku ã«ãã Istio ã«é¢ããè³æã®æ¬¡ã®éšåããèªã¿ãã ããããã®ç¿»èš³ã¯ãè¿ãå°æ¥ãç§ãã¡ã®ããã°ã«æ²èŒãããäºå®ã§ãã UPDATE (14æXNUMXæ¥):
翻蚳è ããã®è¿œäŒž
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- ãIstio ã§ãã€ã¯ããµãŒãã¹ã«æ»ãã:
ããŒã 2 (ã«ãŒãã£ã³ã°ããã©ãã£ãã¯å¶åŸ¡) ,ããŒã 3 (èªèšŒãšèªå¯) ; - «
Conduit - Kubernetes çšã®è»œéãµãŒãã¹ ã¡ãã·ã¥ "; - «
ãµãŒãã¹ ã¡ãã·ã¥ãšã¯äœã§ãã? [ãã€ã¯ããµãŒãã¹ãåããã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ã«] ãµãŒãã¹ ã¡ãã·ã¥ãå¿ èŠãªçç±ã¯äœã§ãã? "; - «
Kubernetes ã®ãããã¯ãŒãã³ã°ã«é¢ããå³å ¥ãã®ã¬ã€ãã ããŒã 1 ãš 2 "; - «
ãã®ãµã€ãã«ãŒ ã³ã³ããã¯ã©ã®ããã«ã㊠[Kubernetes] ã«é 眮ãããã®ã§ãããã? 'ã
åºæïŒ habr.com