컨테이너: linux namespace

Seongho Jang·2023년 7월 11일

1. Description

  • 전역 시스템 자원을 네임스페이스 안의 process들에게 독립적인 공간이 있는 것처럼 만드는 것
  • 같은 네임스페이스에서는 변경사항이 보이지만, 그 외 process들에게는 보이지 않음
  • 자식 process는 부모 process의 네임스페이스를 상속받음.

2. Type

namespacedescription
Userprocess 각각의 UID, GID정보를 격리
IPCIPC를 격리하여 외부 process의 접근이나 제어를 막음
Time시간을 격리
cgroupprocess는 /proc/self/cgroup에 가상화된 crgroup 마운트를 갖음

1) PID 네임스페이스

  • process의 id를 격리하는 네임스페이스
  • PID 네임스페이스를 격리하면, init process인 1로 시작함
  • 분리된 새로운 네임스페이스는 1로 시작하지만, default 네임스페이스의 경우에는 다른 값으로 봄
  • init process의 경우 kernel에서 주는 것을 각 process에 할당하는(?) 역할을 수행하는데, 격리된 1번 process의 경우에도 init process에서 온 것을 하위 process에 주는 역할을 수행함.

2) Network 네임스페이스

  • 각종 네트워크 자원을 격리
  • ip 명령어로 조작할 수 있음
  • unshare 명령어가 아닌 ip 명령어로 실행함

추가설명

3) UTS 네임스페이스

  • 이름을 분리하는 네임스페이스
  • 호스트 네임을 변경시 사용
$ unshare --uts={path} {hostname}

4) 마운트 네임스페이스

  • file system을 마운트시 root와 분리해줌
linux$ sudo unshare --mount /bin/sh
#if memory device => none
root# mount -t tmpfs {device} {mount_path} 

5) cgroup

6) IPC

7) User

3. /proc/{pid}/ns/

  • 각 process마다 '/proc/{pid}/ns/'가 존재하고, 이를 통해 파일 핸들을 반환한다.
  • pid에 $$를 입력하면 현재 process의 pid를 넣어줌.
  • 각 namespace에 해당하는 i-node 값을 가지고 있음.
  • i-node값이 같으면, 같은 네임스페이스
    proc+ns

4. /proc/sys/user/

  • 각 유형의 네임스페이스들이 총 몇개까지 만들 수 있는지 보여줌
  • privileged process가 각 파일의 값을 변경 할 수 있음.
  • 제한의 사용자별로 다름

5. 네임스페이스의 수명

  • 해당 네임스페이스의 마지막 process가 종료되거나, 해당 네임스페이스를 떠날 때 자동으로 해체됨
  • 다른 사유로 process가 없더라도 존재하도록 할 수 있음.

0개의 댓글