taking security groups to ludicrous speed with ovs (openstack summit 2015)

44
Taking Security Groups to Ludicrous Speed with Open vSwitch OpenStack Summit Vancouver, 2015 Miguel Angel Ajo @mangel_ajo Ivar Lazzaro @ivarlazzaro Thomas Graf @tgraf__ Justin Pettit @Justin_D_Pettit

Upload: thomas-graf

Post on 28-Jul-2015

182 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Taking Security Groupsto Ludicrous Speedwith Open vSwitch

OpenStack SummitVancouver, 2015

Miguel Angel Ajo @mangel_ajo

Ivar Lazzaro@ivarlazzaro

Thomas Graf@tgraf__

Justin Pettit@Justin_D_Pettit

Page 2: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Agenda

Problem Statement– Status Quo – a.k.a “The Bridge Mess”

Possible Solution– OVS + Stateful services (+ OVN)

Results– Performance Numbers

Q&A

Page 3: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Status Quo

Page 4: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)
Page 5: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Mess of Bridges.

br-eth1(Open vSwitch)

OpenFlowtable

OVS bridge

br-int(Open vSwitch)

Page 6: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Mess of Bridges.

br-eth1(Open vSwitch)

veth

OpenFlowtable

OVS bridge

br-int(Open vSwitch)

Page 7: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Mess of Bridges.

br-eth1(Open vSwitch)

qbr(Linux Bridge)

qbr(Linux Bridge)

qbr(Linux Bridge)

veth

iptablesrules

OpenFlowtableOVS

bridge

Linuxbridge

br-int(Open vSwitch)

Page 8: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Mess of Bridges. Why?

VM

br-eth1(Open vSwitch)

qbr(Linux Bridge)

qbr(Linux Bridge)

qbr(Linux Bridge)

VM lxc

tap

veth

iptablesrules

OpenFlowtableOVS

bridge

Linuxbridge

4-5 network devices per guest in host!

br-int(Open vSwitch)

Page 9: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)
Page 10: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Possible SolutionStacking Things Properly

(c) Karen Sagovac

Page 11: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Can we have a pure OVS Model?

br-int(Open vSwitch)

VM

br-eth1(Open vSwitch)

VM lxc

Tap, veth, or internal port

OpenFlow tablewith security groups

OVS bridge

1 network device per guest in host!

Makes VMs and containers equally happy.

Page 12: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Some Background(OVS, OVN, Kernel CT)

Page 13: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

● Highly scaleable multi layer virtual switch for hypervisors

– Apache License (User Space), GPL (Kernel)● Extensive flow table programming capabilities

– OpenFlow 1.0 – 1.5 (some partial)

– Vendor Extensions● Designed to manage overlay networks

– VXLAN (+ extensions), GRE, Geneve, LISP, STT, VLAN, ...● Remote management protocol (OVSDB)

● Monitoring capabilities

Open vSwitch

Page 14: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

● Virtual Networking for OVS– Developed by same team that made OVS

– Works on same platorms (Linux, Containers, Hyper-V)

● Provides L2/L3 virtual networking– Logical switches and routers

– Conntrack-based security groups

– L2/L3/L4 ACLs

– Physical and DPDK-based logical-physical gateways

● Integrated with OpenStack and other CMSs

OVN

Page 15: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Implementing a Firewall with OVS

● OVS has traditionally only supported stateless matches

● As an example, currently, two ways to implement a firewall in OVS

– Match on TCP flags (Enforce policy on SYN, allow ACK|RST)

● Pro: Fast● Con: Allows non-established flow through with ACK or RST

set, only TCP– Use “learn” action to setup new flow in reverse direction

● Pro: More “correct”● Con: Forces every new flow to OVS userspace, reducing flow

setup by orders of magnitude– Neither approach supports “related” flows or TCP window

enforcement

Page 16: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Connection Tracking● We are adding the ability to use the conntrack module from Linux

– Stateful tracking of flows

– Supports ALGs to punch holes for related “data” channels

● FTP, TFTP, SIP● Implement a distributed firewall with enforcement at the edge

– Better performance

– Better visibility

● Introduce new OpenFlow extensions:

– Action to send to conntrack

– Match fields on state of connection

● Have prototype working. Expect to ship as part of OVS in next release.

Page 17: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Netfilter Conntrack Integration

OVS Flow Table

NetfilterConnection Tracker

CTTable

Userspace Netlink API

Create & UpdateCT entries

Connection State (conn_state=)

conntrack()

Recirculation

1

2

3

4

Page 18: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Zone 1

Connection Tracking Zones

OVS Flow Table

CTTable

Zone 2

CTTable

NetfilterConnection Tracker

Page 19: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

OVSFirewallDriver

Page 20: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

OVSFirewallDriver● Original proposal from Amir Sadoughi

– https://review.openstack.org/#/c/89712

● Stable/kilo (just a POC)– https://review.openstack.org/#/c/183725/

Page 21: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Example HTTP Request

VM 1 VM 2HTTP reqresponse

GLOSARY of OF actions

NORMAL = “do like a normal switch”

ct(commit) = “push this packet to CT”

ct(recirc) = “grab any ct info we have, set +trk, and send to T0”

Page 22: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

VM1

VM2

Page 23: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

VM1

Page 24: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

Page 25: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est or +rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

Page 26: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

VM2

Page 27: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

VM2

Page 28: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

Page 29: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

VM1

Page 30: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

