+ All Categories
Home > Technology > Understanding Open vSwitch

Understanding Open vSwitch

Date post: 08-Feb-2017
Category:
Upload: yongki-kim
View: 1,152 times
Download: 0 times
Share this document with a friend
27
RED HAT ENTERPISE LINUX 1 Understanding Open Vswitch Open Stack YONG-KI, KIM [email protected] Red Hat Korea
Transcript
Page 1: Understanding Open vSwitch

RED HAT ENTERPISE LINUX 1

Understanding Open Vswitch Open Stack

YONG-KI, [email protected] Hat Korea

Page 2: Understanding Open vSwitch

RED HAT ENTERPISE LINUX 2

Session Objective

Open Vswitch

1. role of OVS in Open Stack

2. Working process of OVS

3. Various IP Interfaces – TAP, TUN, veth-Pair

Page 3: Understanding Open vSwitch

RED HAT ENTERPISE LINUX 3

Base Network Knowledge

TCP/IP Model

Layer 1

Layer 2

Layer 3

Layer 4

Layer 5

Layer 6

Layer 7

Page 4: Understanding Open vSwitch

RED HAT ENTERPISE LINUX4

TCP/IP

Switch covers TCP/IP but Bridge works on only L2

L2: Mac based communication- bridge, L2 Switch

L3: IP based communication- router, L3 Switch

L4: TCP Port based communication- L4 Switch, Load Balancer

Page 5: Understanding Open vSwitch

RED HAT ENTERPISE LINUX5

Network Diagram – host alone

Basic Network topology

eth0

External

Internal

eth1

VM1

eth0

OVS

VM2

eth0

br-int vtap1

vtap2

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

172.16.0.1

Page 6: Understanding Open vSwitch

RED HAT ENTERPISE LINUX6

Network Diagram - tunneling

Basic Network topology

eth0

External

Internal

eth1

VM1

eth0

OVS

VM2

eth0

br-int vtap1

vtap2

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

eth0

eth1

VM3

eth0

OVS

VM4

eth0

br-int vtap1

vtap2

IP stack(192.168.0.2/24)

br-int/internal

vtap1

vtap2

Host2

172.16.0.1 172.16.0.2

Page 7: Understanding Open vSwitch

RED HAT ENTERPISE LINUX7

Network Diagram – complete picture

Basic Network topology

eth0

External

Internal

eth1

VM1

eth0OVS

VM2

eth0

br-int vtap1

vtap2

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

eth0

eth1

VM3

eth0

OVS

VM4

eth0

br-int vtap1

vtap2

IP stack(192.168.0.2/24)

br-int/internal

vtap1

vtap2

Host2

br-tun

veth1 veth0

172.16.0.1br-tun

/internal eth1

br-tun

veth1

eth1

veth0

172.16.0.2br-tun

/internal

Page 8: Understanding Open vSwitch

RED HAT ENTERPISE LINUX8

OVS how to – OVS Service

1. OVS start

eth0

eth1

OVS

IP stack(192.168.0.1/24)

Host1

host1#systemctl stop firewalld; setenforce 0 host1#service openvswitch start

[root@yhost2 ~]# ovs-vsctl showda8683f3-e1c1-4c9a-9587-2e3e860f9f82 ovs_version: "2.3.2"

172.16.0.1

Page 9: Understanding Open vSwitch

RED HAT ENTERPISE LINUX9

OVS how to - br

2. Create Bridge

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

Host1

host1#ovs-vsctl add-br br-inthost1#ip link set dev br-int up

[root@yhost2 ~]# ovs-vsctl showda8683f3-e1c1-4c9a-9587-2e3e860f9f82 Bridge br-int Port br-int Interface br-int type: internal ovs_version: "2.3.2"

172.16.0.1

Page 10: Understanding Open vSwitch

RED HAT ENTERPISE LINUX10

OVS how to – br-internal

3. assign IP addr to br-int

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

Host1

host1#ip addr add 192.168.0.100/24 dev br-int

[root@yhost2 ~]# ovs-vsctl showda8683f3-e1c1-4c9a-9587-2e3e860f9f82 Bridge br-int Port br-int Interface br-int type: internal ovs_version: "2.3.2"

172.16.0.1

Page 11: Understanding Open vSwitch

RED HAT ENTERPISE LINUX11

OVS how to

4. Create tap device – vtap1, vtap2

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

