차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
openvswitch를_통한_vxlan_구성 [2021/07/04 12:58] – 만듦 koovopenvswitch를_통한_vxlan_구성 [2021/07/05 14:31] (현재) koov
줄 7: 줄 7:
 그림을 보면, 2개의 호스트가 Flat한 L2 Network로 연결되어 있고(SDN: Software-Defined-Network 개념으로 보면 Underlay) 각각의 호스트 내에 Docker Container 들은 서로 다른 네트워크를 가지며, VxLAN 터널을 통한 L3 연결(SDN 개념으로 보면 Overlay)가 가능한 구조임을 알 수 있다. 그림과 같은 네트워크를 설계할 때에 특히 주의해야 할 점은, 하단의 OVS Bridge의 네트워크(10.0.0.0/8)가 상단의 Linux Bridge(docker0)의 네트워크(10.x.0.0/16)를 포함하는 구조를 가져야 한다는 것이다 그림을 보면, 2개의 호스트가 Flat한 L2 Network로 연결되어 있고(SDN: Software-Defined-Network 개념으로 보면 Underlay) 각각의 호스트 내에 Docker Container 들은 서로 다른 네트워크를 가지며, VxLAN 터널을 통한 L3 연결(SDN 개념으로 보면 Overlay)가 가능한 구조임을 알 수 있다. 그림과 같은 네트워크를 설계할 때에 특히 주의해야 할 점은, 하단의 OVS Bridge의 네트워크(10.0.0.0/8)가 상단의 Linux Bridge(docker0)의 네트워크(10.x.0.0/16)를 포함하는 구조를 가져야 한다는 것이다
  
 +{{:network:docker_ovs_bridge.png|}}
 +
 +첫번째 그림과 다른점은 ovs bridge의 IP가 서로 다를 필요가 없다는것이다. 즉 GW주소는 양쪽에 10.100.0.1 로 동일하게 구성해도 상관없다는것이다.
 ===== 사전 준비 ===== ===== 사전 준비 =====
  
