å ç¢åã¬ã€ã - èªèšŒã¡ã«ããºã
é©åãªèªèšŒã¡ã«ããºã ã®éžæã¯ã¯ã©ã¹ã¿ãŒã®ã»ãã¥ãªãã£ç¢ºä¿ã«ãããŠéèŠã§ãã Kubernetesã¯ããã€ãã®çµã¿èŸŒã¿ã®ã¡ã«ããºã ãæäŸããŠãããããããã«é·æãšçæããããŸãã ã¯ã©ã¹ã¿ãŒã«æé©ãªèªèšŒã¡ã«ããºã ãéžæããéã¯ãããããæ éã«æ€èšããå¿ èŠããããŸãã
äžè¬çã«ãæå¹ã«ããèªèšŒã¡ã«ããºã ãã§ããã ãå°ãªãããããšãæšå¥šãããŠããŸãã ããã¯ãŠãŒã¶ãŒç®¡çãåçŽåããäžèŠãšãªã£ãã¯ã©ã¹ã¿ãŒãžã®ã¢ã¯ã»ã¹æš©ããŠãŒã¶ãŒãä¿æãç¶ããããšãé²ãããã§ãã
éèŠãªæ³šæç¹ãšããŠãKubernetesã¯ã¯ã©ã¹ã¿ãŒå ã«çµã¿èŸŒã¿ã®ãŠãŒã¶ãŒããŒã¿ããŒã¹ãæã£ãŠããŸããã 代ããã«ãèšå®ãããèªèšŒã·ã¹ãã ãããŠãŒã¶ãŒæ å ±ãååŸããããã䜿çšããŠèªå¯ã®å€æãè¡ããŸãã ãã®ããããŠãŒã¶ãŒã¢ã¯ã»ã¹ãç£æ»ããã«ã¯ãèšå®ãããŠãããã¹ãŠã®èªèšŒãœãŒã¹ã®èªèšŒæ å ±ã確èªããå¿ èŠããããŸãã
è€æ°ã®ãŠãŒã¶ãŒãçŽæ¥Kubernetes APIã«ã¢ã¯ã»ã¹ããæ¬çªç°å¢ã®ã¯ã©ã¹ã¿ãŒã§ã¯ãOIDCãªã©ã®å€éšèªèšŒãœãŒã¹ã䜿çšããããšãæšå¥šãããŠããŸãã 以äžã§èª¬æããã¯ã©ã€ã¢ã³ãèšŒææžããµãŒãã¹ã¢ã«ãŠã³ãããŒã¯ã³ãªã©ã®å éšèªèšŒã¡ã«ããºã ã¯ããã®ãŠãŒã¹ã±ãŒã¹ã«ã¯é©ããŠããŸããã
X509ã¯ã©ã€ã¢ã³ãèšŒææžèªèšŒ
Kubernetesã¯ãkubeletãAPIãµãŒããŒã«å¯ŸããŠèªèšŒãè¡ãå Žåãªã©ãã·ã¹ãã ã³ã³ããŒãã³ãã«X509ã¯ã©ã€ã¢ã³ãèšŒææžèªèšŒã掻çšããŸãã ãã®ã¡ã«ããºã ã¯ãŠãŒã¶ãŒèªèšŒã«ã䜿çšã§ããŸããã以äžã®å¶éã«ããæ¬çªç°å¢ã§ã®äœ¿çšã«ã¯é©ããªãå¯èœæ§ããããŸã:
- ã¯ã©ã€ã¢ã³ãèšŒææžã¯åå¥ã«ç¡å¹åããããšãã§ããŸããã èšŒææžãæŒæŽ©ããå Žåãæå¹æéãåãããŸã§æ»æè ã«äœ¿çšãããå¯èœæ§ããããŸãã ãã®ãªã¹ã¯ã軜æžãããããã¯ã©ã€ã¢ã³ãèšŒææžã䜿çšããŠäœæããããŠãŒã¶ãŒèªèšŒæ å ±ã«ã¯çãæå¹æéãèšå®ããããšãæšå¥šãããŸãã
- ããèšŒææžãç¡å¹ã«ããå¿ èŠãããå ŽåãèªèšŒå±ã®éµã®åçæãå¿ èŠãšãªããã¯ã©ã¹ã¿ãŒã®å¯çšæ§ã«ãªã¹ã¯ãããããå¯èœæ§ããããŸãã
- ã¯ã©ã¹ã¿ãŒå ã§äœæãããã¯ã©ã€ã¢ã³ãèšŒææžã®æ°žç¶çãªèšé²ã¯æ®ããŸããã ãã®ãããèšŒææžã远跡ããå¿ èŠãããå Žåã¯ãçºè¡ããããã¹ãŠã®èšŒææžãèšé²ããŠããå¿ èŠããããŸãã
- ã¯ã©ã€ã¢ã³ãèšŒææžèªèšŒã«äœ¿çšããç§å¯éµã¯ãã¹ã¯ãŒãã§ä¿è·ããããšãã§ããŸããã éµãå«ããã¡ã€ã«ãèªã¿åãããšãã§ãã人ã¯èª°ã§ãããã䜿çšã§ããŸãã
- ã¯ã©ã€ã¢ã³ãèšŒææžèªèšŒã䜿çšããããã«ã¯ãã¯ã©ã€ã¢ã³ãããAPIãµãŒããŒãžçŽæ¥æ¥ç¶ããå¿ èŠããããTLSçµç«¯ç¹ãä»åšãããããšãã§ããŸããã ããã«ããããããã¯ãŒã¯ã¢ãŒããã¯ãã£ãè€éã«ãªãå¯èœæ§ããããŸãã
- ã°ã«ãŒãããŒã¿ã¯ã¯ã©ã€ã¢ã³ãèšŒææžã®
O
å€ã«åã蟌ãŸããŠãããããèšŒææžã®æå¹æéäžã¯ãŠãŒã¶ãŒã®ã°ã«ãŒãã¡ã³ããŒã·ããã倿Žããããšãã§ããŸããã
éçãªããŒã¯ã³ãã¡ã€ã«
Kubernetesã§ã¯ã³ã³ãããŒã«ãã¬ãŒã³ããŒãã®ãã£ã¹ã¯ã«ããéçãªããŒã¯ã³ãã¡ã€ã«ããèªèšŒæ å ±ãèªã¿èŸŒãããšãã§ããŸããã以äžã®çç±ã«ããæ¬çªç°å¢ã®ãµãŒããŒã§ã¯ãã®æ¹æ³ã¯æšå¥šãããŸãã:
- èªèšŒæ å ±ãã³ã³ãããŒã«ãã¬ãŒã³ããŒãã®ãã£ã¹ã¯ã«å¹³æã§ä¿åããããããã»ãã¥ãªãã£äžã®ãªã¹ã¯ãšãªãå¯èœæ§ããããŸãã
- èªèšŒæ å ±ã倿Žããããã«ã¯ãAPIãµãŒããŒã®ããã»ã¹ãåèµ·åããå¿ èŠããããå¯çšæ§ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- èªèšŒæ å ±ã®ããŒããŒã·ã§ã³ãå¯èœã«ããã¡ã«ããºã ã¯ååšããŸããã èªèšŒæ å ±ãããŒããŒã·ã§ã³ããããã«ã¯ãã¯ã©ã¹ã¿ãŒç®¡çè ããã£ã¹ã¯äžã®ããŒã¯ã³ã倿ŽãããŠãŒã¶ãŒã«é åžããå¿ èŠããããŸãã
- ãã«ãŒããã©ãŒã¹æ»æãé²ãããã®ããã¯ã¢ãŠãã¡ã«ããºã ã¯ååšããŸããã
ããŒãã¹ãã©ããããŒã¯ã³
ããŒãã¹ãã©ããããŒã¯ã³ã¯ããŒããã¯ã©ã¹ã¿ãŒã«åå ãããããã«äœ¿çšãããŸãã 以äžã®çç±ã«ããããŠãŒã¶ãŒèªèšŒã«ã¯æšå¥šãããŸãã:
- ããŒãã³ãŒããããã°ã«ãŒãã¡ã³ããŒã·ãããæã£ãŠãããäžè¬çãªäœ¿çšã«é©ããŠããªããããèªèšŒã®ç®çã«ã¯é©ããŠããŸããã
- ããŒãã¹ãã©ããããŒã¯ã³ãæåã§çæãããšãæ»æè ãæšæž¬å¯èœãªè匱ãªããŒã¯ã³ãçæãããå¯èœæ§ããããã»ãã¥ãªãã£äžã®ãªã¹ã¯ãšãªããŸãã
- ãã«ãŒããã©ãŒã¹æ»æãé²ãããã®ããã¯ã¢ãŠãã¡ã«ããºã ãååšããªããããæ»æè ãããŒã¯ã³ãæšæž¬ãŸãã¯è§£èªãããããªããŸãã
ãµãŒãã¹ã¢ã«ãŠã³ãã·ãŒã¯ã¬ããããŒã¯ã³
ãµãŒãã¹ã¢ã«ãŠã³ãã·ãŒã¯ã¬ããã¯ãã¯ã©ã¹ã¿ãŒå ã§å®è¡ãããã¯ãŒã¯ããŒããAPIãµãŒããŒã«å¯ŸããŠèªèšŒãè¡ãããã®ãªãã·ã§ã³ãšããŠå©çšã§ããŸãã Kubernetes 1.23ããåã®ããŒãžã§ã³ã§ã¯ããã©ã«ãã®ãªãã·ã§ã³ã§ããããçŸåšã¯TokenRequest APIããŒã¯ã³ã«çœ®ãæããããŠããŸãã ãããã®Secretã¯ãŠãŒã¶ãŒèªèšŒã«äœ¿çšã§ããŸããã以äžã®çç±ã«ããäžè¬çã«äžé©åã§ã:
- æå¹æéãèšå®ããããšãã§ãããé¢é£ä»ãããããµãŒãã¹ã¢ã«ãŠã³ããåé€ããããŸã§æå¹ãªãŸãŸãšãªããŸãã
- ããŒã¯ã³ã¯ããããå®çŸ©ãããŠããNamespaceå ã§Secretãèªã¿åãããšãã§ããä»»æã®ã¯ã©ã¹ã¿ãŒãŠãŒã¶ãŒãé²èЧã§ããŸãã
- ãµãŒãã¹ã¢ã«ãŠã³ãã¯ä»»æã®ã°ã«ãŒãã«è¿œå ã§ããªãããããããã䜿çšããå Žåã«RBACã®ç®¡çãè€éã«ãªããŸãã
TokenRequest APIããŒã¯ã³
TokenRequest APIã¯ãAPIãµãŒããŒãŸãã¯ãµãŒãããŒãã£ã·ã¹ãã ãžã®ãµãŒãã¹èªèšŒã®ããã«æå¹æéã®çãèªèšŒæ å ±ãçæããããã«æçšãªããŒã«ã§ãã ãã ããèªèšŒæ å ±ã®å€±å¹æ¹æ³ãç¡ããããäžè¬çã«ãŠãŒã¶ãŒèªèšŒã«ã¯æšå¥šãããããŠãŒã¶ãŒãžã®èªèšŒæ å ±ã®å®å šãªé åžãå°é£ã§ãã
TokenRequestããŒã¯ã³ããµãŒãã¹èªèšŒã«äœ¿çšããå ŽåãããŒã¯ã³ãæŒæŽ©ããéã®åœ±é¿ã軜æžããããã«ãçãæå¹æéãèšå®ããããšãæšå¥šãããŸãã
OpenID ConnectããŒã¯ã³èªèšŒ
Kubernetesã¯ãOpenID Connect (OIDC)ã䜿çšããå€éšèªèšŒãµãŒãã¹ãšKubernetes APIãšã®çµ±åããµããŒãããŠããŸãã Kubernetesãã¢ã€ãã³ãã£ãã£ãããã€ããŒãšçµ±åããããã«äœ¿çšã§ãããœãããŠã§ã¢ã¯å€å²ã«ããããŸãã ããããKubernetesã§OIDCèªèšŒã䜿çšããéã¯ã以äžã®ã»ãã¥ãªãã£åŒ·åçãèæ ®ããããšãéèŠã§ã:
- OIDCèªèšŒããµããŒãããããã«ã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ããããœãããŠã§ã¢ã¯ãé«ãæš©éã§å®è¡ããããããäžè¬çãªã¯ãŒã¯ããŒãããåé¢ããå¿ èŠããããŸãã
- äžéšã®KubernetesãããŒãžããµãŒãã¹ã§ã¯ã䜿çšã§ããOIDCãããã€ããŒãå¶éãããŠããŸãã
- TokenRequestããŒã¯ã³ãšåæ§ã«ãããŒã¯ã³ãæŒæŽ©ããéã®åœ±é¿ã軜æžãããããOIDCããŒã¯ã³ã¯çãæå¹æéãèšå®ããå¿ èŠããããŸãã
WebhookããŒã¯ã³èªèšŒ
WebhookããŒã¯ã³èªèšŒã¯ãå€éšèªèšŒãããã€ããŒãKubernetesã«çµ±åããããäžã€ã®ãªãã·ã§ã³ã§ãã ãã®èªèšŒã¡ã«ããºã ãçšãããšãã¯ã©ã¹ã¿ãŒå éšãŸãã¯å€éšã§å®è¡ãããèªèšŒãµãŒãã¹ã«å¯ŸããŠWebhookãä»ããŠèªèšŒã®å€æãåãåãããããšãã§ããŸãã ãã®èªèšŒã¡ã«ããºã ãžã®é©åæ§ã¯èªèšŒãµãŒãã¹ã«äœ¿çšããããœãããŠã§ã¢ã«äŸåããå¯èœæ§ãé«ããKubernetesç¹æã®èæ ®äºé ãããããšã«æ³šæãå¿ èŠã§ãã
WebhookèªèšŒãèšå®ããã«ã¯ãã³ã³ãããŒã«ãã¬ãŒã³ãµãŒããŒã®ãã¡ã€ã«ã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ãå¿ èŠã§ãã ãã®ããããããã€ããŒãç¹å¥ã«å©çšå¯èœã«ããªãéãããããŒãžãKubernetesã§ã¯äœ¿çšã§ããŸããã ãŸãããã®ã¢ã¯ã»ã¹ããµããŒãããããã«ã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ããããœãããŠã§ã¢ã¯é«ãæš©éã§å®è¡ããããããäžè¬çãªã¯ãŒã¯ããŒãããåé¢ããå¿ èŠããããŸãã
èªèšŒãããã·
èªèšŒãããã·ã¯ãå€éšèªèšŒã·ã¹ãã ãKubernetesã«çµ±åããããäžã€ã®ãªãã·ã§ã³ã§ãã ãã®èªèšŒã¡ã«ããºã ã§ã¯ãKubernetesã¯èªå¯ã®ããã«å²ãåœãŠããŠãŒã¶ãŒåãšã°ã«ãŒãã¡ã³ããŒã·ããã瀺ãç¹å®ã®ããããŒå€ãèšå®ããããªã¯ãšã¹ãããããã·ããåãåãããšãæ³å®ããŠããŸãã ãã®èªèšŒã¡ã«ããºã ã䜿çšããéã«ã¯ãç¹å®ã®èæ ®äºé ã«æ³šæããå¿ èŠããããŸãã
ãŸãããã©ãã£ãã¯ã®ååãã¹ãããã£ã³ã°æ»æã®ãªã¹ã¯ã軜æžããããããããã·ãšKubernetes APIãµãŒããŒéã§ã¯å®å šã«èšå®ãããTLSã䜿çšããå¿ èŠããããŸãã ããã«ããããããã·ãšKubernetes APIãµãŒããŒéã®éä¿¡ã®å®å šæ§ã確ä¿ãããŸãã
次ã«ããªã¯ãšã¹ãããããŒãæ¹ããã§ããæ»æè ãKubernetesãªãœãŒã¹ãžã®äžæ£ã¢ã¯ã»ã¹ãååŸã§ããå¯èœæ§ãããããšãèªèããããšãéèŠã§ãã ãã®ãããããããŒãé©åã«ä¿è·ãããæ¹ãããããªãããã«ããããšãéèŠã§ãã