본문 바로가기

Kubernetes(k8s)/k8s 네임스페이스

k8s의 네임스페이스 란?

1.        Namespace

         1.1.        정의

 

쿠버네티스에서 네임스페이스는 단일 클러스터 내에서의 리소스 그룹 격리 메커니즘을 제공한다. 리소스의 이름은 네임스페이스 내에서 유일해야 하며, 네임스페이스 간에서 유일할 필요는 없다. 네임스페이스 기반 스코핑은 네임스페이스 기반 오브젝트 (예: 디플로이먼트, 서비스 등) 에만 적용 가능하며 클러스터 범위의 오브젝트 (예: 스토리지클래스, 노드, 퍼시스턴트볼륨 등) 에는 적용이 불가능하다.

 

 

         1.2.        사용 목적

 

     리소스 격리

단일 물리적 클러스터 내에 별도의 가상 클러스터를 생성하여 리소스 충돌을 방지하여 Pod, 서비스 및 영구 볼륨과 같은 리소스가 의도치 않게 서로 간섭하지 않도록 합니다.

 

     액세스 제어 및 RBAC

Kubernetes는 네임스페이스 수준에서 역할 기반 액세스 제어(RBAC)를 구현하여 다양한 그룹이나 사용자에 대해 세분화된 액세스 제어 정책을 정의하여 특정 네임스페이스 내에서 수행할 수 있는 작업을 제한할 수 있다. 이는 서로 다른 팀 또는 애플리케이션이 동일한 클러스터를 공유하는 다중 테넌트 환경에서 특히 유용하다.

 

     조직 구조

네임스페이스는 소유권, 기능 또는 환경에 따라 리소스를 구성하고 분류하는 방법을 제공한다. 예를 들어 "프로덕션", "개발" 또는 "테스트"와 같은 네임스페이스를 생성하여 대규모 배포에서 리소스를 더 쉽게 관리하고 찾을 수 있다.

 

     리소스 할당량 및 제한

Kubernetes를 사용하면 네임스페이스당 리소스 할당량 및 제한을 설정할 수 있다. 하나의 네임스페이스가 과도한 리소스를 소비하고 다른 네임스페이스 또는 전체 클러스터에 부정적인 영향을 미치는 것을 방지할 수 있다.

 

     네트워크 격리

별도의 네트워크 정책을 만들고 동일한 네임스페이스 내에서 또는 네임스페이스 간에 포드와 서비스 간의 통신을 제어할 수 있다. 이는 보안 및 네트워크 세분화를 강화한다.

 

     테넌트 격리

다중 테넌트 환경에서 네임스페이스를 사용하여 서로 다른 테넌트, 고객 또는 애플리케이션을 격리하여 실수로 또는 악의적으로 서로에게 영향을 미치지 않도록 할 수 있다.

 

     개발 및 테스트

개발자는 네임스페이스를 사용하여 프로덕션 환경에 영향을 주지 않고 개발, 테스트 및 디버깅을 위한 격리된 환경을 만들 수 있다.

 

     리소스 관리

네임스페이스 수준의 리소스 관리를 통해 네임스페이스별로 리소스 활용, 할당 및 효율성을 모니터링하고 관리할 수 있다.

 

 

         1.3.        기본 네임스페이스

 

     default

     Namespace를 지정하지 않은 경우에 기본적으로 할당되는 Namespace이다.

 

     kube-system

     쿠버네티스 시스템에 의해 생성되는 API 오브젝트들을 관리하기 위한 Namespace이다.

 

     kube-public

     클러스터 내 모든 사용자로부터 접근 가능하고 읽을 수 있는 오브젝트들을 관리하기 위한 Namespace이다.

     사용자가 직접 다루지는 않지만 누구든 접근이 가능하여 주의해야 한다.

 

     kube-node-lease

     쿠버네티스 클러스터 내 노드의 연결 정보를 관리하기 위한 Namespace이다.

     사용자가 직접 다루기보단, 쿠버네티스 자체적으로 컨트롤플레인과 노드간의 연결을 잘 하기 위해서 lease라는 오브젝트를 관리하게 된다.