UTS namespace

2022. 8. 1. 10:41kubernetes | docker

UTS namespacehostname을 부여하고 namespace 별로 격리 시키는 역할을 수행합니다.

UTS namespace를 동작하게 하려면 linux에서는 unshare() command를 이용하여 분리시킬 수 있다.

unshare를 하는 순간 새로운 namespace환경이 생성된다.

동시에 #hostname <새로운 hostname>을 적게 되면 분리된 namespace에서의 hostname이 설정 된 것을 볼 수 있을 것이다.

 

namespace는 프로세스를 격리시키는 linux의 기능이라고 말했었다.

만들어 놓은 namespace가 어떤 메모리(, 스택, data ...etc)에 올라가고 유지되는지 혹은 어떤 파일에 기록되는지 궁금하여 unshare함수를 뜯어 보자.

 

linux man page : https://man7.org/linux/man-pages/man2/unshare.2.html

The linux Kernel : https://www.kernel.org/doc/html/latest/userspace-api/unshare.html

unshare source code : https://wariua.github.io/man-pages-ko/unshare%282%29/

 

unshare함수가 실행되고 프로세스가 분기되면 stack메모리에서 모든 것들이 이루어진다.

linuxunshare함수는 /usr/bin에 바이너리 형식으로 컴파일된 파일로 존재한다. /user/bin에 가면 우리가 쓰는 기본적인 linux명령어들이 정의되어 있다.

얘기가 멀리까지 왔지만... 결국. UTS namespace를 만들고 exit하는 순간 stack메모리에 올라가기 때문에 사라진다...즉 어긴가 기록하지 않는이상 사라진다.

 

그렇기 때문에 namespace를 생성하고 만약 다시 사용하고 싶으면 다음과 같이 만들면 된다.

 

 

현재 호스트 name

 

 

 

touch명령어를 사용하여 hostname을 유지할 빈 파일을 만들어 줍니다.

unshare 명령어를 이용하여 위에서 만든 파일에 hostname을 영속적으로 등록할 수 있도록 합니다. 여기서 --uts 옵션을 사용하면 만들려는 hostname을 등록할 수 있습니다.(linux unshare man 참고)

 

생성한 namespace에 들어가기 위해서 nsenter를 사용하여 들어갑니다. 생성한 namespace로 들어가게 되면 커멘드 라이에 생성한 hostname으로 반영 되는 것을 확인 할 수 있습니다.

 

 

확실하게 namespace가 분리가 되었는지 확인해보겠습니다.

 

현재 david-host-name1에 반영된 namespacePID number를 보면 73110인 것을 확인 할 수 있고,

namespace 외부로 나가서 다시 echo $$명령어를 치면 다른 PID값이 뜨는 것을 확인 할 수 있습니다.(echo $$은 현재 shellPID를 의미합니다.)

확실하게 namespace가 분리된 것을 확인 할 수 있습니다.

 

 

PID namespace를 설명하면서 /proc/<PID>에서 디렉터리에서 프로세스와 관련된 정보를 확인할 수 있다고 언급하였었는데 UTS namespace를 생성한 뒤 PID값을 한번 비교해보면 다음과 같습니다.

 

현재 host bash(PID=2532) uts파일을 확인 하면 다음과 같다.

그리고 생성한 생성한 david-host(PID = 99036)uts를 확인해보면 다음과 같다.

그리고 david-host를 들어간 상태에서 PID =1 systemd에서의 uts를 확인해보면 다음과 같다.

그리고 local host에서 PID=1을 확인하면 다음과 같다.

비교해보면 host를 분리한 uts를 뺸 나머지는 uts값이 전부 같은 것을 확인 할 수 있다. , unshare 명령어를 쓰는 순간 namespace가 완전히 분리 된것을 확인 할 수 있다

'kubernetes | docker' 카테고리의 다른 글

K8S Cluster IP Change Procedure  (0) 2022.08.01
callico - NODE 통신  (0) 2022.08.01
linux hostname  (0) 2022.08.01
kubernetes dir analysis  (0) 2022.08.01
k8s svc nexus  (0) 2022.02.28