안녕하세요 밥한그릇입니다. ^^

 

오늘은 네트워크나 클라우드 테스트 환경에 사용되는 containernet이라는 것에 대해 간략히 소개해보려고 합니다.

 

저는 현재 포스텍 MCNL 연구실에서 go언어와 프로토콜 버퍼로 프로토콜 관련 구현 및 개발을 하고 있는데요, 이를 테스트하려면 멀티노드 네트워크 환경이 필요합니다. 여러 대의 기기에서 내 통신 프로그램을 실행시키며, 잘 작동하는 지 직접 돌려봐야한다는 것이죠. 그런데 이렇게 하려면 일단 기기 여러 대를 준비해야하고, 실험에 필요한 네트워크 환경을 조정해야합니다. 그렇게되면 시간도 많이 들고 참 힘들 것입니다.

그래서 중간에는 임시 테스트로서 '스레딩'을 사용해 각 스레드를 노드 하나로 가정해 로컬에서 시뮬레이팅해보기도 했습니다. 그렇지만 이는 실제 프로그램이 사용될 환경과 달라 테스트가 정확하지 않을 수 있죠. 그래서 꼭 멀티노드 환경의 테스트가 필요합니다.

 

내 컴퓨터 한 대에서 테스트용 네트워크 환경을 만들 방법이 어디 없을까요?

 


🏗 컨테이너넷?

containernet은 실험 및 테스트용 네트워크 환경을 구축해준다. 노드는 각각 하나의 도커 컨테이너이다.

https://containernet.github.io/

 

Containernet

Use Docker containers as hosts in Mininet emulations.

containernet.github.io

우선 사이트에 나와있는 설명은 다음과 같습니다.

 

컨테이너넷(Containernet)이라는 것은 Mininet이라는 유명한 네트워크 에뮬레이터로부터 만들어진 것으로, 모방된 네트워크 토폴로지 안에서 '도커 컨테이너'들을 호스트로 쓸 수 있도록 해줍니다. 즉, 하나의 노드 하나의 도커 컨테이너에 해당한다는 것입니다.

또한, 네트워크나 클라우드 에뮬레이터를 빌드하기 위한 유용한 기능들과 테스팅 인프라를 제공합니다.

컨테이너넷은 연구 커뮤니티에서 활발히 사용되고 있으며, 주로 클라우드 컴퓨팅이나 fog 컴퓨팅, 네트워크 기능 가상화(NFV) 그리고 multi-access edge computing (MEC) 등의 분야에서 실험에 집중되어 사용되고 있습니다.

NFV multi-PoP infrastructure emulator는 이것의 한 예시로, SONATA-NFV 프로젝트에 의해 만들어진 것이며 현재 OpenSource MANO (OSM) 프로젝트의 한 부분이 되었습니다.

 

기능

  • 미니넷 토폴로지들에 도커 컨테이너를 추가, 제거
  • 도커 컨테이너들을 토폴로지에 연결 (스위치들, 다른 컨테이너들, 또는 외부시스템(미니넷 호스트들에 연결)
  • 이 외의 많은 기능들 (위의 공식 링크를 통해 확인하세요)

 

미니넷으로부터 만들어진 모듈이 컨테이너넷이기 때문에, 컨테이너넷을 사용하기 전에 미니넷을 알면 좋을 것 같습니다. (현재 시점에서 컨테이너넷은 인터넷 자료가 많지 않은데, 미니넷은 그래도 나름 알려진 편인 것 같습니다)


🕸 컨테이너넷 실행

참고로, 저는 여기에서 리눅스 우분투 가상머신을 사용 중입니다. (windows에 virtualbox를 설치하여 우분투 돌림)

공식사이트에 있는 설치 방법에 따라 containernet을 깃클론 받아 설치해주세요.

사이트에 나와있는 설명대로, containernet의 실행예제 파일을 실행해보면 다음과 같습니다.

d1, d2라는 2개의 도커 컨테이너가 생기고 s1라는 스위치와 c0이라는 컨트롤러가 생긴 것이 보이시나요?

d1과 d2가 서로 한번씩 ping을 날린 뒤 종료되는 그런 예제입니다. 그 다음 conatinernet 콘솔이 생겨난 것을 볼 수 있죠,

containernet 예제 파이썬 파일 실행한 결과

아래를 보시면, containernet 예제를 실행한 뒤 도커 컨테이너 2개가 생겨난 모습도 볼 수 있네요.

containernet 실행 전 상태
containernet 예제 파이썬 프로그램 실행한 뒤

🔌 종료작업

그럼 이제 컨테이너넷을 종료해볼까요.

 

step 1. ctrl + d 눌러 종료작업

일단 딱 한번 ctrl + d를 누르고 종료작업이 마무리될 때 까지 기다려줍니다.

시간이 좀 걸릴 수 있는데, 그래도 인내심을 가지고 기다려 줍시다. 종료작업을 무사히 마칠 때까지 건드리면 안됩니다.

ctrl +d 누르면 다음과 같이 종료 작업을 하게 됨

step 2. sudo mn -c 를 입력해 해당 노드 프로세스 제거

컨테이너넷은 미니넷으로부터 만들어진 모듈이라 했었죠. 따라서 미니넷의 명령어를 통해 종료시킬 수 있는 것입니다.

sudo mn를 통해 미니넷에 접속할 수 있는데, 여기에 옵션 -c를 주면 미니넷의 환경을 정리 후 종료시킬 수 있습니다. (-c 옵션은 clean and exit의 약자)

sudo mn -c를 눌러 마무리


이렇게 포스팅을 마치겠습니다.

다음 번에는 파이썬에서 컨테이너넷 모듈을 사용하는 코드를 리뷰하는 포스팅을 계획하고 있습니다.

 

도움이 되셨다면 구독 또는 좋아요 눌러주세요~

질문이나 지적은 언제나 환영합니다 ^^

 

+) 근황 : 저는 요즘 정말 바쁘게 살고 있습니다.

또 요즘도 1학기 때 배운 내용들을 포스팅으로 리뷰하고 싶은데, 아무래도 너무 바빠서 자꾸 미뤄지는 것 같습니다. (ㅠㅠ)

정말 슬프네요 (...) 그 내용들도 빨리 정리할 수 있었으면 좋겠습니다.

 

 

 

+ Recent posts