ãã®è¨äºã¯ãCYBOZU SUMMER BLOG FES '25ã®è¨äºã§ãã
ããã«ã¡ã¯ï¼ã¯ã©ã¦ãåºç¤æ¬é¨ PDXï¼Platform Developer Experienceï¼ãã¼ã ã®ã³ãããï¼@BkNkbotï¼ã§ãã ä»åã¯é£è¼ããµã¤ãã¦ãºã®Kubernetesãã©ãããã©ã¼ã ãæ¯ããOSSãã®3åç®ã¨ãã¦ãã½ãããã«ãããã³ã·ã¼ç°å¢ã§ããã³ã管çãè¡ãKubernetesã³ã³ããã¼ã©ã¼ã®ãAccurateãã«ã¤ãã¦ç´¹ä»ãã¾ãã
ãµã¤ãã¦ãºã®Kubernetesã¯ã©ã¹ã¿ã®ç¾ç¶
ãµã¤ãã¦ãºã§ã¯1ã¤ã®Kubernetesã¯ã©ã¹ã¿ãè¤æ°ã®ããã³ãï¼Kubernetesã¯ã©ã¹ã¿ã¼ãªã½ã¼ã¹ã¸ã®ã¢ã¯ã»ã¹æ¨©ãæã¤éçºãã¼ã ã®éã¾ãï¼ã§å ±æãã¦ãã¾ãã ãã®å ±æã®ããæ¹ã«ã¯ç¨®é¡ãããã¤ãããã®ã§ãã¾ãã¯æ¬é¡ã«å ¥ãåã«å¼ç¤¾ã®ç¾ç¶ãç´¹ä»ãã¾ãã
ãã«ãããã³ã·ã¼
è¤æ°ã®ã¦ã¼ã¶ã¼ãåããµã¼ãã¼ãã¢ããªã±ã¼ã·ã§ã³ãªã©ã®ã·ã¹ãã ããµã¼ãã¹ãå ±æãã¦ä½¿ãæ¹å¼ããã«ãããã³ã·ã¼ã¨å¼ã³ã¾ãã ãã®è¨äºã«ããã¦ã¯ã1ã¤ã®Kubernetesã¯ã©ã¹ã¿ã¼ãè¤æ°ã®ããã³ãã§å ±æãããã¨ãæãã¦ãã¾ãã
ãã«ãããã³ã·ã¼ã¢ãã«
ãã«ãããã³ã·ã¼ã«ã¯å¤§ãã2ã¤ã®å½¢ãããã¾ãã
- ã½ãããã«ãããã³ã·ã¼: 1ã¤ã®clusterãå ±æããNamespace, RBAC, NetworkPolicy, ResourceQuota, Pod Securityãªã©ã®è¨å®ã§è«ççã«éé¢ããæ¹å¼ã
- ãã¼ããã«ãããã³ã·ã¼: clusterãControl Planeãåé¢ï¼ä¾ï¼ã¯ã©ã¹ã¿åä½ã®åå²ãkube-apiserverçã®ä»®æ³ã¯ã©ã¹ã¿ãå°ç¨ãã¼ã / ãããã¯ã¼ã¯ï¼ããå¼·ãå¢çãæãããæ¹å¼ã
ãµã¤ãã¦ãºã§ã¯ãã½ãããã«ãããã³ã·ã¼ãæ¡ç¨ãã¦ãã¾ãã
Accurateã¨ã¯
Accurateã¯ãå¤§è¦æ¨¡ãªãã«ãããã³ã·ã¼ç°å¢ã®éç¨æ¯æ´ãããKubernetesã³ã³ããã¼ã©ã¼ã§ãã Kubernetesä¸ã§Namespaceã«è¦ªåé¢ä¿ãæããã親NamespaceããåNamespaceã¸ãªã½ã¼ã¹ãã©ãã«ãã¢ããã¼ã·ã§ã³ãæ£ç¢ºã«ç¶æ¿ã»ä¼æ¬ããããã¨ãã§ãã¾ãã
Accurateã§ã¯ãããã³ãã¦ã¼ã¶ã¼èªèº«ãåNamespaceã®ä½æã»åé¤ãå®è¡ã§ããããã«ãå°ç¨ã®ã«ã¹ã¿ã ãªã½ã¼ã¹ã¨kubectlãã©ã°ã¤ã³ãæä¾ãã¦ãã¾ãã ããNamespaceãã親ãã¨ãããã®ä¸ã«è¤æ°ã®ãåãNamespaceãé層æ§é ã§ã¶ãä¸ãããã¨ã§ã親ã§è¨å®ããã¢ã¯ã»ã¹å¶å¾¡ãããªã·ã¼ãåã«ãé©ç¨ããã¨ãã£ãä½¿ãæ¹ãå¯è½ã§ãã ããã«ãããã¯ã©ã¹ã¿ç®¡çè ã®ä»å¨ãªãã«ããã³ãã¦ã¼ã¶ã¼èªèº«ã§ãï¼æ¨©éãä»ä¸ããã¦ããç®æã«é¢ãã¦ã¯ï¼Namespaceã管çã§ããããã«ãªãã¾ãã
çã¾ããèæ¯
Accurateãçã¾ããèæ¯ã«ã¯ãæ¢åã®ãã«ãããã³ã·ã¼ç®¡çãã¼ã«ã§ããHierarchical Namespace Controller ï¼ä»¥ä¸ãHNCï¼ã«å¯¾ãã彿ï¼Accurateéçºãéå§ãã2021å¹´ããï¼ã®èª²é¡æãããã¾ããã HNCã¯Kuberneteså ¬å¼ã®SIGãéçºããOSSã§ãNamespaceã親åé層ã§ç®¡çããRBACãNetworkPolicyãªã©ã親ããåã¸ä¼æ¬ã§ãã便å©ãªã³ã³ããã¼ã©ã¼ã§ãã ãããã彿ã®HNCã¯åºæ¬çã«ãå ¨ã¦ã®ãªã½ã¼ã¹ãã«ã¹ã¿ã ã¢ããã¼ã·ã§ã³ãä»ããªãéãåNamespaceã¸ä¼æ¬ããè¨è¨ï¼éç§°ãªããã¢ã¦ãæ¹å¼ï¼ã1ã«ãªã£ã¦ããããã®æåããµã¤ãã¦ãºã®ã¦ã¼ã¹ã±ã¼ã¹ã«ã¯ããããã¾ããã§ããã
ãã¨ãã°ãåNamespaceã«ç¹å®ã®Secretã®ã¿å ±æããããã¨ãã£ãã±ã¼ã¹ãããã¨ãã¾ãã ãã®ã¨ããHNCã§ã¯Secretãèªåçæãããå ´åã«ã«ã¹ã¿ã ã¢ããã¼ã·ã§ã³ãä»ãã¥ãããæå³ããå ¨ã¦ã®åNamespaceã«Secretãã³ãã¼ããã¦ãã¾ãæããããã¾ãã ãããã®èª²é¡ã解決ããããã«ã以ä¸ã®ç¹å¾´ãæã¤Accurateãéçºãã¾ãããã¡ãªã¿ã«ãAccurateã¯ããªã½ã¼ã¹ã®ä¼æ¬ãæ£ç¢ºã«å¶å¾¡ã§ãããã¨ããã¨ããããååãä»ãããã¦ãã¾ãã
- ãªããã¤ã³æ¹å¼ã§ã®å®å ¨ãªä¼æ: ãªã½ã¼ã¹ã¯åºæ¬çã«åNamespaceã«ä¼æ¬ãããªããç¹å®ã®ã¢ããã¼ã·ã§ã³ãä»ãããªã½ã¼ã¹ã®ã¿ã伿¬ããä¸è¦ãªãªã½ã¼ã¹ã®æ¡æ£ã鲿¢
- Namespace-scoped resourcesï¼Namespaceå ã«å«ã¾ãããªã½ã¼ã¹ï¼ã伿¬: ã©ããªNamespace-scoped resourcesã§ã伿¬å¯¾è±¡ã«ã§ããï¼ç¨®é¡ã¯è¨å®ã§å¶å¾¡å¯è½ï¼
- å°ç¨ã®ã«ã¹ã¿ã ãªã½ã¼ã¹ããã©ã°ã¤ã³ãè£å©æ©è½
- SubNamespaceï¼ããã³ãã¦ã¼ã¶ã¼èªèº«ãã«ã¹ã¿ã ãªã½ã¼ã¹ã使ã£ã¦å Namespace ã使ã»åé¤ã§ãããã¯ã©ã¹ã¿ç®¡çè ã®ä»å¨ãªãã«ããã³ãã¦ã¼ã¶ã¼èªèº«ã§ãç°å¢æ§ç¯ãå¯è½ã
- Template Namespaceï¼Namespace ã®è¨å®ãéå½¢åããæ°è¦ Namespace ç«ã¡ä¸ãæã«å ±éã®ãã®ã¯ããã«è¨å®ã§ãã
1: ãã®å¾ã®HNCã¯ãããã©ã«ãã§RBAC ã®ã¿ä¼æ¬ãããSecretãConfigmapã¯ä¼æ¬ãããªãããã«æ¹åããã¾ããã
åºæ¬çãªä½¿ãæ¹
説æã°ãããã¦ãã¦ãã¤ã¡ã¼ã¸ãæ´ããªãã¨æãã®ã§ãã©ããªãã¨ãã§ããã触ã£ã¦ã¿ã¾ãããã
# demoç¨ã®E2Eç°å¢ãåæè¨å®ãã git clone https://github.com/cybozu-go/accurate cd accurate go install github.com/aquaproj/aqua/v2/cmd/aqua@latest cd e2e PATH=$(cd ..; pwd)/bin:$PATH KUBECONFIG=$(pwd)/.kubeconfig export KUBECONFIG make start
# Root Namespaceãè¨å®ãã kubectl create ns root1 kubectl accurate ns set-type root1 root # è¨å®ç¶æ³ã確èªãã kubectl accurate list # 以ä¸ã®ããã«è¡¨ç¤ºããã # ⯠kubectl accurate list # âââ root1
# åã®NameSpaceï¼éç§°SubNameSpaceï¼ãè¨å®ãã kubectl accurate sub create sub1 root1 # è¨å®ç¶æ³ã確èªãã kubectl accurate list # 以ä¸ã®ããã«è¡¨ç¤ºããã # ⯠kubectl accurate list # âââ root1 # âââ sub1
# 伿ããããªã½ã¼ã¹ã使ãã cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: namespace: root1 name: secret annotations: accurate.cybozu.com/propagate: update type: Opaque stringData: foo: bar EOF # 伿ããã¦ãããã¨ãç¢ºèª kubectl get secrets -n root1 kubectl get secrets -n sub1
# template Namespace ã§å ±éããè¨å®ã使ã # template Namespaceã®ä½æ kubectl create ns template1 kubectl accurate ns set-type template1 template # root1 Namespaceã§template1ããã³ãã¬ã¼ãã¨ãã¦å©ç¨ããããã«è¨å®ãã kubectl accurate template set root1 template1 # 伿ããããªã½ã¼ã¹ã使ãã cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: template1 # å ã»ã©ä½æããtemplate1ãæå®ãã name: admin annotations: accurate.cybozu.com/propagate: update roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: admin subjects: - kind: Group name: foo apiGroup: rbac.authorization.k8s.io EOF # templateãå©ç¨ããNameSpaceãããã¦ãã®åå«ã«ããªã½ã¼ã¹ãæ£ãã伿ãã¦ãããã¨ã確èªãã kubectl get rolebinding -n template1 kubectl get rolebinding -n root1 kubectl get rolebinding -n sub1
ã©ãå©ç¨ãã¦ããã
å¼ç¤¾ã§ã¯ãåãããã¯ããã¼ã ããµã¼ãã¹åä½ã§è¦ªNamespaceãå²ãå½ã¦ã¦ããããã®ä¸ãªããã¼ã ãèªåãã¡ã§åNamespaceã使ã»åé¤ãã¦ããããã¨ã«ãã¦ãã¾ãã
ãã¨ãã°ãteam-cybozuãã¨ãã親Namespaceã®ä¸ã«ãcybozu-argocdããcybozu-devãçã®åNamespaceããã¼ã ã¡ã³ãã¼ã ãã§è¿½å ãããã¨ãã§ãã¾ãã
ã¾ãããããã«ã¯è¦ªããå ±éã®RBACè¨å®ï¼ããã³ããã¼ã ã«ç®¡çè æ¨©éãä¸ããRoleBindingï¼ãResourceQuota, imagePullSecretãªã©ãèªåçã«ä¼æ¬ããã¾ãã
ãã®éãã¯ã©ã¹ã¿ç®¡çè
ã¯äºã親Namespaceã«é©åãªRoleBindingã使ããããã«accurate.cybozu.com/propagate=updateã¢ããã¼ã·ã§ã³ãä»ãã¦ããã¨ãåNamespaceã«ããã®æ¨©éãèªåä»ä¸ãããããã«è¨å®ã§ãã¾ãã
âââ team-cybozu # 親NameSpaceï¼ãcybozu-argocdããcybozu-devããcybozu-monitoringããåã¨ãã¦æã¤ï¼ããããå§ç¹ã«ãã¦åã«å ±éè¨å®çã伿ãã â âââ cybozu-argocd # åNameSpaceï¼ãteam-cybozuããè¦ªã«æã¤ï¼ â âââ cybozu-dev # ä¸ä¾ã¨ãã¦ãteam-cybozuã¡ã³ãã¼ã¯ãdev-xxxx-test-appãã¨ããæ¤è¨¼ç¨NSãããããã§ä½æã»åé¤ãããã¨ãã§ãã â âââ cybozu-monitoring # team-cybozuã¡ã³ãã¼ã¯ä»¥ä¸ã«ãããteam-pdxãã®åNameSpaceã¯è¦ªãéãããèªç±ã«ä½æã§ããªã âââ team-pdx âââ pdx-dev
ããã³ãã¦ã¼ã¶ã¼èªèº«ãNamespaceã管çã§ãããã¨ã§ããã©ãããã©ã¼ã ãã¼ã ã®éç¨è² è·è»½æ¸ã¨åãã¼ã ã®ç´ æ©ãç°å¢æ§ç¯ã«ãå¯ä¸ãã¦ãã¾ãã
ã¾ããAccurateã¨çµã¿åããã¦ãArgo CDã®ãã«ãããã³ã·ã¼éç¨ãæ¯æ´ããå¥ééçºã®ã³ã³ããã¼ã©ã¼ãCattageããç¨ãã¦ãã¾ãã Cattageã«ã¤ãã¦ã¯ç¬¬4åã®è¨äºã§ç´¹ä»äºå®ã§ãã®ã§ã次åããã²ã覧ãã ããï¼
ä¸è¬çãªã½ããã¦ã§ã¢ã¨ãã¦ã®å©ç¨å¯è½æ§
Accurateã¯ãµã¤ãã¦ãºç¤¾å ã ãã§ãªãããã¡ããå¤é¨çµç¹ã«ããã¦ãæç¨ãªã¦ã¼ã¹ã±ã¼ã¹ãããã¨èãã¦ãã¾ãã ãã¨ãã°ãä¸ã¤ã®Kubernetesã¯ã©ã¹ã¿ãè¤æ°ãã¼ã ã§å ±æããä¼ç¤¾ã®ã±ã¼ã¹ã§ãã
å¤§è¦æ¨¡ãªä¼æ¥å ãã©ãããã©ã¼ã ã§ã¯ãããã¸ã§ã¯ããã¨ã«ã¯ã©ã¹ã¿ãåãã代ããã«ãä¸ã¤ã®ã¯ã©ã¹ã¿å ã§Namespaceã§è«çåé¢ããæ¹ããªã½ã¼ã¹å¹çãè¯ãå ´åãããã¾ãã
ãããããããå®ç¾ããããã«ã¯ãåãã¼ã ã«ã¯ã©ã¹ã¿ã¼å ¨ä½ã®ç®¡çè æ¨©éãæ¸¡ãããã« ãNamespaceåä½ã§é©åã«æ¨©éå§è²ããããå ±éããªã·ã¼ãç¶ç¶çã«é©ç¨ããä»çµã¿ããå¿ è¦ã§ãã Accurateã¯ã¾ãã«ãã®ãã¼ãºã«å¿ãããã®ã§ãéçºè ã«Namespace管çãå§è²ãã¤ã¤ã»ãã¥ãªãã£ã¨çµ±å¶ãä¿ã¤ææ®µã¨ãã¦æ´»ç¨ã§ããã¨æãã¾ãã
ã¾ãã2025å¹´4æ17æ¥ã«HNCãã¢ã¼ã«ã¤ãããããã¨ãåããHNCã®ä»£æ¿ã¨ãã¦Accurateãæ¤è¨ããçµç¹2ãããããã§ãã å®éã«HNCãã¢ã¼ã«ã¤ããããéã«ããKubernetes Organization Member ãã AccurateãHNCã¨ããä¼¼ãããã¸ã§ã¯ãã§ããã¨è§¦ãããã¦ãã¾ããã ãµã¤ãã¦ãºä»¥å¤ã®çµç¹ã§Accurateãå©ç¨ããã¦ãããã¨ããããæ¬æ ¼çã«å©ç¨ãã¦ç¶ç¶çã«ã³ã³ããªãã¥ã¼ããã¦ãããæµ·å¤ã®ã¦ã¼ã¶ã¼ããã¾ãã
2: 以ä¸åè - https://ca-srg.dev/1d94358b43f78002917fc30c657b53bd
ãããã«
æ¬è¨äºã§ã¯ããµã¤ãã¦ãºãéçºã»éç¨ãã¦ããKubernetesã³ã³ããã¼ã©ã¼ãAccurateãã«ã¤ãã¦ç´¹ä»ãã¾ããã
便å©ãª OSS ã§ãéçºä½å¶ãå©ç¨è æ°ã®å¤åã«ãã£ã¦ãçªç¶ã¢ã¼ã«ã¤ãããã¦ãã¾ããã¨ãããã¾ãã ãã®ç¹ãèªç¤¾éçºã®å ´åã¯ç§ãã¡èªèº«ã®åºç¤ã§ä½¿ãç¶ããåæã§éçºã»ã¡ã³ããã³ã¹ããããããé·æçã«å®å¿ãã¦å©ç¨ã§ãã¾ãã èªç¤¾éçºãããã¼ã«ãOSSåãããã¨ã¯ã社å¤å©ç¨è ã¨ã®èª¿æ´ãªã©ã§è¦å´ãããã¡ãªãããããã¾ããããã¼ã«èªä½ã®ãµã¤ãåãé²ããã¨ãã§ããå¥å ¨ãªéçºãç¶æãããã¨ãã§ããã¡ãªããã大ããã¨èãã¦ãã¾ãã ã¾ããèªç¤¾ãã¼ã«ãOSSåãããã¨ã§ç¤¾å ã¡ã³ãã¼ãããOSSã身è¿ã«æãããã¨ãã§ããä»ã®OSSã«å¯¾ããã³ã³ããªãã¥ã¼ããä¿ã广ãããã¾ãã
ãããã®è¨äºã§Accurateã«èå³ãæãããæ¹ãããã°ããã²è§¦ã£ã¦ã¿ã¦ãã ããããããã°ã³ã³ããªãã¥ã¼ãããå¾ ã¡ãã¦ãã¾ãï¼