빅데이터

도커 공인 ip 설정

CyberI 2017. 8. 4. 10:36


<이미지 출처 : https://www.docker.com/docker-suse-linux-enterprise-server-sles >

docker를 사용하다 보면 컨테이너가 외부에서 실제 여러 머신이 동작하듯이 사용해야 할 경우가 생기곤 합니다. 그래서 이번 포스팅은 컨테이너에 정적으로 공인 IP를 할당하는 방법에 대해 알아보고 실제 해보았을 때 생기는 불편할 수 있는 점에 대해서 다루겠습니다.

docker 1.12.3버전을 이용하였습니다.

Host machine ip : 2**.***.***.36,  container ip : 2**.***.***.37


Docker network 생성 및 컨테이너 실행

docker에서 기본적으로 제공되는 network에서 macvlan이 사용이 가능해서 구성해보려고 합니다.

먼저 docker network를 생성해줍니다.


Network가 정상적으로 생성이 완료된 것을 확인했다면 실행을 해봅니다.

실행 시 --net --ip 옵션을 이용하여 고정 ip를 가지는 컨테이너를 실행 가능합니다.


2**.***.***.37라는 ip주소를 갖는 컨테이너를 생성합니다. 모든 것이 원활하게 동작 할 것이라고 생각했지만 불편한 점이 하나 발생 합니다.


한계

컨테이너 간 그리고 외부와의 통신은 원활히 이뤄지는데 docker 호스트 머신과 컨테이너 간의 통신이 불가능 하다는 단점이 있습니다.

실제로 호스트 머신에 ping을 날려도 응답이 전혀 없습니다.


Arp table을 보시면 mac주소 정보가 없고 Flags Mask complete가 아닌 상태에 있는 것을 확인 하였습니다.


근본적인 원인은 Docker network 생성시 macvlan 모드를 사용하면 커널모듈에서 필터링하여 호스트 머신에 접근이 불가능하도록 되어있습니다.해당 ip로 연결 시도는 되었지만 도달하지 못했기에 mac주소를 알지 못합니다.

*Flags Mask의 'C'는 온전하게 학습된 주소라는 의미를 가집니다.

접근불가는 컨테이너와 호스트 머신과의 격리 및 보안적인 이유가 큽니다만 꼭 호스트머신과 같은 레벨로 네트워크를 구성하고 상호간에 접속이 필요하다면 해결 책은 있습니다.


문제 해결 방법

macvlan을 쓰면서 컨테이너와 호스트 머신과의 통신이 필요하다면 기존의 인터페이스에 네트워크 인터페이스를 별도로 하나 더 macvlan 모드로 생성하고 docker network macvlan을 새로 생성한 인터페이스로 설정해주면 해결이 됩니다.


Mkif.sh

----------------------------------------------------------------------------------------------------

# mactest 인터페이스 구성

 

ip link add link ens33 mactest type macvlan mode bridge

ip address add 2**.***.***.36 dev mactest

ip link set dev mactest up

 

# 라우팅 테이블 작업

 

# 기존 라우팅 테이블의 정보 비우기

ip route flush dev ens33

ip route flush dev mactest

 

# 라우팅 정보 추가

ip route add 2**.***.***.0/23 dev mactest metric 0

 

# 라우팅 테이블에 게이트웨이 정보 추가

ip route add default via 2**.***.***.252

-------------------------------------------------------------------------------------------------------------


위 내용의 쉘 파일을 생성해주고 실행 권한을 준 뒤 실행을 시킵니다.


ip명령어를 이용하여 해당 network interface 정상적으로 생성되었는지 확인 해봅니다.


해당 network interface를 사용하는 docker network를 생성하고 확인 해봅니다.


새로 만든 docker network를 이용하는 컨테이너를 만들어보겠습니다. 처음 macvlan을 사용했던 같은 옵션으로 주시면 됩니다.


이제 정상적으로 컨테이너에서 로컬 머신으로 접속이 되는지 ping을 시도해보고 arp table도 확인해봅니다.


정상적으로 mac주소가 들어가 있으며 flags Mask C로 정상적으로 완료 되어있습니다.

이제 docker 호스트 머신에 접속이 안되었던 문제가 해결 되었습니다.


네트워크 성능 비교

네트워크 통신 구간에 가용한 네트워크 대역폭을 측정하는 Iperf3라는 툴로 네트워크 대역폭을 측정해서 컨테이너 사용 시 네트워크 성능이 얼마나 하락 하는지 그리고 각 네트워크 구성에 따라 어떻게 달라지는지 비교해 보고 마치겠습니다.

비교하는 기준은 localhost-localhost로하였고 container-container 통신들을 비교한 것입니다.

*성능이 좋지 않은 vm으로 하였기에 오차가 있을수도 있습니다.



'빅데이터' 카테고리의 다른 글

HBase 개념 정리  (0) 2017.09.21
NoSQL 개념 정리  (0) 2017.09.21
스마트의 시작, Ontology_4  (0) 2017.07.26
Storm + Kafka 연동하기  (0) 2017.07.21
docker 이해  (0) 2017.07.07