---
title: 네임스페이스
content_template: templates/concept
weight: 30
---

{{% capture overview %}}

쿠버네티스는 동일 물리 클러스터를 기반으로 하는 복수의 가상 클러스터를 지원한다.
이들 가상 클러스터를 네임스페이스라고 한다.

{{% /capture %}}


{{% capture body %}}

## 복수의 네임스페이스를 사용하는 경우

네임스페이스는 복수의 팀이나, 프로젝트에 걸쳐서 많은 사용자가 있는 환경에서 사용하도록
만들어졌다. 사용자가 거의 없거나, 수 십명 정도가 되는 경우에는, 네임스페이스를 고려할 
필요가 전혀 없다. 네임스페이스가 제공하는 기능이 필요할 때 사용하도록 하자.

네임스페이스는 이름의 범위를 제공한다. 리소스의 이름은 네임스페이스 내에서 유일해야하지만, 네임스페이스를 통틀어서 유일할 필요는 없다.

네임스페이스는 클러스터 자원을 ([리소스 쿼터](/docs/concepts/policy/resource-quotas/)를 통해) 복수의 사용자 사이에서 나누는 방법이다.

다음 버전의 쿠버네티스에서는, 같은 네임스페이스의 오브젝트는 기본적을 동일한 접근 
제어 정책을 갖게 된다.

같은 소프트웨어의 다른 버전과 같이 단지 약간의 차이가 있는 리소스를 분리하기 위해서 
복수의 네임스페이스를 사용할 필요가 있다. 동일한 네임스페이스에 있는 리소스를 
구분하기 위해서는 [레이블](/docs/user-guide/labels)을 사용한다.

## 네임스페이스 다루기

네임스페이스의 생성과 삭제는 [네임스페이스 관리자 가이드 문서](/docs/admin/namespace)에 
기술되어 있다.

### 네임스페이스 조회

사용중인 클러스터의 현재 네임스페이스를 나열할 수 있다.

```shell
$ kubectl get namespaces
NAME          STATUS    AGE
default       Active    1d
kube-system   Active    1d
kube-public   Active    1d
```

쿠버네티스는 처음에 세 개의 초기 네임스페이스를 갖는다.

   * `default` 다른 네임스페이스가 없는 오브젝트를 위한 기본 네임스페이스
   * `kube-system` 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스
   * `kube-public` 이 네임스페이스는 자동으로 생성되며 모든 사용자(인증되지 않은 사용자 포함)가 읽기 권한으로 접근할 수 있다. 이 네임스페이스는 주로 전체 클러스터 중에 공개적으로 드러나서 읽을 수 있는 리소스를 위해 예약되어 있다. 이 네임스페이스의 공개적인 성격은 단지 관례이지 요구 사항은 아니다.

### 요청에 네임스페이스 설정하기

임시로 네임스페이스를 요청에 설정하기 위해서는, `--namespace` 플래그를 사용한다.

예를 들면,

```shell
$ kubectl --namespace=<insert-namespace-name-here> run nginx --image=nginx
$ kubectl --namespace=<insert-namespace-name-here> get pods
```

### 선호하는 네임스페이스 설정하기

이후 모든 kubectl 명령에서 사용될 네임스페이스를 컨텍스트에 영구적으로 저장할 수 있다.

```shell
$ kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>
# 확인하기
$ kubectl config view | grep namespace:
```

## 네임스페이스와 DNS

[서비스](/docs/user-guide/services)를 생성하면, 대응되는 
[DNS 엔트리](/docs/concepts/services-networking/dns-pod-service/)가 생성된다.
이 엔트리는 `<서비스-이름>.<네임스페이스-이름>.svc.cluster.local`의 형식을 갖는데,
이는 컨테이너가 `<서비스-이름>`만 사용하는 경우, 네임스페이스 내에 국한된 서비스로
연결된다. 개발, 스테이징, 운영과 같이 여러 네임스페이스 내에서 동일한 설정을 
사용하는 경우에 유용하다. 네임스페이스를 넘어서 접근하기 위해서는, 전체 주소 도메인 
이름(FQDN)을 사용해야 한다.

## 모든 오브젝트가 네임스페이스에 속하지는 않음

대부분의 쿠버네티스 리소스(예를 들어, 파드, 서비스, 레플리케이션 컨트롤러 외)는 
네임스페이스에 속한다. 하지만 네임스페이스 리소스 자체는 네임스페이스에 속하지 않는다.
그리고 [nodes](/docs/admin/node)나 퍼시스턴트 볼륨과 같은 저수준 리소스는 어느
네임스페이스에도 속하지 않는다.

네임스페이스에 속하지 않는 쿠버네티스 리소스를 조회하기 위해서는,

```shell
# 네임스페이스에 속하는 리소스
$ kubectl api-resources --namespaced=true

# 네임스페이스에 속하지 않는 리소스
$ kubectl api-resources --namespaced=false
```

{{% /capture %}}
