Pipework: Software-Defined Network for Containers and Docker

25
Pipework

description

Pipework lets you connect together containers in arbitrarily complex scenarios. Pipework uses cgroups and namespaces and works with "plain" LXC containers (created with lxc-start), and with the awesome Docker. It's nothing less than Software-Defined Networking for Linux Containers! This is a short presentation about Pipework, given at the Docker Networking meet-up November 6th in Mountain View. More information: - https://github.com/jpetazzo/pipework - http://www.meetup.com/Docker-Networking/

Transcript of Pipework: Software-Defined Network for Containers and Docker

Page 1: Pipework: Software-Defined Network for Containers and Docker

Pipework

Page 2: Pipework: Software-Defined Network for Containers and Docker

PipeworkThe little SDN container framework

that you should NOT use

Page 3: Pipework: Software-Defined Network for Containers and Docker
Page 4: Pipework: Software-Defined Network for Containers and Docker

JérômePetazzoni(@jpetazzo)

Grumpy French DevOps

- Go away or I will replace youwith a very small shell script

Runs everything in containers

- Docker-in-Docker

- VPN-in-Docker

- KVM-in-Docker

- Xorg-in-Docker

- ...

Page 5: Pipework: Software-Defined Network for Containers and Docker

Outline

● History● Features● Roadmap

Page 6: Pipework: Software-Defined Network for Containers and Docker

Use cases

● Performance– Linux bridge, iptables, conntrack... Ohnoes!

● Integration into existing networks– VLAN, bonding...– IP addr management

● Work at L2/L3 instead of L4– Ethernet/IP vs TCP, UDP

Page 7: Pipework: Software-Defined Network for Containers and Docker

Modus Operandi

● Create network interfaces● Move them to containers

(while they're running)● Configure network interfaces

(from outside)● Shell script

Page 8: Pipework: Software-Defined Network for Containers and Docker

Seriously

Page 9: Pipework: Software-Defined Network for Containers and Docker

Shell…?

Page 10: Pipework: Software-Defined Network for Containers and Docker

Yup.

Page 11: Pipework: Software-Defined Network for Containers and Docker

Upsides of /bin/sh

● Easy to understand● Easy to rip out the bits you (don't) need● Most things we do require exec anyway

(ip, route, brctl, etc)● Complicated stuff is hard to implement

(avoid feature creep, e.g. IPAM)

Page 12: Pipework: Software-Defined Network for Containers and Docker

Features

● Start a container:docker run --name db mysql

● Give it an IP address:pipework eth0 mysql 10.1.1.1/24

Page 13: Pipework: Software-Defined Network for Containers and Docker

Features

● Start a container:docker run --name db mysql

● Give it an IP address:pipework eth0 mysql 10.1.1.1/24 ^^^^

● Physical eth0 on the machine

Page 14: Pipework: Software-Defined Network for Containers and Docker

Features

● Start a container:docker run --name db mysql

● Give it an IP address:pipework br0 mysql 10.1.1.1/24 ^^^

● Pre-existing bridge

Page 15: Pipework: Software-Defined Network for Containers and Docker

Features

● Start a container:docker run --name db mysql

● Give it an IP address:pipework ovsbr0 mysql 10.1.1.1/24 ^^^^^^

● Open vSwitch bridge

Page 16: Pipework: Software-Defined Network for Containers and Docker

Features

● Start a container:docker run --name db mysql

● Give it an IP address:pipework ovsbr0 mysql dhcp ^^^^

● DHCP

Page 17: Pipework: Software-Defined Network for Containers and Docker

Features

● Start a container:docker run --name db mysql

● Give it an IP address:pipework ovsbr0 mysql dhcp @10 ^^^

● VLAN

Page 18: Pipework: Software-Defined Network for Containers and Docker

Features

● Fixed address or DHCP● Random MAC or fixed MAC● Change netmask, default route● Linux bridges, OVS bridges● IP over Infiniband● Multiple interfaces

Page 19: Pipework: Software-Defined Network for Containers and Docker

Roadmap

Page 20: Pipework: Software-Defined Network for Containers and Docker
Page 21: Pipework: Software-Defined Network for Containers and Docker

Pipework:

● Will not be integrated into Docker(probably)

● Is not necessary anymore in many cases(thanks to host networking)

● Is not actively maintained(but I'll happily merge PRs)

Page 22: Pipework: Software-Defined Network for Containers and Docker

What do?

● Use it as a big toolbox● Understand how things work● Possibly extract what you need● Contribute to Docker instead

Page 23: Pipework: Software-Defined Network for Containers and Docker

Possible improvements

● Don't require host-side tooling anymore● Allow operation over Docker API● A small POC is available at:

https://github.com/jpetazzo/plumber/

Page 24: Pipework: Software-Defined Network for Containers and Docker

A brighter future

● Native Docker Multi-Host Networkinghttps://github.com/docker/docker/issues/8951

● Docker Network Drivershttps://github.com/docker/docker/issues/8952

Page 25: Pipework: Software-Defined Network for Containers and Docker

Thank you!Questions?