OpenVNet과 Docker를 결합한 프레젠테이션(L2 확장)

9992 단어 OpenVNetDocker

개요

  • docker와 결합하여 OpenVNet을 운행해 본다.
  • 이번엔 기존 네트워크와 통신이 이뤄지지 않아 VNET 간에도 라우팅이 이뤄지지 않지만, 지난번 데이터 외에 여러 세그먼트를 밑줄로 넘나드는 상태로 가상 네트워크를 구성했다.
  • 전제 조건


    이전 글와 마찬가지로 두 개의 퍼블릭 네트워크를 만든다는 점은 다르다.
    Docker 이미지 계속centossshd를 이용하다.

    컨디션


    CentOS6.6개의 VM 3대를 호스트(호스트(Host1, Host2, Host3)로 설정하고, Host1과 Host2를 동일한 세그먼트로 구성하며, Host3을 다른 세그먼트로 구성합니다.
    ※ 이번엔 6.6을 시도했다.또한 Hub OS를 이동하는 하이퍼바이저는 KVM입니다.
    또한 호스트당 2개의 NIC
  • Host1:
  • eth0:ssh, OpenVNet 관리용(192.168.122.50)
  • eth1: OpenVNetPublic Network1용
  • Host2:
  • eth0:ssh, OpenVNet 관리용(192.168.122.51)
  • eth1: OpenVNetPublic Network1용
  • Host3:
  • eth0:ssh, OpenVNet 관리용(192.168.122.52)
  • eth1: OpenVNetPublic Network2용
  • 구성하다.
    단지 문장이라면 이해하기 어려우니 공식적인 그림을 인용하면

    의 VM1~VM6은 docker 컨테이너입니다.조금 알기 쉬운 말

    이런 느낌.

    작업흐름


    이번에도 InstallGuite에 맞춰 대충 설치를 해보도록 하겠습니다.
  • Host1은 All-in-ONe 구조(vnmgr, 웹api, vna 모두 같은 호스트에 있음)
  • Host2, Host3 vna만 설치
  • Host1에서 VNET1에 속하는 Contaainer1과 VNET2에 속하는 Contaainer2
  • 를 시작합니다.
  • Host2에서 VNET1에 속하는 Contaainer3과 VNET2에 속하는 Contaainer4
  • 를 시작합니다.
  • Host3에서 VNET1에 속하는 Contaainer5와 VNET2에 속하는 Contaainer6
  • 를 시작합니다.
    이런 식으로 움직이면서 각 VNET 내 컨테이너 간 소통이 가능한지 확인한다.
    ※ Host1, 2, 3을 실행하는 하이퍼바이저는 KVM
    인터넷에 대해서는 지난번과 마찬가지로 docker0을 놔두고 OVS로 Br0을 만들어 이용할 수 있다.컨테이너의 NIC가 추가되어 piperwork를 사용하지 않으며 netns가veth에 넣는 형식입니다.
    두 호스트는 같은 세그먼트에 있고 한 호스트는 다른 세그먼트에 존재하지만 MAC2 MAC와 GRE를 통해 서로 호스트의 용기와 통신할 수 있기 때문에 로터의 설정이 필요하지 않다.
    또한 이번에는 CentOS 6입니다.6으로 이동했다고 쓰여 있지만 CentOS 6입니다.5 Install Guide에 따라 OpenVNet이 설치되었을 때/var/log/openvs witch/ovs-vs witch/ovs witch.log에서 "Address family not supported by protocol"출력되며 OVS에 GRE 포트를 생성할 수 없습니다.ovs-offctl show brX로 표시되는 상황에서는 GRE 포트가 표시되지 않지만, ovs-vsctl show에는 존재하지 않을 GRE 포트가 표시되어 있어 주의하기 어렵다.
    이를 방지하려면 이 정보, 이 정보이 일대의 정보를 참조하여 Open vSwitch 버전을 업그레이드하십시오.

    OpenVNet 설치(Host1)


    Host1은 설치 자체가 지난번과 같으며, 외부로부터 미리 연결을 받아야 합니다.
    /etc/redis.conf
    (省略)
    bind 0.0.0.0
    (省略)
    
    /etc/openvnet/vna.conf(Host1)
    node {
      id "vna1"
      addr {
        protocol "tcp"
        host "192.168.122.51"
        port 9103
      }
    }
    
    vna.conf의 id를 유일한 값으로 설정합니다.

    OpenVNet 설치(호스트 2, 호스트 3)


    Host2, host3은 vna만 설치하면 됩니다.모두 설치 후 vna만 사용할 수 있습니다.
    이쪽에서도 일부 설정을 수정할 겁니다.
    /etc/openvnet/vna.conf(Host2)
    node {
      id "vna2"
      addr {
        protocol "tcp"
        host "192.168.122.51"
        port 9103
      }
    }
    
    /etc/openvnet/vna.conf(Host3)
    node {
      id "vna3"
      addr {
        protocol "tcp"
        host "192.168.122.52"
        port 9103
      }
    }
    
    마찬가지로 id를 공격하지 않는 값으로 변경합니다.

    br0의 제작


    여기도 지난번과 마찬가지로 eth1을 OVSPort로 Br0에 추가하는 형식으로 설정합니다.
    Host1의 br0과 Host2의 br0 데이터 path-id, hwaddr를 공격하지 않는 값으로 설정합니다.
    /etc/systconfig/network-sscripts/ifcfg-eth1(Host1, 2, 3 일반)
    DEVICE=eth1
    DEVICETYPE=ovs
    TYPE=OVSPort
    OVS_BRIDGE=br0
    BOOTPROTO=none
    ONBOOT=yes
    HOTPLUG=no
    
    /etc/sysconfig/network-scripts/ifcfg-br0(Host1)
    DEVICE=br0
    DEVICETYPE=ovs
    TYPE=OVSBridge
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.121.50
    NETMASK=255.255.255.0
    HOTPLUG=no
    OVS_EXTRA="
     set bridge     ${DEVICE} protocols=OpenFlow10,OpenFlow12,OpenFlow13 --
     set bridge     ${DEVICE} other_config:disable-in-band=true --
     set bridge     ${DEVICE} other-config:datapath-id=0000000000000001 --
     set bridge     ${DEVICE} other-config:hwaddr=02:01:00:00:00:01 --
     set-fail-mode  ${DEVICE} standalone --
     set-controller ${DEVICE} tcp:127.0.0.1:6633
    "
    
    /etc/sysconfig/network-scripts/ifcfg-br0(Host2)
    DEVICE=br0
    DEVICETYPE=ovs
    TYPE=OVSBridge
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.121.51
    NETMASK=255.255.255.0
    HOTPLUG=no
    OVS_EXTRA="
     set bridge     ${DEVICE} protocols=OpenFlow10,OpenFlow12,OpenFlow13 --
     set bridge     ${DEVICE} other_config:disable-in-band=true --
     set bridge     ${DEVICE} other-config:datapath-id=0000000000000002 --
     set bridge     ${DEVICE} other-config:hwaddr=02:01:00:00:00:02 --
     set-fail-mode  ${DEVICE} standalone --
     set-controller ${DEVICE} tcp:127.0.0.1:6633
    "
    
    /etc/sysconfig/network-scripts/ifcfg-br0(Host3)
    DEVICE=br0
    DEVICETYPE=ovs
    TYPE=OVSBridge
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.120.52
    NETMASK=255.255.255.0
    HOTPLUG=no
    OVS_EXTRA="
     set bridge     ${DEVICE} protocols=OpenFlow10,OpenFlow12,OpenFlow13 --
     set bridge     ${DEVICE} other_config:disable-in-band=true --
     set bridge     ${DEVICE} other-config:datapath-id=0000000000000003 --
     set bridge     ${DEVICE} other-config:hwaddr=02:01:00:00:00:03 --
     set-fail-mode  ${DEVICE} standalone --
     set-controller ${DEVICE} tcp:127.0.0.1:6633
    "
    
    설정이 완료되면 각 호스트의 Br0을 시작하고 Host1에서 vnmgr·webapi·vna를 시작하며 Host2, Host3에서 vna를 시작합니다.
    Host1
    $ service mysqld start
    $ service redis start
    $ ifup eth1
    $ initctl start vnet-vnmgr
    $ initctl start vnet-webapi
    $ initctl start vnet-vna
    
    Host2、Host3
    $ ifup eth1
    $ initctl start vnet-vna
    

    부팅 컨테이너


    Host1에서 컨테이너 1과 2, Host2에서 컨테이너 3과 4, Host3에서 컨테이너 5와 6을 각각 시작합니다.
    OpenVNet은 GRE를 사용하여 세그먼트가 다른 호스트 간에 연결합니다.이 GRE에서는 OVS의 GRE 포트를 사용하지만 이 포트에 output의 flow를 적용한 경우 그룹을 나누어 호스트의 Linux IP 창고를 통해 보냅니다.따라서 Br0 (eth1) 에서 상대방에게 전송하고 도착할 수 있도록 경로가 설정되어 있습니다.
    ※ 코스

    좋은 웹페이지 즐겨찾기