SG OpenFlow Table structure

+trk(+est/+rel) → NORMAL

ARP (with filters) → NORMAL

(…)

SG rules in OF:ip

Egress T1Input T0 ct(commit,recirc)

(…)

SG rules: tp_dst=80

Ingress T2

From VM(n)(MAC+in_port -trk)

-trk → ct(recirc)

To V

M(n

)(M

AC

)

matchct(commit),NORMAL

Page 31: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

openvswitch_firewall.py

● update_security_group_{rules, members}

● prepare_port_filter

● update_port_filter

● remove_port_filter

● filter_defer_apply_{on,off}

neutron.agent.linux.firewall.FirewallDriver

neutron.agent.linux.openvswitch_firewall.OVSFirewallDriver

Page 32: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Performance Numbers

Page 33: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Test Setup Explained

System: 2 Socket, 24 core, IvyBridge

CPU: Intel(R) Xeon(R) CPU E5-2643 v2 @ 3.50GHz

Kernel: 3.10.0-229.1.2.el7.x86_64

Test: Netperf with TCP_STREAM and TCP_RR

Notes: Virt overhead eliminated, netperf/netserver runs baremetal

Compute 1

netperf

Compute 2

10GiB Link

netservernetserver

localMulti node

Page 34: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Stream, Local, 1 netperf thread

64 128 512 1024 9000 640000

50

100

150

200

250

300

350

400

450

500

0

5,000

10,000

15,000

20,000

25,000

TCP stream Local, 1 netperf threads

sub-title

iptables throughput

OVS throughput

iptables cycles

OVS cycles

Packet Size

CP

U M

egac

ycle

s pe

r M

bit

Mbi

t

Page 35: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Stream, Local, 16 netperf threads

64 128 512 1024 9000 640000

50

100

150

200

250

300

350

400

0

50,000

100,000

150,000

200,000

250,000

TCP stream Local, 16 netperf threads

sub-title

iptables throughput

OVS throughput

iptables cycles

OVS cycles

Packet Size

CP

U M

egac

ycle

s pe

r M

bit

Mbi

t

Page 36: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Stream, Multi Node, 8 netperf threads

64 128 512 1024 9000 640000

50

100

150

200

250

0

1,000

2,000

3,000

4,000

5,000

6,000

7,000

8,000

9,000

10,000

TCP stream node-to-node, 8 netperf threads

iptables throughput

OVS throughput

iptables cycles

OVS cycles

Packet Size

CP

U M

egac

ycle

s pe

r M

bit

Mbi

t

Page 37: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Requests, Local, 1 netperf thread

64 128 512 1024 9000 640000

50

100

150

200

250

300

350

400

450

500

0

5,000

10,000

15,000

20,000

25,000

TCP stream Local, 1 netperf threads

sub-title

iptables throughput

OVS throughputiptables cycles

OVS cycles

Packet Size

CP

U M

egac

ycle

s pe

r M

bit

Mbi

t

Page 38: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Requests, Local, 64K packets

1 4 8 160

10

20

30

40

50

60

70

0

20,000

40,000

60,000

80,000

100,000

120,000

140,000

160,000

TCP Requests/s Local, 64K packets

sub-title

iptables requests/s

OVS requests/siptables cycles

OVS cycles

Number netperf threads

CP

U M

egac

ycle

s pe

r M

bit

Req

uest

s/s

Page 39: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Requests, Multi Node, 1 netperf thread

64 128 512 1024 9000 640000

2

4

6

8

10

12

14

16

18

20

0

5,000

10,000

15,000

20,000

25,000

30,000

TCP Requests/s node-to-node, 1 netperf threads

sub-title

iptables requests/s

OVS requests/siptables cycles

OVS cycles

Packet Size

CP

U M

egac

ycle

s pe

r M

bit

Req

uest

s/s

Page 40: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

TCP Requests, Multi Node, 64K packets

1 4 8 160

5

10

15

20

25

30

35

40

0

2,000

4,000

6,000

8,000

10,000

12,000

14,000

16,000

18,000

20,000

TCP Requests/s node-to-node, 64K packets

sub-title

iptables requests/s

OVS requests/siptables cycles

OVS cycles

Number netperf threads

CP

U M

egac

ycle

s pe

r M

bit

Req

uest

s/s

Page 41: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Conclusion

● Both throughput and latency are considerably improve (Up to 6x in some situations).

● If limited by wire speed, pure OVS approach generally consumes less CPU cycles for the same result, leaving more resources for actual workload.

● Issue for specific packet sizes to be investigated and resolved before merge.

Page 42: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Next Steps

● Convert ML2 PoC to a patch that can be merged

– Write functional tests

– Optimize OF rules/manipulation● Complete upstream merge of connection tracking

support in Open vSwitch in the Linux kernel

● Consider and realize OVN integration of this work

● Hopefully ready for Liberty

Page 43: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Q&A

● OVS w/ CT Neutron ML2 plugin

– https://github.com/mangelajo/vagrant-rdo-juno-ovs-ct-firewall

● Open vSwitch

– http://openvswitch.org/● Conntrack code on GitHub

– https://github.com/justinpettit/ovs/tree/conntrack● Stateful Connection Tracking & Stateful NAT (OVS

conference)

– http://www.openvswitch.org/support/ovscon2014/17/1030-conntrack_nat.pdf

Page 44: Taking Security Groups to Ludicrous Speed with OVS (OpenStack Summit 2015)

Thank You!