Docker와 OVS를 통한 세그먼트 간 통신(서버에 있음)

하고 싶은 일



기본적으로 상술한 그림과 같다
  • 서버(Linux)에서 Docker로 컨테이너를 만듭니다
  • 컨테이너의 통신은 서버를 떠날 필요가 없다(오히려 떠나고 싶지 않다)
  • 컨테이너 간 크로스 통신 (그림에는 두 개의 단락만 있지만 실제로는 더 많다)
  • 배경

  • 개발 환경에서 생산과 같은 환경을 구축하는 소망을 실현하기 위해
  • 개발 환경에서 자유롭게 사용할 수 있는 것은 이 서버뿐이다.주위에 영향을 주고 싶지 않기 때문에 서버 내에서만 통신을 끝내고 싶습니다
  • 완성된 구성



    간략하게 설명하다


    만화지만
    *1층: 세그먼트 간 경로설정을 위해 OVS(Open vSwitch)를 맨 위에 놓습니다.
    *2층: 브리지를 생성합니다.L3 역할(실제 라우팅 OVS 결정)
    *3층: 용기에 직접 연결된 프레임을 만듭니다.여기서 bridge는 VLAN(Fake bridge)을 설정합니다.bridge의 IP는 각 섹션의 Gateway IP가 됩니다.
    *4 레이어: 컨테이너가 VLAN 레이블을 설정하는 bridge에 연결됩니다.여기는 하나밖에 없지만 실제로는 한 용기에서 여러 단락으로 발을 뻗는다
    많은 것을 조사해 보았지만 VyOS와quagga로 이루어진 구성을 보았지만 어쩔 수 없이 NW 주위의 지식이 부족하여 가능한 한 간단하게 실현하기 위해 노력한 결과가 바로 이것이다.

    생성 과정


    마지막으로 원자재를 넣다.
    Linux, Docker, OVS의 설치 단계는 생략됩니다.
    운영 체제는 CentOS7.3입니다.

    구조틀

    # ovs-vsctl add-br ovs-docker
    # ovs-vsctl add-br b-v100 ovs-docker 100
    # ovs-vsctl add-br b-v200 ovs-docker 200
    
    2, 3 명령은 Fake bridge 제작 명령입니다.마지막 매개 변수는 VLAN ID이므로 환경에 따라 변경됩니다.

    bridge에서 IP 설정

    ip addr add 192.168.100.1/24 dev b-v100
    ip addr add 192.168.200.1/24 dev b-v200
    ip link set b-v100 up
    ip link set b-v200 up
    
    Fake bridge에 IP 설정하여 bridge 링크 향상

    컨테이너 생성 및 네트워크 주위 설정

    docker run -d --name ContainerA --privileged --net=none baseimage /sbin/init
    docker run -d --name ContainerB --privileged --net=none baseimage /sbin/init
    
    라우팅 설정, --privileged 옵션 포함
    네트워크는 당분간 아무것도 하지 않습니다. - net=none 만들기 용기 지정
    ovs-docker add-port b-v100 eth0 ContainerA --ipaddress=192.168.100.2/24
    ovs-docker add-port b-v200 eth0 ContainerB --ipaddress=192.168.200.2/24
    
    docker exec ContainerA ip route add default via 192.168.100.1
    docker exec ContainerB ip route add default via 192.168.200.1
    
    각 컨테이너의 eth0에 IP 할당eth0은 임의의 문자열을 지정할 수 있습니다. 마음대로 하세요
    IP 설정 후 컨테이너에 기본 게이트웨이를 설정합니다.Gateway IP는 Fake bridge(b-v100 or b-v200)에 할당된 IP입니다.
    이렇게 하면 분단을 뛰어넘는 환경을 순조롭게 완성할 수 있다.

    이 구성의 단점

  • 네트워크 주위를 OVS로 설정함으로써 docker 네트워크 명령으로 관리할 수 없습니다(가능하다면 관리는 Docker로 집중 관리할 수 있었으면 좋겠습니다.)
  • 물론, 한 단락을 늘릴 때마다bridge를 만들어야 합니다.Docker의 경우 Docker network~~에서 Gateway IP 설정까지 했지만 일일이 손으로 해야 한다(번거롭다)
  • OVS 증가...개발 환경이면 좋지만 여분의 과정을 늘리고 싶지 않기 때문에 가능하다면 OVS(MACVLAN을 쓰면 좋겠다...)도 배제하고 싶어요
  • 원재료


    https://blog.scottlowe.org/2012/10/31/layer-3-routing-with-open-vswitch/
    https://blog.scottlowe.org/2012/10/19/vlans-with-open-vswitch-fake-bridges/

    마지막


    더 쉽게 할 수 있어요.
    원래 OVS가 필요 없어요. Bridge만 하면 돼요.
    만약 이렇게 된다면 당신의 의견과 평론을 얻을 수 있다면 저는 매우 기쁠 것입니다

    좋은 웹페이지 즐겨찾기