22
Martynas Pumputis Weaveworks OVS for Containers with Weave Net

Martynas Pumputis - Open vSwitch

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Martynas Pumputis - Open vSwitch

Martynas PumputisWeaveworks

OVS for Containers with Weave Net

Page 2: Martynas Pumputis - Open vSwitch

2

https://weave.workshttps://github.com/weaveworks

Page 3: Martynas Pumputis - Open vSwitch

3

Problem Statement

Page 4: Martynas Pumputis - Open vSwitch

4

container (ns1)

lo127.0.0.1/8

// include/net/net_namespace.hstruct net { struct user_namespace *user_ns; struct netns_ipv4 ipv4; struct net_device *loopback_dev; …

// include/linux/netdevice.hstruct net_device { struct net *nd_net; …

// include/net/sock.hstruct sock { struct net *skc_net; …

Page 5: Martynas Pumputis - Open vSwitch

5

container (ns1)

lo127.0.0.1/8

bridge0

veth1a10.0.0.1/16

veth1b

veth3b

container (ns3)

lo127.0.0.1/8

veth3a10.0.0.3/16

veth2b

container (ns2)

lo127.0.0.1/8

veth2b10.0.0.2/16

Page 6: Martynas Pumputis - Open vSwitch

6

C1

C2

C3 eth0192.168.0.1/24

bridge0 C4

C5

C6eth0192.168.0.2/24

bridge0

C1 $ curl http://192.168.0.2:80 # C4C1 $ curl http://192.168.0.2:81 # C5

Page 7: Martynas Pumputis - Open vSwitch

7

C1

C2

C3 eth0192.168.0.1/24

bridge0 C4

C5

C6eth0192.168.0.2/24

bridge010.0.0.0/16

C1 $ curl http://192.168.0.2:80 # C4C1 $ curl http://192.168.0.2:81 # C5C1 $ curl http://10.0.0.4:80 # C4C1 $ curl http://10.0.0.5:80 # C5

Page 8: Martynas Pumputis - Open vSwitch

8

Fast multi-host overlay network for containers

Page 9: Martynas Pumputis - Open vSwitch

9

Approach

Page 10: Martynas Pumputis - Open vSwitch

10

(Open vSwitch) Datapath

vport: 1veth1b

veth1a

container 1

vport: 2veth2b

veth2a

container 2

func handleMiss(packet []byte, k odp.FlowKeys) { if sendToMAC[k.SrcMAC] == nil { sendToMAC[k.SrcMAC] = k.inVportID } if outVport := sendToMAC[k.DstMAC]; outVport != nil { send(outVport, packet) } else { broadcast(packet, k) }}

flow key: in_port(1), eth(src=veth1a, dst=veth2a)action: out_port(2)

Weave Net Router

Page 11: Martynas Pumputis - Open vSwitch

11

(Open vSwitch) Datapath

vport: 1veth1b

veth1a

container 1

vport: 2veth2b

veth2a

container 2

vport: 3vxlan(udp:6874)

MACHeader

IPHeader

UDPHeader

VXLANHeader Original L2 Frame

Page 12: Martynas Pumputis - Open vSwitch

12

(Open vSwitch) Datapath

vport: 1veth1b

veth1a

container 1

vport: 2veth2b

veth2a

container 2

vport: 3vxlan(udp:6874)

func handleMiss(packet []byte, k odp.FlowKeys) { srcPeer, dstPeer := extractPeers(k) if dstPeer != ourself { relay(packet, k) return } if getPeer[k.DstMAC] == ourself { inject(packet, k) return } broadcast(packet, k)}

flow key: in_port(3), eth(src=veth1a, dst=veth5a), tunnel(id=…, ipv4src=192.168.1.2, ipv4dst=192.168.1.1)

action: out_port(1)

Page 13: Martynas Pumputis - Open vSwitch

13

github.com/weaveworks/go-odp

import "github.com/weaveworks/go-odp"

<..>

dpif, err := odp.NewDpif()dp, err := dpif.LookupDatapath(name)vport, err := dp.CreateVport(odp.VxlanVportSpec{"foobar-vxlan", 6785})flow := odp.NewFlowSpec()flow.AddKey(..)flow.AddAction(..)err = dp.CreateFlow(flow)

Page 14: Martynas Pumputis - Open vSwitch

14

github.com/weaveworks/mesh

host1

host2

host3

host4

Effortless Eventual Consistency with Weave Mesh – Peter Bourgon, Matthias Radestock

Page 15: Martynas Pumputis - Open vSwitch

15

github.com/weaveworks/weave

* Docker Plugin (libnetwork) and Docker Proxy* CNI (Kubernetes, Mesos)

* DNS, IPAM w/o a consistent store* Encryption* Multicast

Page 16: Martynas Pumputis - Open vSwitch

16

Problems

Page 17: Martynas Pumputis - Open vSwitch

17

• Missing conntrack support (fixed in 4.2)• Limited MTU of vxlan devices w/o an underlying device (fixed in 4.5)

Page 18: Martynas Pumputis - Open vSwitch

18

Evaluation

Page 19: Martynas Pumputis - Open vSwitch

19

Throughput (Gbits/sec)

iperf3 on AWS c3.8xlarge, Ubuntu 16.04 LTS (4.4.0), Weave Net 1.8.0

Page 20: Martynas Pumputis - Open vSwitch

20

Demo

Page 21: Martynas Pumputis - Open vSwitch

21

host1

host2

host3

fastdp sleeve

Page 22: Martynas Pumputis - Open vSwitch

22

Questions?@weaveworks / @martyns