리눅스/리눅스 응용

네임스페이스(Namespace)의 개념

Linuxpia 2025. 8. 15. 01:58
반응형

네임스페이스(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 등)의 핵심 기반