host1#ip tuntap add mode tap vtap{1,2}host1#ovs-vsctl add-port br-int vtap1 –- add-port br-int vtap2host1#ip link set dev vtap{1,2} up

[root@yhost2 ~]# ovs-vsctl showda8683f3-e1c1-4c9a-9587-2e3e860f9f82 Bridge br-int

Port “vtap1”Interface “vtap1”

Port “vtap2”Interface “vtap2”

Port br-int Interface br-int type: internal ovs_version: "2.3.2"

vtap1

vtap2

172.16.0.1

Page 12: Understanding Open vSwitch

RED HAT ENTERPISE LINUX12

OVS how to – Config for VM with TAP

5. create VM and configure to use manual TAP device

virt-manager는 기본 mactap 제공하나 자율성이 떨어지기 때문에 manual tap 사용 1. vi /etc/libvirt/qemu/host1.xml2. vi /etc/libvirt/qemu.conf (&& selinux disable)3. service libvirtd restart

<?xml version="1.0" encoding="UTF-8"standalone="no"?>

<interface type='ethernet'>

<mac address='26:c7:a9:96:a7:7a'/>

<target dev=vtap1'/>

<model type='virtio'/>

<script path='no'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

</interface>

/etc/libvirt/qemu/host1.xml /etc/libvirt/qemu.conf

a) clear_emulator_capabilities = 0 b) user = "root" c) group = "root" d) cgroup_device_acl = [ "/dev/null","/dev/full", "/dev/zero", "/dev/random","/dev/urandom", "/dev/ptmx", "/dev/kvm","/dev/kqemu", "/dev/rtc", "/dev/hpet","/dev/net/tun", ]

Page 13: Understanding Open vSwitch

RED HAT ENTERPISE LINUX13

OVS how to – VM IP

4. allocate IP addr to VM's eth0

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

vm1@host1#ip addr add 192.168.0.101/24 dev eth0vm2@host1#ip addr add 192.168.0.102/24 dev eth0

VM1#ping 192.168.0.1[success]

VM2#ping 192.168.0.1[success]

vtap1

vtap2

VM1

eth0

VM2

eth0

192.168.0.101

192.168.0.102

172.16.0.1

Page 14: Understanding Open vSwitch

RED HAT ENTERPISE LINUX14

OVS how to - Monitor

5. monitor ovs status

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

host1#ovs-vsctl showhost1#ovs-ofctl show br-inthost1#ovs-appctl fdb/show br-int

host1#ovs-ofctl show br-int 1(eth1): addr:00:1a:4a:36:66:10 config: 0 state: 0 speed: 0 Mbps now, 0 Mbps max 2(vtap1): addr:96:34:e5:61:0a:ca config: PORT_DOWN state: LINK_DOWN current: 10MB-FD COPPER speed: 10 Mbps now, 0 Mbps max 3(vtap2): addr:f2:18:36:6c:d6:62 config: PORT_DOWN state: LINK_DOWN current: 10MB-FD COPPER speed: 10 Mbps now, 0 Mbps max LOCAL(br-int): addr:00:1a:4a:36:66:10 config: PORT_DOWN state: LINK_DOWN speed: 0 Mbps now, 0 Mbps maxOFPT_GET_CONFIG_REPLY (xid=0x4): frags=normalmiss_send_len=0

vtap1

vtap2

VM1

eth0

VM2

eth0

192.168.0.101

192.168.0.102

172.16.0.1

Page 15: Understanding Open vSwitch

RED HAT ENTERPISE LINUX15

OVS how to – Test Connection

6. ping test between vm1 on host1 and vm2 host2

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

VM1# ping 192.168.0.102 [success]VM1#ping 192.168.0.103 [failed]

vtap1

vtap2

VM1

eth0

VM2

eth0

192.168.0.101

192.168.0.102

eth0

eth1

OVS

br-int

IP stack(192.168.0.2/24)

br-int/internal

vtap1

vtap2

Host1

vtap1

vtap2

VM3

eth0

VM4

eth0

192.168.0.103

192.168.0.104

172.16.0.1 172.16.0.2

Page 16: Understanding Open vSwitch

RED HAT ENTERPISE LINUX16

OVS how to – Tun(VXLAN)

7. create vxlan TUN for connection between VM1 and MV3

eth0

eth1

OVS

br-int

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

