반응형
네임스페이스(Namespace)의 개념
리눅스(Linux)에서 네임스페이스(Namespace)는 프로세스가 볼 수 있는 자원(Resource)의 범위를 격리하는 기능입니다.
즉, 같은 시스템에서 실행 중인 여러 프로세스가 서로 다른 환경을 가지도록 만들어, 마치 각 프로세스가 독립적인 운영체제에서 실행되는 것처럼 보이게 합니다.
이는 컨테이너(Container) 기술의 핵심 기반 중 하나입니다.
1. 네임스페이스의 역할
- 자원 격리(Isolation): 프로세스마다 독립적인 시스템 환경 제공
- 보안 강화: 다른 프로세스나 시스템 자원에 접근 불가
- 컨테이너 지원: Docker, Kubernetes 등에서 필수 사용
- 다중 환경 실행: 같은 호스트에서 서로 다른 네트워크, 파일 시스템 환경을 가짐
2. 네임스페이스의 종류
리눅스 커널에서는 여러 종류의 네임스페이스를 지원합니다.
네임스페이스 | clone() 옵션 | 격리 대상 | 설명 |
Mount | CLONE_NEWNS | 마운트 포인트 | 프로세스마다 독립적인 파일 시스템 마운트 트리 |
UTS | CLONE_NEWUTS | 호스트 이름, 도메인 이름 | 각기 다른 hostname/domainname 사용 |
IPC | CLONE_NEWIPC | IPC 객체 | System V IPC, POSIX 메시지 큐 등 격리 |
PID | CLONE_NEWPID | 프로세스 ID | 독립적인 PID 번호 공간 |
Network | CLONE_NEWNET | 네트워크 인터페이스, IP | 독립적인 네트워크 스택 |
User | CLONE_NEWUSER | UID, GID | 사용자 및 그룹 ID 매핑 |
Cgroup | CLONE_NEWCGROUP | Cgroup 뷰 | 자원 제어 그룹 격리 |
3. 네임스페이스 예시
예: UTS 네임스페이스로 호스트네임 격리
# 새로운 UTS 네임스페이스에서 bash 실행
unshare --uts /bin/bash
# 현재 쉘에서 hostname 변경
hostname container1
# 이 변경은 현재 네임스페이스에만 적용됨
예: PID 네임스페이스로 프로세스 격리
unshare --pid --fork /bin/bash
ps -ef # 여기서는 PID가 1부터 시작
4. 네임스페이스와 컨테이너의 관계
- Docker, LXC(Linux Containers), Podman 등은 여러 네임스페이스를 조합하여 컨테이너를 구성
- 예:
- PID 네임스페이스 → 프로세스 격리
- Network 네임스페이스 → 독립된 네트워크 환경
- Mount 네임스페이스 → 전용 파일 시스템 뷰 제공
- 네임스페이스는 격리만 제공, 자원 제한은 **Cgroup(Control Group)**과 함께 사용
5. 시각적 이해
[호스트 시스템]
├─ 네임스페이스 1 (컨테이너 A)
│ ├─ hostname: app-server
│ ├─ PID: 1,2,3
│ └─ IP: 10.0.0.2
│
└─ 네임스페이스 2 (컨테이너 B)
├─ hostname: db-server
├─ PID: 1,2,3
└─ IP: 10.0.0.3
정리
- 네임스페이스는 리눅스 커널이 제공하는 자원 격리 기술
- 종류: Mount, UTS, IPC, PID, Network, User, Cgroup
- 각 네임스페이스는 특정 자원의 “독립된 버전”을 제공
- 컨테이너 기술(Docker 등)의 핵심 기반
'리눅스 > 리눅스 응용' 카테고리의 다른 글
Ubuntu에서 Docker 설치 방법 (3) | 2025.08.23 |
---|---|
도커(Docker) 기초 지식 (2) | 2025.08.16 |
프로그램, 프로세스, 스레드의 개념 (3) | 2025.08.14 |
셔뱅(Shebang, #!) 이란? (5) | 2025.08.13 |
NCP 마켓플레이스용 Application Image 만들기 (2) | 2025.08.10 |