중첩된 Hierarchical Namespace를 만들 때 오류를 방지하는 방법

8492 단어 Kubernetestech

Version


https://github.com/kubernetes-sigs/hierarchical-namespaces/releases/tag/v0.9.0

중첩 Subnamespace Anchor 생성 오류


다음과 같이 선언문에 SubnamespaceAnchor를 정의하여 중첩된 Hieracchical Namespace를 만들려고 하면 오류가 발생합니다.
subnamespaceanchor.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: parent
---
apiVersion: hnc.x-k8s.io/v1alpha2
kind: SubnamespaceAnchor
metadata:
  name: child
  namespace: parent
---
apiVersion: hnc.x-k8s.io/v1alpha2
kind: SubnamespaceAnchor
metadata:
  name: grandchild
  namespace: child
$ kubectl apply -f subnamespaceanchor.yaml
namespace/parent created
subnamespaceanchor.hnc.x-k8s.io/child created
Error from server (NotFound): error when creating "subnamespaceanchor.yaml": namespaces "child" not found
grandchildsubnamespaceanchor를 만드는 시점에childnamespace를 만들지 않았기 때문에 처음 적용할 때 not found 오류가 발생합니다.
다시 한 번 응용하면 성공할 것이다.
$ kubectl apply -f subnamespaceanchor.yaml
namespace/parent unchanged
subnamespaceanchor.hnc.x-k8s.io/child unchanged
subnamespaceanchor.hnc.x-k8s.io/grandchild created
$ kubectl hns tree parent
parent
└── [s] child
    └── [s] grandchild

오류 방지 방법


현재는 Subnamespace Anchor 대신 Namespace 및 Hierarchy Configuration을 각각 정의하는 방법만 있습니다.
https://github.com/kubernetes-sigs/hierarchical-namespaces/blob/master/docs/user-guide/how-to.md#organize-full-namespaces-into-a-hierarchy
hierarchyconfiguration.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: parent
---
apiVersion: v1
kind: Namespace
metadata:
  name: child
---
apiVersion: v1
kind: Namespace
metadata:
  name: grandchild
---
apiVersion: hnc.x-k8s.io/v1alpha2
kind: HierarchyConfiguration
metadata:
  name: hierarchy # 名前は"hierarchy"で固定
  namespace: child
spec:
  parent: parent
---
apiVersion: hnc.x-k8s.io/v1alpha2
kind: HierarchyConfiguration
metadata:
  name: hierarchy
  namespace: grandchild
spec:
  parent: child
$ kubectl apply -f hierarchyconfiguration.yaml
namespace/parent created
namespace/child created
namespace/grandchild created
hierarchyconfiguration.hnc.x-k8s.io/hierarchy created
hierarchyconfiguration.hnc.x-k8s.io/hierarchy created
$ kubectl hns tree parent
parent
└── child
    └── grandchild
Subnamespace Anchor가 없어 Subnamespace 식별자[s]가 없지만 propageation은 정상적으로 작동합니다.
$ kubectl hns config set-resource configmaps --mode Propagate
$ kubectl create configmap sample-config --from-literal=key1=config1 -n parent
configmap/sample-config created

$ kubectl get configmap -A | grep -E "NAME|sample-config"
NAMESPACE            NAME                                 DATA   AGE
child                sample-config                        1      1s
grandchild           sample-config                        1      1s
parent               sample-config                        1      1s

과제.


이 방법은propagion에도 문제가 없지만,Subnamespace의 제작 권한을 넘길 수 없는 Namespace의 권한이 있는지의 여부와 같은 과제가 있다.
Hierrarchical Namespaces의 동력 중 하나로 Namespace 제작에 필요한 Cluster 등급에 강한 권한을 부여하지 않고 제한적인 Namespace의 관리 권한 이전을 가능하게 하려는 목적이다.
Similarly, you might want to allow some teams to create namespaces themselves as isolation units for their own services. However, namespace creation is a privileged cluster-level operation, and you typically want to control this privilege very closely.
https://github.com/kubernetes-sigs/hierarchical-namespaces/blob/master/docs/user-guide/concepts.md#why-use-hierarchical-namespaces
다만, 이번 방법에는 Namespace 권한이 필요하기 때문에 이쪽 기사와 같이 Subnamespace 권한을 위임할 수는 없다.
https://zenn.dev/snagasawa/articles/8c7bba139bb17d
GitOps/CIOps라면 문제없지만, 이런 전제에서 개발자 스스로는 Namespace 선언문을 쉽게 써서 apply를 테스트할 수 없겠죠.(말은 그렇지만 주파수는 그렇게 많지 않다.)

참조 링크


https://github.com/kubernetes-sigs/hierarchical-namespaces/issues/117

좋은 웹페이지 즐겨찾기