host1# ovs-vsctl add-port br-int vxlan0 -- set interface vxlan0type=vxlan options:key=100 options:remote_ip=172.16.0.2]host2#ovs-vsctl add-port br-int vxlan0 -- set interface vxlan0type=vxlan options:key=100 options:remote_ip=172.16.0.1

vtap1

vtap2

VM1

eth0

VM2

eth0

192.168.0.101

192.168.0.102

eth0

eth1

OVS

br-int

IP stack(192.168.0.2/24)

br-int/internal

vtap1

vtap2

Host1

vtap1

vtap2

VM3

eth0

VM4

eth0

192.168.0.103

192.168.0.104

172.16.0.1 172.16.0.2

vxlan1VNI=100

vxlan1VNI=100

Page 17: Understanding Open vSwitch

RED HAT ENTERPISE LINUX17

OVS how to - Monitor

8. current ovs status

host1#ovs-vsctl showhost1#ovs-ofctl ip a

[root@yhost1 ~]# ovs-vsctl show84c282c9-b992-4673-a715-2d2e46f0c175 Bridge br-int Port br-int Interface br-int type: internal Port "vtap1" Interface "vtap1" Port "vtap2" Interface "vtap2" Port "vxlan0" Interface "vxlan0" type: vxlan options: {key="100",remote_ip="172.16.0.2"} ovs_version: "2.3.2"

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 link/ether 00:1a:4a:36:66:0d brdff:ff:ff:ff:ff:ff inet 10.64.168.146/24 eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 link/ether 00:1a:4a:36:66:0e brdff:ff:ff:ff:ff:ff inet 172.16.0.1/24 vtap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu1500 link/ether 16:07:a0:03:15:ac brdff:ff:ff:ff:ff:ffvtap2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu1500 link/ether e2:05:f1:38:5d:21 brdff:ff:ff:ff:ff:ffbr-int: <BROADCAST,MULTICAST> mtu 1500 link/ether 46:8c:72:ee:f0:4b brdff:ff:ff:ff:ff:ff inet 192.168.0.1/24 scope global br-int

Page 18: Understanding Open vSwitch

RED HAT ENTERPISE LINUX18

OVS how to – veth pair

9. connection between bridges.

host1#ip link add veth0 type veth peer name veth1host1# ovs-vsctl add-br br-tunhost1#ovs-vsctl add-port br-int veth0host1#ovs-vsctl add-port br-tun veth1host1#ovs-vsctl add-port eth1host1#ip link set dev veth{0,1} up

Page 19: Understanding Open vSwitch

RED HAT ENTERPISE LINUX19

OVS how to – veth pair

10. connection between bridges.

host1#ovs-vsctl showhost1# ip addr

[root@yhost1 ~]# ovs-vsctl show84c282c9-b992-4673-a715-2d2e46f0c175 Bridge br-int Port "veth0" Interface "veth0" Port br-int Interface br-int type: internal Port "vtap1" Interface "vtap1" Port "vtap2" Interface "vtap2" Port "vxlan0" Interface "vxlan0" type: vxlan options: {key="100", remote_ip="172.16.0.2"} Bridge br-tun Port br-tun Interface br-tun type: internal Port "veth1" Interface "veth1" Port "eth1" Interface "eth1" ovs_version: "2.3.2"

Page 20: Understanding Open vSwitch

RED HAT ENTERPISE LINUX20

Network Diagram

Basic Network topology

eth0

External

Internal

eth1

VM1

eth0OVS

VM2

eth0

br-int vtap1

vtap2

IP stack(192.168.0.1/24)

br-int/internal

vtap1

vtap2

Host1

eth0

eth1

VM3

eth0

OVS

VM4

eth0

br-int vtap1

vtap2

IP stack(192.168.0.2/24)

br-int/internal

vtap1

vtap2

Host2

br-tun

veth1 veth0

172.16.0.1br-tun

/internal eth1

br-tun

veth1

eth1

veth0

172.16.0.2br-tun

/internal

Page 21: Understanding Open vSwitch

RED HAT ENTERPISE LINUX21

ref: http://docs.ocselected.org/openstack-manuals/kilo/networking-guide/content/under_the_hood_openvswitch.html

Open Stack Neutron Architecture

Page 22: Understanding Open vSwitch

RED HAT ENTERPISE LINUX22

ref: http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/OpenVSwitch/VXLAN

Docker Network w/ Open Vswitch

Page 23: Understanding Open vSwitch

RED HAT ENTERPISE LINUX23

Ref - articles

reference articles

