Skip to content
CNI-Genie for choosing pod network of your choice during deployment time. Supported pod networks - Calico, Flannel, Romana, Weave
Go Shell Makefile Dockerfile
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
client update import paths Feb 14, 2019
conf Add rule for network attachment definition objects in clusterrole Dec 18, 2018
controllers Respective Code modification Jun 5, 2019
docs Doc update for test process May 29, 2019
e2e adding-e2e-tests-in-travis Jul 5, 2019
etc/cni/net.d Add support for bridge Nov 9, 2017
genie Updated default plugin selection mechanism Jul 2, 2019
interfaces Genie modifications to use cni 0.7.0 version May 15, 2019
networkcrd Support interface names along with plugin names May 7, 2019
plugins Merge pull request #75 from satyaranjanp/supportSriov Jan 29, 2018
releases update import paths Feb 14, 2019
sampleconfigs Updation of sample config for using customized CAdvisor address Aug 1, 2018
sampleyamls Updated example pod yaml files May 7, 2019
utils Support interface names along with plugin names May 7, 2019
vendor Vendor files update Jun 5, 2019
.gitignore prepare suto generate and add gitignore Oct 14, 2018
.travis.yml adding-e2e-tests-in-travis Jul 5, 2019 created CODE_OF_CONDUCT Jun 19, 2017 Update Jan 15, 2019
Gopkg.lock Gopkg files update Jun 5, 2019
Gopkg.toml Gopkg files update Jun 5, 2019
LICENSE CNI-Genie first version code push. Mar 25, 2017
MAINTAINERS Updated Maintainers list Mar 13, 2019
Makefile adding-e2e-tests-in-travis Jul 5, 2019
OWNERS Update OWNERS Jul 16, 2019 update import paths Feb 14, 2019 Roadmap Update Mar 1, 2019
cni-genie.go Genie modifications to use cni 0.7.0 version May 15, 2019
cni-genie_test.go update import paths Feb 14, 2019 External build dependencies Mar 11, 2019 Supporting user defined CAdvisor address for smart plugin selection Aug 1, 2018


CNI-Genie enables container orchestrators (Kubernetes, Mesos) to seamlessly connect to the choice of CNI plugins installed on a host, including

  1. 'reference' CNI plugins, e.g., bridge, macvlan, ipvlan, loopback
  2. '3rd-party' CNI plugins, e.g., (Calico, Romana, Weave-net)
  3. 'specialized' CNI plugins, e.g., SR-IOV, DPDK (work-in-progress)
  4. any generic CNI plugin of choice installed on the host

Without CNI-Genie, the orchestrator is bound to only a single CNI plugin. E.g., for the case of Kubernetes, without CNI-Genie, kubelet is bound to only a single CNI plugin passed to kubelet on start. CNI-Genie allows for the co-existance of multiple CNI plugins in runtime.

Build Status Go Report Card

Please feel free to post your feedback, questions on CNI-Genie Slack channel


Here is a 6 minute demo video that demonstrates 3 scenarios

  1. Assign an IP address to a pod from a particular network solution, e.g., 'Weave-net'
  2. Assign multi-IP addresses to a pod from multiple network solutions, e.g., 1st IP address from 'Weave-net', 2nd IP address from 'Canal'
  3. Assign an IP address to a pod from the "less congested" network solution, e.g., from 'Canal' that is less congested




Code of Conduct

Why we created CNI-Genie?

CNI Genie is an add-on to Kuberenets open-source project and is designed to provide the following features:

  1. wide range of network offerings, CNI plugins, available to the users in runtime. This figure shows Kubernetes CNI Plugin landscape before and after CNI-Genie image
    • User-story: based on "performance" requirements, "application" requirements, “workload placement” requirements, the user could be interested to use different CNI plugins for different application groups
    • Different CNI plugins are different in terms of need for port-mapping, NAT, tunneling, interrupting host ports/interfaces

Watch multiple CNI plugins demo

  1. Multiple NICs per container & per pod. The user can select multiple NICs to be added to a container upon creating them. Each NIC can get an IP address from an existing CNI plugin of choice. This makes the container reachable across multiple networks. Some use-cases from SIG-Network are depicted in the figure below image

Watch multi-NICs per 'container' demo

Watch multi-NICs per 'pod' demo (IP addresses assigned not only to the container, but also to the Pod)

  1. Network Attachment Definition. CNI-Genie supports NPWG Multi-Network Specification v1 style network attachment to pods, where pods can be assigned IP according to network-attachment-definition CRD objects created by user.

  2. The user can leave the CNI plugin selection to CNI-Genie. CNI-Genie watches the Key Performance Indicator (KPI) that is of interest to the user and selects the CNI plugin, accordingly.

    • CNI Genie watches KPI(s) of interest for existing CNI plugins, e.g., occupancy rate, number of subnets, latency, bandwidth

Watch Smart CNI Plugin Selection demo

  1. Default plugin support. Another useful feature from genie. Using this, we can ensure to get ip address(es) for a pod by selecting default set of plugins

  2. Network isolation, i.e.,

    • Dedicated 'physical' network for a tenant
    • Isolated 'logical' networks for different tenants on a shared 'physical'network

    Usecase : Obtaining Pod Ip address from customized subnet

  3. CNI-Genie network policy engine for network level ACLs

  4. Real-time switching between different (physical or logical) networks for a given workload. This allows for

    • Price minimization: dynamically switching workload to a cheaper network as network prices change
    • Maximizing network utilization: dynamically switching workload to the less congested network at a threshold


Note: CNI-Genie itself is NOT a routing solution! It makes a call to CNI plugins that provide routing service

More docs here Getting started, CNI-Genie Feature Set

You can’t perform that action at this time.