Namespace
December 7, 2025

Namespace란?
Namespace는 리소스를 '논리적'으로 구분하는 단위이다.- 예를들어,
Database라는Namespace에는 데이터베이스에 관련된Pod,Service,Deployment등의 리소스를 모아두고,Monitoring이라는Namespace에는 모니터링에 관련된Pod,Service,Deployment등의 리소스를 모아두고 분리해서 관리할 수 있다.
네임스페이스는 논리적으로 구분되는 것이기 때문에 다른
Namespace에 있는 리소스라도 서로 통신은 할 수 있다
Namespace의 필요성
- 목적에 맞는(예:
dev환경과prod환경) 환경을 같은 클러스터 내에서 논리적으로 구분해서 관리가 가능하다. - 각
Namespace별 권한 정책(RBAC)와 리소스 할당량(ResourceQuota)를 설정할 수 있다. - 관리의 편의성 뿐만 아니라, 실수로
prod환경의 자원을 수정하는 일 등을 방지하는 역할을 한다.
기본 Namespace
default- 따로
Namespace를 지정하지 않아도, 작동하는 기본적으로 작업하는 공간이다.
- 따로
kube-system- 쿠버네티스 내부 컴포넌트용
Namespace이다. CoreDNS,ETCD,kube-apiserver,kube-controller-manager,kube-proxy,kube-scheduler등이 존재한다.
- 쿠버네티스 내부 컴포넌트용
kube-public- 모든 사용자가 접근 가능한 공개 리소스 저장 공간 역할을 하는
Namespace이다.
- 모든 사용자가 접근 가능한 공개 리소스 저장 공간 역할을 하는
Namespace 내부 통신
같은 Namespace 내부
- 같은
Namespace안에서는 단순히 이름으로 접근이 가능하다. - 예:
web-pod,web-service
다른 Namespace에 접근

- 다른
Namespace의 자원에 접근하려면 전체 도메인을 사용 - 예:
web-pod.dev.pod.cluster.local,web-service.dev.svc.cluster.local
명령어
생성
kubectl create namespace dev
조회
kubectl get pods -n dev
kubectl get deployment -n dev
kubectl get service -n dev
모든 네임스페이스 조회
-A를 더 많이 사용한다
kubectl get pods --all-namespaces
특정 kubeconfig context의 디폴트 네임스페이스 지정
kubectl config set-context --current --namespace=dev
Yaml
Namespace 생성
# namespace-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
kubectl create -f namespace-dev.yaml
dev라는 이름의Namespace를 생성한다.
자원 생성
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
kubectl create -f pod-definition.yaml --namespace=dev
Pod를dev라는 이름의Namespace에 생성한다.- 보통
--namespace=dev이렇게 보다는 줄여서-n dev이렇게 줄여서 사용한다.
# pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: dev
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
kubectl create -f pod-definition.yaml
metadatanamespace: 여기에Namespace이름을 지정하여 해당Pod가 항상dev라는 이름의Namespace에 생성되도록 할 수 있다.
위처럼 yaml에 네임스페이스가 지정되어있는 리소스를
kubectl apply pod-definition.yaml -n other-ns 이렇게 다른 네임스페이스에 적용하면 어떻게 될까?- 네임스페이스 불일치 오류가 난다.
- 추가적으로 클러스터 범위에 속하는 리소스(ex:
PersistentVolume)를 네임스페이스를 지정해서 적용하면 네임스페이스가 무시된다.
리소스 제한 (Resource Quota)
# compute-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "10"
requests.memory: 10Gi
apiVersion:v1kind:ResourceQuotametadatanamespace: 여기에 리소스를 제한할Namespace의 이름을 지정한다.
spec(Dictionary): 여기에 제한할 리소스의 조건을 작성한다.
kubectl create -f compute-quota.yaml
레퍼런스
- https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- https://kubernetes.io/docs/tasks/administer-cluster/namespaces-walkthrough/
- https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
- https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/
- https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/
- Udemy - Certified Kubernetes Administrator (CKA) with Practice Tests (Mumshad)