1. open stack neutron:http://docs.ocselected.org/openstack-manuals/kilo/networking-guide/content/under_the_hood_openvswitch.html

2. open vswitch tutorial video:https://www.youtube.com/watch?v=rYW7kQRyUvA

3. docker on open vswitch (한글):http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/OpenVSwitch/VXLAN

4. ovs script- refer to below slides

Page 24: Understanding Open vSwitch

RED HAT ENTERPISE LINUX24

Ref – ovs-host1.sh

KimYongKis-MacBook-Pro:20151013-Internal-OVS-training ykim$ cat ovs-host1.sh #!/bin/sh#definevnet="192.168.0.1/24"target_host="172.16.0.2"tun_net="172.16.0.1/24"

#helpif [ -z "$1" ] || [ $1 == "help" ];thenecho "Help: $0 clear|init|br-int|vtap|vxlan|br-tun|veth-pair|en-br-tun"echo ""echo "How to use this scripts"echo ""echo "1st: clear"echo "2nd: init, clear iptables and change selinux mode to permissive"echo "3rd: br-int, create br-int bridge"echo "4th: vtap, create vtap and start VMs"echo "5th: vxlan, create vxlan tunnel"echo "6th: br-tun, optional, create br-tun bridge"echo "7th: veth-pair, optional, create veth-pair to connect between bridges(br-int and br-tun)"echo "8th: en-br-tun, optional, insert eth1 to br-tun and assign ip address to br-tun"echo ""exit 1fi

## clearif [ $1 == "clear" ];thenecho "$1"iptables -Fip addr flush dev eth1ovs-vsctl del-port br-int vtap1ovs-vsctl del-port br-int vtap2ovs-vsctl del-port br-int vxlan0ovs-vsctl del-br br-intovs-vsctl del-br br-tunvirsh destroy cirros1virsh destroy cirros2ip tuntap del mode tap vtap1ip tuntap del mode tap vtap2ip link del veth0 type veth peer name veth1ip link del virbr0ip link del virbr0-nicovs-vsctl show

Page 25: Understanding Open vSwitch

RED HAT ENTERPISE LINUX25

Ref – ovs-host1.sh (cont.)## br-intelif [ $1 == "br-int" ];thenecho $1ovs-vsctl add-br br-intip addr add $vnet dev br-intip link set dev br-int upovs-vsctl show

## vtapelif [ $1 == "vtap" ];thenecho $1echo "vm 1 and vm2 starting"ip tuntap add mode tap vtap1ip tuntap add mode tap vtap2virsh start cirros1virsh start cirros2sleep 5ip link set dev vtap1 upip link set dev vtap2 upovs-vsctl add-port br-int vtap1ovs-vsctl add-port br-int vtap2ovs-vsctl show

## vxlanelif [ $1 == "vxlan" ];thenecho $1ovs-vsctl add-port br-int vxlan0 -- set interface vxlan0 type=vxlan options:key=100 options:remote_ip=$target_hostovs-vsctl show## br-tunelif [ $1 == "br-tun" ];thenecho $1ovs-vsctl add-br br-tunip link set dev br-tun upovs-vsctl show

## veth pairelif [ $1 == "veth-pair" ];thenecho $1ip link add veth0 type veth peer name veth1ovs-vsctl add-port br-int veth0ovs-vsctl add-port br-tun veth1ip link set veth0 upip link set veth1 upovs-vsctl show

Page 26: Understanding Open vSwitch

RED HAT ENTERPISE LINUX26

Ref – ovs-host1.sh (cont.)## veth pairelif [ $1 == "veth-pair" ];thenecho $1ip link add veth0 type veth peer name veth1ovs-vsctl add-port br-int veth0ovs-vsctl add-port br-tun veth1ip link set veth0 upip link set veth1 upovs-vsctl show

## en-br-tunelif [ $1 == "en-br-tun" ];thenecho $1ip addr flush dev eth1ovs-vsctl add-port br-tun eth1ip addr add $tun_net dev br-tunip link set br-tun upovs-vsctl show

## initelif [ $1 == "init" ];thenecho $1iptables -Fsetenforce 0ip addr add $tun_net dev eth1ip link set eth1 up

elseecho "$0 clear|init|br-int|vtap|vxlan|br-tun|veth-pair|en-br-tun"fi

Page 27: Understanding Open vSwitch

RED HAT ENTERPISE LINUX 27

End of Document


Recommended