CNI-Genie for choosing pod network of your choice during deployment time. Supported pod networks - Calico, Flannel, Romana, Weave
Go Shell Makefile
Clone or download
sushanthakumar Merge pull request #96 from Mirantis/env_k8s
Use annotations passed by env variable
Latest commit b0a61ae Jun 21, 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 signle 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. 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. Network isolation, i.e.,

    • Dedicated 'physical' network for a tenant
    • Isolated 'logical' networks for different tenants on a shared 'physical'network
  2. CNI-Genie network policy engine for network level ACLs

  3. 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