6. UTS namespace

UTS(Unix TimeSharing) namespace는 리눅스 컨테이너가 ** hostname -f ** 명령어에 의해 반환된 결과 값인 자신의 식별자를 유지관리하기 위해 hostname과 domainname을 namespace 별로 격리해줍니다. 격리하는 대상은 구별을 위한 식별자가 됩니다. 단순하게 생각하면 hostname은 호스트 각각의 이름이고 domainname은 그룹의 이름입니다. 기본적으로 domainname을 설정하지 않았다면 none으로 표시됩니다.

UTS namespace로 분리할 수 있는 식별자는 sethostname(2)과 setdomainname(2)을 사용하여 설정되며 unname(2), gethostname(2) 및 getdomainname(2)을 사용하여 검색할 수 있습니다.

unshare 또는 clone 시스템 콜 호출 시에 CLONE_NEWUTS 플래그를 사용하면 새로운 UTS namespace를 생성하고 해당 namespace를 가진 프로세스를 생성할 수 있습니다.

실습

  1. ** unshare ** 를 이용하여 새로운 UTS namespace를 만들어서 bash 프로세스를 실행합니다. 그 후 namespace를 변경합니다.
linuxias@linuxias-VirtualBox:~$ hostname
linuxias-VirtualBox
linuxias@linuxias-VirtualBox:~$ sudo unshare -u /bin/bash
[sudo] password for linuxias: 
root@linuxias-VirtualBox:~# hostname
linuxias-VirtualBox
root@linuxias-VirtualBox:~# hostname uts-namespace
root@linuxias-VirtualBox:~# hostname
uts-namespace
root@linuxias-VirtualBox:~# cat /proc/sys/kernel/hostname
uts-namespace
root@linuxias-VirtualBox:~# 
  1. 새로운 터미널 세션을 생성하여 hostname을 확인해봅니다. hostname이 설정 전의 hostname임을 확인할 수 있습니다.
linuxias@linuxias-VirtualBox:~$ hostname
linuxias-VirtualBox 

참고자료 및 문헌

  • Konstantin Ivanov | Containerization with LXC
  • linux manual page - namespace, hostname