- Notifications
You must be signed in to change notification settings - Fork17
Connect containers as point-to-point connection, using veth/vxlan/vlan/macvlan
License
redhat-nfvpe/koko
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
koko
is a simple tool which connects between Docker containers/linux netns processes with veth devices/vxlanof linux kernel. Usingkoko
, you can simply make point-to-point connection for containers without linux bridges.
koko
supports following container:
- Docker
- Linux netns namespace (i.e. 'ip netns' or see 'man ip-netns' for its detail)
koko
supports following linux interface to connect above:
- veth: Virtual Ethernet Interface
- vxlan: Virtual eXtensible Local Area Network
Seereleases page.
- golang 1.7 or later
koko
is written in go, so following commands makeskoko
single binary. Build and put it in your container host.
go get github.com/redhat-nfvpe/koko
koko
takes two arguments: two endpoints of container andkoko
connects both.koko
supports veth for two containers in one host and vxlan for two containers in separate host.
./koko {-c <linkname> | -d <container>,<linkname>[,<IP addr>/<prefixlen>,...] | -n <netns name>,<linkname>[,<IP addr>/<prefixlen>,...]| -p <pid>,<linkname>[,<IP addr>/<prefixlen>,...]| -c <linkname> } {-d <container>,<linkname>[,<IP addr>/<prefixlen>,...] | -n <netns name>,<linkname>[,<IP addr>/<prefixlen>,...]| -p <pid>,<linkname>[,<IP addr>/<prefixlen>,...]| -c <linkname> }
Connecting containers which are in separate hosts with vxlan. Following command makes vxlan interfaceand put this interface into given container with/without IP address.
./koko {-c <linkname> | -d <container>,<linkname>[,<IP/mirror>,...] | -n <netns name>,<linkname>[,<IP/mirror>,...]| -p <pid>,<linkname>[,<IP/mirror>,...] } -x <parent interface>,<remote endpoint IP addr>,<vxlan id><IP/mirror> = {<IP addr>/<prefixlen> | mirror:{ingress|egress|both},<mirror IF>}
Connecting containers which are in separate hosts with vlan. Following command makes vlan interfaceand put this interface into given container with/without IP address.
./koko {-c <linkname> | -d <container>,<linkname>[,<IP/mirror>,...] | -n <netns name>,<linkname>[,<IP/mirror>,...]| -p <pid>,<linkname>[,<IP/mirror>,...] } -V <parent interface>,<vlan id><IP/mirror> = {<IP addr>/<prefixlen> | mirror:{ingress|egress|both},<mirror IF>}
Connecting containers which are in separate hosts with macvlan. Following command makes macvlan interfaceand put this interface into given container with/without IP address.
./koko {-c <linkname> | -d <container>,<linkname>[,<IP/mirror>,...] | -n <netns name>,<linkname>[,<IP/mirror>,...]| -p <pid>,<linkname>[,<IP/mirror>,...] } -M <parent interface>,<macvlan mode, {default|private|vepa|bridge|passthru}><IP/mirror> = {<IP addr>/<prefixlen> | mirror:{ingress|egress|both},<mirror IF>}
koko -D
andkoko -N
deletes veth interface or vxlan interface. In case of veth, peering interface is alsoremoved in this command.
./koko {-D <container>,<linkname> | -N <netns name>,<linkname> }
In case of 'egress' (and 'both'), the target interface (i.e. ) needs to be configured to have a queue because veth does not have tx queue in default (seemoby/moby#33162 for the details).ip link set <mirror IF> qlen <queue length>
sets queue length to corresponding veth device.
-c
is to create veth and put it in current namespace-C
is to delete veth in current namespace-d
is to create interface and put it in docker container namespace-D
is to delete interface of docker container namespace-e
is to create interface and put it in cri-o container namespace-E
is to delete interface of cri-o container namespace-n
is to create interface and put it in linux netns namespace-N
is to delete interface of linux netns namespace-p
is to create interface and put it in pid's netns namespace-P
is to delete interface of pid's netns namespace-X
is to create vxlan interface-V
is to create vlan interface-M
is to create macvlan interface-h
is to show help-v
is to show version
./koko -h
Please seeExamples in Wiki.
# connect between docker containers with IPv4 addresssudo ./koko -d centos1,link1,192.168.1.1/24 -d centos2,link2,192.168.1.2/24# connect between docker containers with IPv6 addresssudo ./koko -d centos1,link1,2001:DB8::1/64 -d centos2,link2,2001:DB8::2/64# connect between docker containers with IPv4/IPv6 addresssudo ./koko -d centos1,link1,192.168.1.1/24,2001:DB8::1/64 -d centos2,link2,192.168.1.2/24,2001:DB8::2/64# connect between netns namespacessudo ./koko -n testns1,link1,192.168.1.1/24 -n testns2,link2,192.168.1.2/24# connect between docker container and netns namespacesudo ./koko -d centos1,link1,192.168.1.1/24 -n testns2,link2,192.168.1.2/24# create vxlan interface and put it into docker containersudo ./koko -d centos1,link1,192.168.1.1/24 -x eth1,10.1.1.1,1
- Document
- Tomofumi Hayashi (s1061123)
- Doug Smith (dougbtv)
- Antonio Ojea (aojea)
About
Connect containers as point-to-point connection, using veth/vxlan/vlan/macvlan