줄 56: 줄 59:
 [root@docker01 ~#] ovs-vsctl add-port ovs_sw0 vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=192.168.10.164 [root@docker01 ~#] ovs-vsctl add-port ovs_sw0 vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=192.168.10.164
 </code> </code>
 +</WRAP>
  
   * docker02 에서는 다음과 같이 Open vSwitch 를 설정   * docker02 에서는 다음과 같이 Open vSwitch 를 설정
줄 141: 줄 145:
 </WRAP> </WRAP>
  
 +===== libvirt network 추가 =====
 +
 +kvm guest에 할당할 vxlan을 이용한 Virtual Network를 생성한다.
 +
 +아래와 같은 vxnet0.xml 파일을 생성한다.
 +
 +<WRAP prewrap>
 +<code xml vxnet0.xml>
 +<network>
 +  <name>vxnet0</name>
 +  <forward mode='bridge'/>
 +  <bridge name='ovs-sw0'/>
 +  <virtualport type='openvswitch'/>
 +</network>
 +</code>
 +</WRAP>
 +<WRAP center round important>
 +VxLAN을 이용한 libvirt Virtual Network를 생성할때 반드시 ''MTU''설정에 유의해야 한다. VxLAN자체에서 사용되는 헤더 사이즈로 인해 MTU를 1500 기본으로 사용하게 되면 정상적인 속도가 나오지 않는다는점 염두해두도록 한다. 따라서 VxLAN의 기반이 되는 Underlay network는 기본적으로 JumboFrame을 설정하는 것이 좋다.
 +</WRAP>
 +
 +
 +생성한 xml을 이용하여 libvirt Virtual Network를 생성한다.
 +
 +<WRAP prewrap>
 +<code bash>
 +virsh net-define vxnet0.xml
 +
 +virsh net-start vxnet0
 +virsh net-autostart vxnet0
 +</code>
 +</WRAP>
 +
 +이후 GuestVM에 해당 vxnet0 네트워크 인터페이스를 할당하면 된다.
 +
 +===== NetworkManager-ovs 를 통한 vxlan 구성 =====
 +
 +<WRAP prewrap>
 +<code bash>
 +nmcli conn add type ovs-bridge conn.interface ovs-sw0
 +nmcli conn add type ovs-port conn.interface ovs-sw0 master ovs-sw0
 +nmcli conn add type ovs-interface slave-type ovs-port conn.interface ovs-sw0 master ovs-sw0 ipv4.method manual ipv4.address 10.100.0.1/24
 +
 +ovs-vsctl add-port ovs-sw0 vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=192.168.0.102
 +</code>
 +</WRAP>
 +
 +<WRAP center round important>
 +위 예제에서도 보이듯이 ''ovs-bridge''와 ''ovs-port'', ''ovs-interface'' 모든 interface의 name을 동일하게 맞춰줘야 한다.
 +그렇지 않다면 kvm virtual network 에서 정확한 정보를 가져오지 못해 vm의 network interface port 할당이 제대로 되지 않아 부팅에 실패하게 된다.
 +</WRAP>
 +
 +
 +===== linux network-script 를 이용한 영구 설정 =====
 +영구적으로 적용하려면 linux network script로 작성하면 된다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[root@kvm31 network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-ovsbr0
 +DEVICE=ovsbr0
 +ONBOOT=yes
 +DEVICETYPE=ovs
 +TYPE=OVSBridge
 +BOOTPROTO=static
 +IPV6INIT=no
 +DELAY=0
 +IPADDR=10.10.10.1
 +PREFIX=8
 +HOTPLUG=no
 +</code>
 +</WRAP>
 +
 +만약 포트를 추가하고 싶은경우 아래와 같이 인터페이스를 생성한다.
 +아래는 물리NIC를 포트에 연결하는 예제이다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[root@kvm31 network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
 +HWADDR="00:0C:29:62:F9:D3"
 +TYPE="OVSPort"
 +DEVICETYPE="ovs"
 +OVS_BRIDGE="ovsbr0"
 +BOOTPROTO="none"
 +NAME="eno16777736"
 +UUID="5cc31ab7-c26d-48b6-89f2-a7c933d53cb8"
 +ONBOOT="yes"
 +NM_CONTROLLED="no"
 +</code>
 +</WRAP>
 +
 +vxlan interface 추가는 아래와 같다.
 +<WRAP prewrap>
 +<code bash>
 +DEVICE=vxnet0
 +ONBOOT=yes
 +DEVICETYPE=ovs
 +TYPE=OVSTunnel
 +OVS_BRIDGE=ovsbr0
 +OVS_TUNNEL_TYPE=vxlan
 +OVS_TUNNEL_OPTIONS="options:remote_ip=192.168.0.31"
 +</code>
 +</WRAP>
 +
 +상세설정은 [[ovs for legacy network-script]] 페이지를 참조한다.
 ===== 참고문서 ===== ===== 참고문서 =====
   * https://bryan.wiki/277   * https://bryan.wiki/277
   * https://bryan.wiki/279   * https://bryan.wiki/279
 +  * https://www.joinc.co.kr/w/man/12/OpenVSwitch/VXLAN
 +  * https://blog.christophersmart.com/2020/07/27/how-to-create-linux-bridges-and-open-vswitch-bridges-with-networkmanager/
 +  * https://blog.oddbit.com/post/2020-02-15-configuring-open-vswitch-with/
 +
 +==== NetworkManager-ovs ====
 +<WRAP prewrap>
 +<code bash>
 +# subscription-manager repos \
 +    --enable="rhel-7-server-rpms" \
 +    --enable="rhel-7-server-extras-rpms" \
 +    --enable="rhel-7-server-ose-4.6-rpms" \
 +    --enable="rhel-7-server-optional-rpms" \    <--- Add for "NetowrkManager-ovs" package
 +    --enable="rhel-7-fast-datapath-rpms"        <--- Add for "openvswitch2.13" package
 +</code>
 +</WRAP>
 +
 +  * https://developer.gnome.org/NetworkManager/stable/nm-openvswitch.html
 +  * https://blog.oddbit.com/post/2020-02-15-configuring-open-vswitch-with/
 +  * 
  • openvswitch를_통한_vxlan_구성.1625403487.txt.gz
  • 마지막으로 수정됨: 2021/07/04 12:58
  • 저자 koov