Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[Docker] 컨테이너 기반 기술_ Namespace 본문

Docker

[Docker] 컨테이너 기반 기술_ Namespace

Study_note 2021. 11. 18. 01:00

 

Namespace란?

프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능으로 한 시스템의 프로세스들은 기본적으로 시스템의 리소스들을 공유해서 실행된다

 

네임스페이스 종류

 

PID Namespace

프로세스 ID(PID)를 분리하여 관리한다 네임 스페이스를 분리하면 프로세스에게 부여되던 PID 1번을 각 PID 네임스페이스에 할당

 

UTS Namespace

uname 시스템 명령어에 의해서 반환되는 시스템 정보들 중 hostname, nis domain name 등 호스트의 네임스페이스 별로 hostname을 격리

 

NET Namspace

네트워크 환경을 분리하면 네임스페이스에 속한 프로세스들에 새로운 IP를 부여하거나 네트워크 인터페이스를 추가하는 것이 가능하며 네트워크 namespace 별로 개별적인 인터페이스와 ip 구성을 가진다

 

컨테이너 네트워크에서 UTS 네임스페이스보다 중요하고 조금 더 어려운 게 바로 네트워크 네임스페이스라고 한다

 

net namespace 과정

 

우선 net namespace로 사용할 guestnet을 생성해준다 

ip netns exec라는 명령어를 이용하면 지정한 namespace 내부에 명령어를 입력할 수 있다. 

 ip netns add guestnet
	--> guestnet NET ns 생성 

 ip netns exec guestnet ip link
	--> guestnet 생성 확인, lo 인터페이스만 생성 
 ip netns exec guestnet ip link set lo up
	--> guestnet NET ns의 loopback interface 활성화

생성한 후 ip link에 대한 정보를 보면 down이라는 것을 확인할 수 있고 이것을 활성활 시켜준다 

 

host와 guest가 피어링 된 인터페이스 생성하고 생성한 guest는 net ns로 이전시킨다

ip link add host type veth  peer name guest
	--> global(default)NET ns 와 guestnet 를 연결할 가상인터페이스 생성 
ip link

ip link set guest netns guestnet
	--> guest 인터페이스를 guestnet NET ns로 이전

위에는 호스트, 게스트 다 있지만 아래는 게스트를 이전시켜서 게스트가 없다

 

이제 호스트를 활성화시키고 호스트 인터페이스 ip 설정하고 확인해준다

 

# ip link set host up
# ip addr add 1.1.1.1/24 dev host
# ip addr show dev host
	--> global(default) NET ns 의 host 인터페이스 IP 설정/ 확인

 

다음으로 net 네임스페이스로 옮긴 게스트 인터페이스 ip를 설정해본다

# ip netns exec guestnet ip link set guest up
# ip netns exec guestnet ip addr add 1.1.1.2/24 dev guest
# ip netns exec guestnet ip addr show dev guest
	--> guestnet NET ns 의 guest 인터페이스 IP 설정/ 확인

게스트가 활성화하고 ip가 1.1.1.2/24로 설정된 것을 확인할 수 있다

게스트와 호스트가 생성될 때 피어링 되어있기 때문에 게스트를 net 네임스페이스로 이동시켜도 계속 피어링 상태이기 때문에 서로 연결했던 ip들을 ping으로 확인해보면 제대로 통신하는 것을 확인할 수 있다.

# ping 1.1.1.2
	--> global(default) NET ns의 host 에서 guestnet 의 guest로 ping 확인 
# ip netns exec guestnet ping 1.1.1.1
	--> guestnet 의 guest 에서 global(default) NET ns의 host 로 ping 확인 

# ip netns del guestnet
	--> guestnet NET ns 삭제

삭제는 del 네임스페이스 이름 으로 삭제할 수 있다.

 

즉 net ns는 원래있던 네트워크환경에서 net ns 환경의 네트워크를 생성, 분리시켜 사용할 수 있게 해준다

Comments