Kubernetes

2. Namespace 에 의한 가상 클러스터의 분리

Coding Machine 2019. 10. 18. 18:26

Kubernetes에는 Namespace라고 불리는 가상적인 Kubernetes 클러스터 분리기능이 있습니다. 완전한 분리 레벨은 아니기 때문에 사용처는 한계가 있지만, 1개의 Kubernetes 클러스터를 여러 팀에서 사용한다거나, 프로덕션 환경 / 스테이징 환경 / 개발 환경 등과 같이 환경 마다 분할한다거나 할 수 있습니다.


초기 상태에서는 하기의 3개의 Namespace가 작성되어 있습니다.


  • kube-System
    • Kubernetes 클러스터의 컴포넌트와 애드온이 디플로이된 Namespace
  • kube-public
    • 모든 유저가 이용할 수 있는 ConfigMap 등을 배치하는 Namespace
  • default
    • 기본 Namespace

kube-system은 관습적으로 Kubernetes Dashboard라고 하는 시스템 컴포넌트와 애드온이 위치하고 있는 시스템을 디플로이하기 위해 작성된 Namespace 입니다. kube-public은 관습적으로 모든 유저가 공통으로 이용하는 설정값 등을 보존하기 위해 작성된 Namespace 입니다. 그리고 default는 그 이름 그대로 기본 Namespace이며, 유저가 임의의 리소스를 등록하게 되면 사용할 수 있습니다. 목적에 따라서 임의의 Namespace를 작성할 수 있지만, 1개의 Kubernetes 클러스터를 복수의 목적으로 공유이용할 예정이 아닌, 시스템이 복잡하지 않는 경우에는 default Namespace를 이용해도 문제가 없습니다.

매니저 서비스와 구축 도구를 사용하여 구축된 대부분의 Kubernetes 클러스터는 나중에 설명하는 RBAC(Role-Based Access Control)이 기본값으로 유효하게 됩니다. 또한 일부 환경에서는 나중에 설명할 NetworkPolicy를 이용하는 것이 가능합니다. RBAC는 아래의 그림과 같이 클러스터 조작에 관한 권한을 Namespace 마다 나누는 것이 가능하며, Network Policy와 함께 조합하여 Namespace 간의 통신의 제어를 실행하는 구조입니다. Namespace 만으로는 높은 분리성이 확보되어 있지 않지만, RBAC와 Network Policy를 이용하는 것으로 분리성을 높일 수 있습니다.