åäžã®Kubernetesã¯ã©ã¹ã¿ãŒã§å€æ°ã®ãŠãŒã¶ãŒãå®å šã«ãã¹ãããããšã¯åžžã«å°é£ã§ãããäž»ãªçç±ã¯ããã¹ãŠã®çµç¹ã§Kubernetesã®äœ¿ç𿹿³ãç°ãªããããåäžã®ãã«ããŠãŒã¶ãŒã¢ãã«ããã¹ãŠã®äººã«åœ¹ç«ã€å¯èœæ§ã¯äœãããã§ãã代ããã«ãKubernetesã¯ãRole Based Access ControlïŒRBACïŒãNetworkPoliciesãªã©ã®ç¬èªã®ãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããããã®ã³ã³ããŒãã³ããæäŸããŸãããããã®ã³ã³ããŒãã³ããåªããŠããã»ã©ãå®å šãªãã«ããŠãŒã¶ãŒã¯ã©ã¹ã¿ãŒã®æ§ç¯ã容æã«ãªããŸãã
åå空éãæ¥ãã§æå©ã«
ãããã®ã³ã³ããŒãã³ãã®äžã§æãéèŠãªã®ã¯åååã§ãããããã¯ãKubernetesã®ã»ãŒãã¹ãŠã®ã»ãã¥ãªãã£ããã³ã³ã³ãããŒã«ãã¬ãŒã³å ±æããªã·ãŒã®åºç€ã§ããããšãã°ãRBACãNetworkPoliciesãããã³ResourceQuotasã¯ããã©ã«ãã§åååããµããŒãããŸãããSecretãServiceAccountãIngressãªã©ã®ãªããžã§ã¯ãã¯1ã€ã®ã¹ããŒã¹å ã§èªç±ã«å©çšã§ããŸãããä»ã®ã¹ããŒã¹ããã¯å®å šã«åé¢ãããŠããŸãã
åå空éã«ã¯ãããªã·ãŒã®å®æœã«çæ³çãªããã€ãã®éèŠãªæ©èœããããŸãããŸããããããã£ã衚ãããã«äœ¿çšã§ããŸããã»ãšãã©ã®Kubernetesãªããžã§ã¯ãã¯ä»»æã®åååã«ãªããŸããåååã䜿çšããŠæææš©ã衚ãããšã«ããããã€ã§ããããã®ãªããžã§ã¯ããææè ãæã€ããšãæåŸ ã§ããŸãã
次ã«ãé©åãªæš©éãæã€ãŠãŒã¶ãŒã®ã¿ãåååãäœæããŠäœ¿çšã§ããŸããåååãäœæããã«ã¯ææ Œãããæš©éãå¿ èŠã§ãããä»ã®ãŠãŒã¶ãŒã¯ããããæäœãããããã€ãŸãããããã®åååã§ãªããžã§ã¯ããäœæã衚瀺ããŸãã¯å€æŽããããã®æç€ºçãªæš©éãå¿ èŠã§ãããããã£ãŠãæåã«è€éãªããªã·ãŒã®ã»ããã䜿çšããŠåååãäœæããããã®åŸã§ã®ã¿ãç¹æš©ã®ãªããŠãŒã¶ãŒããããããµãŒãã¹ãªã©ã®ãéåžžã®ããªããžã§ã¯ããäœæã§ããŸãã
åå空éã®å¶é
æ®å¿µãªãããå®éã«ã¯ãååä»ãã¯ååãªæè»æ§ããªããããã€ãã®äžè¬çãªäœ¿çšäŸã«ã¯ããŸãé©åããŸãããããšãã°ãç¹å®ã®ããŒã ã¯ãç°ãªãã·ãŒã¯ã¬ãããšã¯ã©ãŒã¿ãæã€ããã€ãã®ãã€ã¯ããµãŒãã¹ãææããŠããŸããçæ³çã«ã¯ããããã®ãµãŒãã¹ãå¥ã ã®åååã«åå²ããŠäºãã«åé¢ããå¿ èŠããããŸãããããã«ã¯2ã€ã®åé¡ããããŸãã
ãŸãããããã®åååã¯ãäž¡æ¹ãåãããŒã ã«ãã£ãŠææãããŠããã«ãããããããæææš©ã®åäžã®æŠå¿µãæ¬ ããŠããŸããã€ãŸããKubernetesã¯ããããã®åå空éã«1äººã®ææè ããããšããäºå®ã«ã€ããŠäœãç¥ããªãã ãã§ãªããå¶åŸ¡ãããŠãããã¹ãŠã®åå空éã«ã°ããŒãã«ããªã·ãŒãäžåºŠã«é©çšããæ©èœããããŸããã
第äºã«ããåç¥ã®ããã«ãèªåŸæ§ã¯å¹æçãªããŒã ã¯ãŒã¯ã®éµã§ããåååã®äœæã«ã¯ææ Œãããç¹æš©ãå¿ èŠãªãããéçºããŒã ã®èª°ãããããã®ç¹æš©ãæã£ãŠããå¯èœæ§ã¯ã»ãšãã©ãããŸãããã€ãŸããããŒã ãæ°ããåååãäœæããããšã決å®ãããã³ã«ãã¯ã©ã¹ã¿ãŒç®¡çè ã«é£çµ¡ããå¿ èŠããããŸããããã¯å°ããªäŒç€Ÿã«ãšã£ãŠã¯å®å šã«åãå ¥ãããããããããŸãããããããæé·ããã«ã€ããŠããã®ãããªçµç¹ã®æªåœ±é¿ã¯ããé¡èã«ãªããŸãã
éå±€åããŒã ã¹ããŒã¹ã®ç޹ä»
éå±€åååä»ãã¯ããããã®åé¡ã«å¯ŸåŠããããã«Kubernetesãã«ãããã³ã·ãŒïŒwg-multitenancyïŒã¯ãŒãã³ã°ã°ã«ãŒãã«ãã£ãŠéçºãããæ°ããæŠå¿µã§ããç°¡ç¥åããã圢åŒã§ã¯ãéå±€å矩ã¯éåžžã®Kuberneteså矩ã§ããã1ã€ã®ïŒãªãã·ã§ã³ã®ïŒèŠªå矩ãæãå°ããªã«ã¹ã¿ã ãªãœãŒã¹ãå«ãŸããŠããŸããããã«ãããæææš©ã®æŠå¿µããåååå ã®ãªããžã§ã¯ãã ãã§ãªããåååèªäœã«ãæ¡åŒµãããŸãã
æææš©ã®æŠå¿µã¯ã2ã€ã®è¿œå ã¿ã€ãã®é¢ä¿ãå®è£ ããŸãã
- : namespace' . : subnamespaces, .
ããã«ãããäžè¬çãªéçºããŒã ã®äž¡æ¹ã®åé¡ã解決ãããŸããã¯ã©ã¹ã¿ãŒç®¡çè ã¯ãå¿ èŠãªããªã·ãŒãšãšãã«1ã€ã®ãã«ãŒããã¹ããŒã¹ãäœæãããµãã¹ããŒã¹ãäœæããæš©éãããŒã ã¡ã³ããŒã«å§ä»»ã§ããŸãããã®ããã«ããŠãéçºè ã¯ãã¯ã©ã¹ã¿ãŒç®¡çè ã«ãã£ãŠèšå®ãããããªã·ãŒã«éåããããšãªããèªåã§äœ¿çšããããã®ãµãããŒã ã¹ããŒã¹ãäœæã§ããŸãã
å°ãç·Žç¿
éå±€ããŒã ã¹ããŒã¹ã¯ãHierarchical NamespaceControllerãŸãã¯HNCãšåŒã°ããKubernetesæ¡åŒµæ©èœã䜿çšããŠå®è£ ãããŸããHNCã¯ã次ã®2ã€ã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã
- Managerã¯ã¯ã©ã¹ã¿ãŒã§åäœãããµãããŒã ã¹ããŒã¹ã管çããããªã·ãŒãªããžã§ã¯ããé åžããéå±€ãæå¹ã§ããããšã確èªããæ¡åŒµãã€ã³ãã管çããŸãã
kubectl-hnsãããšåŒã°ããkubectlãã©ã°ã€ã³ã«ããããŠãŒã¶ãŒã¯ãããŒãžã£ãŒãšå¯Ÿè©±ã§ããŸãã
ã³ã³ããŒãã³ãã®ã€ã³ã¹ããŒã«ã¬ã€ãã¯ããããžã§ã¯ããªããžããªã®ãªãªãŒã¹ããŒãžã«ãããŸãã
HNCãã©ã®ããã«æ©èœããããèŠãŠã¿ãŸããããåååãäœæããæš©éããªããšããŸãããååå
team-aãåç
§ããŠããã®äžã«ãµãåå空éãäœæã§ããŸã*ããã©ã°ã€ã³ã䜿çšãããšã次ã®ã³ãã³ããå
¥åã§ããŸãã
$ kubectl hns create svc1-team-a -n team-a
*æè¡çã«ã¯ã芪ã¹ããŒã¹ã«ããµãããŒã ã¹ããŒã¹ã¢ã³ã«ãŒããšåŒã°ããå°ããªãªããžã§ã¯ããäœæããŠãããHNCããµãããŒã ã¹ããŒã¹ãäœæããŸãã
ããã«ãããååãäœæãããŸã
svc1-team-aããµãããŒã ã¹ããŒã¹ã¯éåžžã®KubernetesããŒã ã¹ããŒã¹ãšåãã§ãããããååã¯äžæã§ããå¿
èŠãããããšã«æ³šæããŠãã ããã
次ã®ã³ãã³ãã䜿çšããŠãçµæã®æ§é ã衚瀺ã§ããŸã
treeã
$ kubectl hns tree team-a
# Output:
team-a
âââ svc1-team-a
芪ã¹ããŒã¹ã«ããªã·ãŒãããå Žåããããã¯åã«ã³ããŒãããŸã*ãããšãã°ããš
team-aåŒã°ããRBACRoleBindingããããšãsresãŸãããã®RoleBindingã¯ã察å¿ããåååã«ã衚瀺ãããŸãã
$ kubectl describe rolebinding sres -n svc1-team-a
# Output:
Name: sres
Labels: hnc.x-k8s.io/inheritedFrom=team-a # inserted by HNC
Annotations: <none>
Role:
Kind: ClusterRole
Name: admin
Subjects: âŠ
*ããã©ã«ãã§ã¯ãRBACã®RolesãšRoleBindingsã®ã¿ãåé åžãããŸãããKubernetesãªããžã§ã¯ããäŒæããããã«HNCãæ§æã§ããŸãã
æåŸã«ãHNCã¯ãéå±€ã«é¢ããæçšãªæ å ±ãå«ãã©ãã«ããããã®åååã«è¿œå ããŸãããããã¯ãä»ã®ããªã·ãŒãé©çšããããã«äœ¿çšã§ããŸããããšãã°ã次ã®NetworkPolicyãäœæã§ããŸãã
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-team-a
namespace: team-a
spec:
ingress:
- from:
- namespaceSelector:
matchExpressions:
- key: 'team-a.tree.hnc.x-k8s.io/depth' # Label created by HNC
operator: Exists
ãã®ããªã·ãŒã¯ãåå«ã«äŒæãããŸã
team-aãšãªããŸããŸãããããã®åå空éã®ãã¹ãŠã®éã§å
¥åãã©ãã£ãã¯ãèš±å¯ããŸããHNCã®ã¿ãã©ãã«ãããªãŒããå²ãåœãŠãããšãã§ããŸããçŸåšã®éå±€ãåæ ããããšãä¿èšŒãããŠããŸãã
HNCæ©èœã®è©³çްã«ã€ããŠã¯ããŠãŒã¶ãŒããã¥ã¢ã«ãåç §ããŠãã ããã
次ã®ã¹ããããšããã»ã¹ãžã®åå
éå±€ååå空éãçµç¹ã§åœ¹ç«ã€ãšæãããå Žåã¯ãããŒãžã§ã³HNC v0.5.1ãGitHubã§ å©çšå¯èœã§ãïŒ8æ28æ¥ãããªãªãŒã¹v0.5.2ãŸã§å©çšå¯èœ-çŽPerevi ..ïŒãããªããããã«ã€ããŠã©ãæãããããªããããã§ã©ããªåé¡ã解決ãããããããŠããªããããã«ã©ããªæ©èœã远å ãããããç¥ãããã§ããéçºã®åææ®µéã«ããä»ã®ãœãããŠã§ã¢ãšåæ§ã«ãæ¬çªç°å¢ã§HNCã䜿çšããå Žåã¯æ³šæãå¿ èŠã§ãããŸãããã£ãŒãããã¯ãå€ããã°å€ãã»ã©ãHNC1.0ã«æ©ãå°éã§ããŸãã
ãŸãããµãŒãããŒãã£ã®å¯çš¿è ããã®å¯çš¿ãæè¿ããŸãããã°ä¿®æ£ããããã«é¢ããæ å ±ãäŸå€ãç£èŠã®æ¹åãéå±€çãªãªãœãŒã¹ã®èŠç©ãããæ§æã®æé©åãªã©ã®æ°æ©èœã®ãããã¿ã€ãã³ã°ã«åœ¹ç«ã¡ãŸãã
ãªããžããªããã¥ãŒã¹ã¬ã¿ãŒããŸãã¯Slackã§ã åãåãããã ããããæèŠããåŸ ã¡ããŠãããŸãïŒ
æåã®çºè¡šã¯ãHierarchical NamespaceControllerã®ãœãããŠã§ã¢ãšã³ãžãã¢å Œãã¯ãã«ã«ãªãŒãã§ããAdrianLudwinã«ãã£ãŠè¡ãããŸããã
ããŒãã¹ïŒããŒãããããšåé¡
åé¡ãæçš¿ããŠãã ãã-ãã£ãšæ¥œããã§ãïŒãã°ã¯æåã«åæãããæ©èœèŠæ±ãåªå ããããã®åŸãäœæ¥èšç»ãŸãã¯ããã¯ãã°ã«å«ãŸããŸãã
HNCã¯ãŸã GAã¹ããŒã¿ã¹ã«éããŠããªãããã倱ãããã«ã¯ãããªãæ§æãªããžã§ã¯ãïŒGitãªããžããªã«ä¿åãããŠããªããªããžã§ã¯ããªã©ïŒãå«ãã¯ã©ã¹ã¿ãŒã§HNCã䜿çšããå Žåã¯æ³šæãå¿ èŠã§ãã
ãã¹ãŠã®HNCã®åé¡ã¯ã察å¿ããäœæ¥èšç»ã«å«ãŸããŠããŸããçŸåšããã®èšç»ã®æ¬¡ã®äž»èŠãªæ®µéã宿œãŸãã¯èšç»ãããŠããŸãã
- v1.0ïŒIã®çµãã-2021幎ã®IIååæã®å§ãŸããçç£ã«ã¯HNCããå§ãããŸãã
- v0.8ïŒ2021幎åé ãæ°ããéèŠãªæ©èœã衚瀺ãããå ŽåããããŸãã
- v0.7ïŒ2020幎æ«ãã»ãšãã©ã®å Žåãv1beta1APIã衚瀺ãããŸãã
- v0.6: 2020-; v1alpha2 API .
- v0.5: 2020-; , .
- v0.4: 2020-; API production-.
- v0.3: 2020-; UX subnamespace'.
- v0.2: 2019-; non-production.
- v0.1: 2019-; . , - .
- : .
翻蚳è ããã®PS
ç§ãã¡ã®ããã°ãèªãã§ãã ããïŒ