Applications on different Kubernetes machines need to communicate, and some connections need to be blocked. A network plugin supplies the Pod network; policy support lets you specify which connections are allowed. You will often see these called CNI plugins, after the Container Network Interface used to configure container networking.

Cilium uses Linux eBPF technology to implement networking and security, with Hubble supplying visibility into traffic. eBPF lets small programs process events inside the Linux kernel, including decisions about network packets. Calico also provides networking and policy, including an eBPF data-plane option. This is not an eBPF-versus-non-eBPF choice. Cilium versus Calico is a choice of cluster networking implementation, not just an application add-on: an unsupported replacement can disconnect workloads.

Start with the networking your cloud service or Kubernetes distribution supports. Evaluate Cilium when you want its networking and Hubble traffic-visibility tools together, for example, to investigate which services are connecting and where traffic is dropped. Start with Calico when you already operate its routed network or need its documented BGP integration with network routers. BGP exchanges routing information so the wider network can find Pod addresses. These are starting cases, not exclusive features or proof that migration would help. The right configuration for your platform matters more than the project having the longest feature list.

Questions that change the answer

  1. Does the cloud or distribution prescribe a networking mode, address allocation model or supported upgrade path?
  2. Do you need overlay networking, routed Pod addresses, BGP integration or native cloud addresses?
  3. Which NetworkPolicy semantics, host policies, observability and encryption features are required?
  4. Will kube-proxy remain, or will a supported replacement handle Services? How is API-server reachability preserved?
  5. Who can troubleshoot DNS, MTU, conntrack, routing and kernel issues during an outage?

Check the exact networking mode

Cilium documentation describes eBPF-based networking and kube-proxy replacement. Calico provides networking and policy options. Select a documented mode for the exact release and platform; a project having a capability does not mean it is enabled or supported in every mode. Keep gateway functionality separate from the basic Pod-network decision.

Test the failure paths

Check Pod-to-Pod, Pod-to-Service, DNS, external egress, ingress, node restart and policy-denied traffic. Include dual-stack and network appliances if they are part of the environment. Large packets and long-lived connections expose failures that a short ping cannot. Record the kernel, Kubernetes, plugin, cloud and configuration versions with any result.

Plan migration around connectivity

Rehearse on a representative cluster and retain a path to manage nodes if cluster networking fails. A rollback can require node replacement or workload rescheduling; do not assume reverting one Helm value restores the old data plane. This comparison provides decision criteria and a test plan, not a claim that Kubedex benchmarked every CNI.

The original record

Historical Kubedex content

Original publication: 2018-11-12T06:21:44+00:00. Preserved for context. Commands, versions, prices and results below reflect the original research.

The most complicated comparison I’ve ever attempted. From a 10,000 ft perspective it should be simple. We have CNI as a common standard in Kubernetes and all these plugins need to do is assign an IP address to each pod so they can talk to each other, both on the same host, and across hosts.

As you can see from the table the devil is in the detail. In this blog we’ll examine the key differences between Flannel, Calico, Weave, Cilium, Kube Router, Romana and Contiv.

Historical illustration

You can view and edit the Google sheet here.

Update: the Google sheet now also includes Tungsten Fabric, kopeio and amazon-vpc-cni-k8s.

Unfortunately, I wasn’t clever enough to figure out a way to compare combinations of features directly across all plugins. Depending on the plugin, and depending on your underlying network, you will configure things differently. We would need a column for each variation of settings and I think that may be overkill. What we’ll do instead is simplify by grouping plugins by type and then I’ll attempt to give my opinion on the key differentiators.

Before we do that let’s take a segway into some background information. I was interested in what each cloud Kubernetes service used, as well as defaults for the On-Prem Kubernetes distributions.

Service / Distro Network
GKE Managed, Calico for network policy
EKS AWS VPC CNI, Calico for network policy
AKS Managed, adding Calico soon
OpenShift OpenShift SDN, can use Flannel as an option. Calico also supported.
PKS NSX-T or Flannel on GCP
Docker Enterprise Calico
Rancher Canal, Flannel, Calico
Kubermatic Canal, Calico
CDK Canal, Flannel, Calico, other CNI like Weave
Suse CaaS Flannel
MetalK8s Calico
Mesos Calico
IBM Calico
Daocloud Calico, MacVlan, Flannel
Platform 9 Calico, Weave, Flannel, OpenContrail
Cisco Container Platform ACI, Contiv, Calico
Kops Kubenet (limited to 50 nodes), optional CNI (see comment)
Kubespray Calico, others (see comment)
Kubo Flannel

When you provision a Kubernetes cluster with GKE, EKS or AKS the network just works. Each of the cloud providers have their own CNI plugins. AWS have open sourced their plugin which is quite a friendly thing to do. You may notice that all 3 clouds are adopting Calico specifically to handle network policy.

Amongst the On-Prem distributions Calico again reigns supreme. This time for both networking and network policy. OpenShift and Cisco have their own plugins as you would expect.

Layer 2 vs Layer 3

This is something that you’ll need to decide first. Layer 3 is more desirable but often the world is not fair and there are circumstances where you will be forced to use a Layer 2 solution.

Layer 2

Let’s examine the Layer 2 solutions.

Historical illustration

Flannel, Weave, Cilium and Contiv can all run in Layer 2 mode which means they create a VXLAN that encapsulates all traffic between hosts. Encapsulation adds a cost in terms of performance. However, most modern network cards will offload this so perhaps it’s not an issue.

You’ll often use a Layer 2 solution to cover over deficiencies in the underlying network. For example maybe you have address space limitations. In the case of Weave, Cilium and Contiv they additionally provide Layer 3 functionality as an all in one solution.

This is where it gets tricky. You can mix and match plugins and use combinations together. Technically you could run Flannel as a Layer 2 network under many of the Layer 3 options in this comparison. Let’s assume that you want to use the fewest number of plugins for the sake of sanity.

Flannel is the oldest and arguably most mature plugin but it has the fewest features. It’s really common for people to combine Flannel and Calico together into what used to be called ‘Canal’. It seems the Canal project has died and both Flannel and Calico develop separately but maintain good documentation for combining together.

Weave has an encryption library baked in and has some unique fast data path features. The other stand-out feature for Weave is the support for partially connected networks. All Weave nodes operate as a mesh and so you only need a route between one other connected segment to achieve full connectivity. It’s also the only plugin with built in name resolution which can be used for load balancing services. The fact that Weave operates as a full mesh is both a massive strength and a weakness. Past a few hundred nodes the overhead of distributing routes becomes a bottleneck and you then need to disable auto-discovery and start to manually manage connections.

Cilium differentiates itself by providing Layer 7 policies and using BPF to process the rules inside the kernel which should scale a lot better than iptables rules. The only down side is it requires quite a new kernel version. I quite like Cilium and I’ve received a number of comments from people who are using it happily in production.

Contiv has many of the same features as the other options but also has some funky stuff that allows overlapping IP’s, for if you need multiple pods to share the same IP address. If you have a significant On-Prem Cisco investment then this is probably one to trial.

Layer 3

Let’s say you don’t need Layer 2 functionality at all and you’d prefer a pure Layer 3 plugin. For many this will absolutely be the case. Layer 2 VXLAN’s are a bit of a black box when trying to debug. Layer 3 plugins on the other hand allow you to quickly print a routing table on an instance to view what’s going on.

The pure Layer 3 plugins are Calico, Kube Router and Romana. Although, remember, you can also make Cilium and Contiv Layer 3 only by changing settings but we’ve covered those already.

Historical illustration

Calico is the oldest and most mature. I don’t have any hard facts to substantiate this assumption, but, I think Calico is probably the most popular plugin overall. The guys from Tigera on the Sig-Network channel on Kubernetes Slack are awesomely responsive and left me feeling that paid support would be worth every penny.

Kube Router is a relatively new project. It’s simple and uses the IPVS/LVS kernel feature to speed up load balancing and routing. It also has direct server return which is supposed to decrease latency.

Romana aims to achieve host level network performance by working without any encapsulation at all. Calico and Kube Router both encapsulate traffic at Layer 3 (usually with IPIP) in order to route traffic between subnets which comes at a slight performance cost. The only negative thing I saw with Romana is lack of community.

Recommendations

Let’s start with the simplest first. If you’re using a cloud service like GKE, EKS or AKS you are covered already and should simply use their Calico integration for network policy.

For OpenShift, PKS or Cisco use their built in SDN.

What about custom cloud? For example Rancher, Kops or just Kubeadm on AWS. Here’s my thought process: start with Calico and only deviate if you need something that it does not provide.

Custom On-Prem is where things get trickier. Here’s a quick table that shows how I think each options deviate.

Historical illustration

Again, I’d start with Calico as the default choice and work out if you need any other features. If you are extremely performance sensitive I’d benchmark Calico vs Kube Router and Romana. Each of those have features that should reduce latency, or at least remove plugin performance overhead.

I think Calico has become the default choice for many because of the way it uses BGP. Networks can be extremely difficult to troubleshoot and calico makes it relatively easy. Lots of people look at the choices and say ‘oh I can peer it into my normal network easily’. They rarely do, but thats’s still a big plus when you’re evaluating something.

If security is your main concern than I’d trial Calico vs Cilium. I also read a blog that showed Cilium may be a very good choice for networking pods across Kubernetes clusters without the pain of complicated BGP configuration.

If you need something to cover over your On-Prem network deficiencies then Weave is probably a good choice.

To summarise my recommendation is Calico 9 times out of 10. It’s simple, fast, has lots of features and a good company behind it.

As ever, if I have made an error please let me know and I’ll update this post. I’m interested to get feedback on what network plugins you are using and what made you choose it.

The post Kubernetes Network Plugins appeared first on kubedex.com.

Historical workbook values; blanks mean unknown, not No. Prices, versions, maturity labels and feature claims are not current recommendations.

Historical workbook values; blanks mean unknown, not No. Prices, versions, maturity labels and feature claims are not current recommendations.

Kubernetes Networks / Comparison (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Kubernetes Networks / Comparison (historical)
.AntreaFlannelWeave NetCalicoCiliumUnknown (damaged historical cell)RomanaContivTungsten Fabrickopeio
CompanyVMwareRed HatWeaveWorksTigera IncIsovalentUnknownPani Networks IncCiscoJuniperKopeio
Latest Stable Version0.11.10.11.02.6.03.10.1 => 3.16.61.9.3Unknown (damaged historical cell)2.0.21.25.0,1experimental
Last Release date2020-12-01 00:00:002019-01-28 00:00:00Unknown2019-11-07 00:00:002021-01-22 00:00:00UnknownUnknownUnknownUnknownUnknown
Start Date2019-10-01 00:00:002014-07-01 00:00:002014-08-01 00:00:002014-07-01 00:00:002015-12-01 00:00:002017-04-01 00:00:002015-11-01 00:00:002014-12-01 00:00:002012.02016-05-01 00:00:00
LanguageGoGoGoGoGoGoUnknownGoC / C++Go
Minimum OS Versionkernel version >= 4.4 is requiredkernel version >= 3.12Linux Kernel > 3.8RHEL 7, Centos 7, Ubuntu 16.04, Debian 8Linux Kernel >= 4.9--CentOS 7, Ubuntu 16.04Linux Kernel > 2.6-
Minimum Kubernetes Version1.161.61.61.61.61.61.81.81.81.8
IP VersionUnknown (damaged historical cell)ipv4ipv4ipv4, ipv6ipv4, ipv6ipv4ipv4ipv4, ipv6ipv4, ipv6ipv4
Open SourceYesYesYesYesYesYesYesYesYesYes
EncryptionIPsec ESP or WireGuard.ExperimentalNaCl libraryWireguard (since 3.14)Yes, IPSec and WireguardNoNoNoNoExperimental
Network policyYes, Ingress, Egress,UnknownIngress, EgressIngress, EgressIngress, EgressIngress, EgressIngress, EgressIngress, EgressIngress, EgressNo
Network policy auditingUnknownNoNoPaidYes (via Cilium's Hubble)NoNoNoNoNo
Recommended Max Nodes500+Unknown500.05000.05000+UnknownUnknownUnknownUnknownUnknown
Default Network ModelUnknownLayer 2 VXLANLayer 2 VXLANLayer 3Layer 3 (L2 avaliable with chaining)Layer 3Unknown (damaged historical cell)Layer 2, Layer 3 or ACI optionsUnknownLayer 2, VXLAN or IPSEC
Layer 2 EncapsulationVXLAN, GENEVE, GRE, STTVXLANVXLan-Unknown--VXLANVXLANVXLAN
Layer 3 RoutingNSXiptablesiptables, kubeproxyiptables, kubeproxyBPF, kubeproxyIPVS, iptables, ipsetsiptablesiptablesTF VRouterip route
Layer 3 EncapsulationVXLAN, GENEVE, GRE, STT-Sleeve (fallback)IPIP or VXLan (optional)VXLan or Geneve (optional)IPVS/LVS DR mode, GRE/IPIP-VLANMPLSoUDP, MPLSoGRE, VXLAN-
Layer 4 Route DistributionAPI--BGPCRD, kvstore, BGPBGPBGP, OSPFBGPBGP--
vnic per containeryesnoyesyesyesyesnoyesUnknownno
Multicast SupportyesnoyesnonononoyesUnknownno
Subnet PerHost, namespaceHostClusterOne or more of Cluster / Host / Namespace / DeploymentHost, Cluster or Custom (via CRD)HostHostOverlapping IP poolsVRFsHost
Isolationlabel, cidr, advancedcidrcidr, networklabel, host, cidr, network setslabel, services, AWS metadata, entities (host, cluster, world), cidr, dns, L7 (http, kafka, cassandra, memcached, ...)cidrcidrlabel, cidrUnknownno
Load Balancingyes, can replace kube-proxynoyesyesYes, can replace kube-proxyyesyesyesUnknownNo
Multi Cluster Routingyes thru NSXnoyesyesyesyesyesyesUnknownno
Partially Connected Networks-noyesnononononoUnknownno
IP Overlap SupportUnknownnonononononoyesUnknownno
Name ServicenonoyesnononononoUnknownno
DatastoreCRDkubernetes CRDs or etcdv3file inside podskubernetes CRDs, or etcdv3CRD, etcd3, consulkubernetes etcdkubernetes etcdkubernetes etcd, etcd or consulUnknownkubernetes etcd
Paid SupportYesNoYesYesYesnoYesNoUnknownNo
Docshttps://github.com/vmware-tanzu/antrea/tree/master/docshttps://coreos.com/flannel/docs/latest/https://www.weave.works/docs/net/latest/overview/https://docs.projectcalico.org/v3.3/introduction/http://docs.cilium.io/en/stable/https://github.com/cloudnativelabs/kube-routerhttps://romana.readthedocs.io/en/latest/http://contiv.github.io/documents/https://github.com/tungstenfabric https://github.com/Juniper/contrail-controllerhttps://github.com/kopeio/networking
IntegrationsNSX, TMC, TSM, OctantFlannel + Calico-Flannel + CalicoCilium + Kube RouterCilium + Kube Router-UnknownUnknownUnknown
PlatformsLinux, WindowsLinux, WindowsLinuxLinux, WindowsLinuxLinuxLinuxLinuxLinuxLinux
Why?Global and Enchanced Network Policy, many integrationsLayer 2 solution. Simple and mature. Overlays are useful when network address space is limited. Overlays also mostly auto-configure. Combines Layer 2 overlay networking with network policies and other features. Best solution for partially connected networks.Layer 3 solution. Good network policy support. Default on most Kubernetes distributions. Easy to debug on hosts by looking at route table. BGP allows for access both inside and outside the cluster.Security and observability focused. Uses BPF which is faster than iptables to enforce identity based policies. Policies also operate at Layer 7 allowing for application specific enforcement. The cluster mesh feature is simpler than BGP to confgure.Single Go binary built from the ground up for Kubernetes. Uses new IPVS/LVS kernel features to improve service load balancing performance. Also does direct server return to improve latency.Aims for performance by using native Linux routing, iptables and no encapsulation.Integrates with On-Prem Cisco ACI. Has a cool bandwidth network policy.UnknownReally simple. Uses the default Kubernetes network and sets up layer 3 routes between pods using ip route.
ScenarioOn-prem, Public cloud - AKS, EKS, BareMetalOn-Prem or custom cloud where native routing isn't possibleSmall to medium size On-Prem or custom cloudOn-Prem with native routing or cloud Kubernetes servicesOn-Prem (direct routing), cloud integrated, security focusedOn-Prem or custom cloud latency focussedLarge scale On-Prem or AWSOn-Prem with ACI investmentUnknownUnknown
Why Not?UnknownNative routing is faster and easier to debug. You need to also use Calico if you want network policies.Some people are scared of overlay networks because they aren't as easy to debug as native routing. It's a full mesh so very large clusters will require custom config with autodiscovery disabled.IPIP mode is needed when routing between subnets (AWS AZ's) which negates some of the performance benefits vs an overlay. BGP is slighly scary to some people.Overlay can be disabled if direct routing is preferred.Similar to Calico in that it uses IPIP by default to encapsulate traffic between subnets. Quite a new project and although it's in use in production at some companies it's still not v1.Community not very largeNo defaults make the recommended setup confusing.UnknownStill in experimental or Alpha stage.
ReferencesUnknownUnknownUnknownUnknown[0] https://cilium.io/blog/2019/04/24/cilium-15UnknownUnknownUnknownUnknownUnknown

36 rows

Kubernetes Networks / Layer 2 (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Kubernetes Networks / Layer 2 (historical)
Feature / source labelFlannelWeave NetContivopenshift-sdn
CompanyRed HatWeaveWorksCiscoRed Hat
Latest Stable Version0.10.02.5.01.23.11
Start Date2014-07-01 00:00:002014-08-01 00:00:002014-12-01 00:00:002015-01-01 00:00:00
LanguageGoGoGoGo
Minimum OS VersionUnknownLinux Kernel > 3.8CentOS 7, Ubuntu 16.04CentOS 7
Minimum Kubernetes Version1.61.61.81.9
IP Versionipv4ipv4ipv4, ipv6ipv4
Open SourceYesYesYesYes
EncryptionExperimentalNaCl libraryNoIPSec
Network policyNoIngress, EgressIngress, EgressIngress, Egress
Recommended Max NodesUnknown500.0UnknownUnknown
Default Network ModelLayer 2 VXLANLayer 2 VXLANLayer 2, Layer 3 or ACI optionsLayer 2 VXLAN
Layer 2 EncapsulationVXLANVXLanVXLANVXLAN
Layer 3 Routingiptablesiptables, kubeproxyiptablesiptables, kube-proxy
Layer 3 Encapsulation-Sleeve (fallback)VLAN-
Layer 4 Route Distribution--BGP-
vnic per containernoyesyesyes
Multicast Suportnoyesyesyes
Subnet PerHostClusterOverlapping IP poolsHost
Isolationcidrcidr, networklabel, cidrNamespace
Load Balancingnoyesyesyes
Multi Cluster Routingnoyesyesno
Partially Connected Networksnoyesnono
IP Overlap Supportnonoyesno
Name Servicenoyesnono
Datastorekubernetes CRDs or etcdv3file inside podskubernetes etcd, etcd or consulkubernetes CRD (soon)
Paid SupportNoYesNoyes
Docshttps://coreos.com/flannel/docs/latest/https://www.weave.works/docs/net/latest/overview/http://contiv.github.io/documents/https://docs.okd.io/latest/architecture/networking/sdn.html
PlatformsLinux, WindowsLinuxLinuxLinux
UnknownFlannelWeave NetContivUnknown
Why?Layer 2 solution. Simple and mature. Overlays are useful when network address space is limited. Overlays also mostly auto-configure. Combines Layer 2 overlay networking with network policies and other features. Best solution for partially connected networks.Integrates with On-Prem Cisco ACI. Has a cool bandwidth network policy.Unknown
ScenarioOn-Prem or custom cloud where native routing isn't possibleSmall to medium size On-Prem or custom cloudOn-Prem with ACI investmentUnknown
Why Not?Native routing is faster and easier to debug. You need to also use Calico if you want network policies.Some people are scared of overlay networks because they aren't as easy to debug as native routing. It's a full mesh so very large clusters will require custom config with autodiscovery disabled.No defaults make the recommended setup confusing.Unknown
IntegrationsFlannel + Calico-UnknownUnknown
UnknownSourcesUnknownUnknownUnknown
Unknownhttps://medium.com/@jain.sm/flannel-vs-calico-a-battle-of-l2-vs-l3-based-networking-5a30cd0a3ebdUnknownUnknownUnknown
Unknownhttp://chunqi.li/2015/11/15/Battlefield-Calico-Flannel-Weave-and-Docker-Overlay-Network/UnknownUnknownUnknown
Unknownhttps://docs.google.com/spreadsheets/d/1polIS2pvjOxCZ7hpXbra68CluwOZybsP1IYfr-HrAXc/edit#gid=0UnknownUnknownUnknown
Unknownhttps://www.objectif-libre.com/en/blog/2018/07/05/k8s-network-solutions-comparison/UnknownUnknownUnknown
Unknownhttp://machinezone.github.io/research/networking-solutions-for-kubernetes/UnknownUnknownUnknown
Unknownhttps://chrislovecnm.com/kubernetes/cni/choosing-a-cni-provider/UnknownUnknownUnknown
Unknownhttps://news.ycombinator.com/item?id=11132574UnknownUnknownUnknown
Unknownhttps://medium.com/@olemarkus/kubernetes-clustermesh-with-cilium-and-kops-7a8670551725UnknownUnknownUnknown

43 rows

Kubernetes Networks / Layer 3 (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Kubernetes Networks / Layer 3 (historical)
Feature / source labelCalicoCiliumKube RouterRomana
CompanyTigera IncCovalentCloudNative LabsPani Networks Inc
Latest Stable Version3.3.11.9.50.2.12.0.2
Start Date2014-07-01 00:00:002015-12-01 00:00:002017-04-01 00:00:002015-11-01 00:00:00
LanguageGoGoGoBash
Minimum OS VersionRHEL 7, Centos 7, Ubuntu 16.04, Debian 8Linux Kernel > 4.9UnknownUnknown
Minimum Kubernetes Version1.61.61.61.8
IP Versionipv4, ipv6ipv4, ipv6ipv4ipv4
Open SourceYesYesYesYes
EncryptionNoYesNoNo
Network policyIngress, EgressIngress, EgressIngress, EgressIngress, Egress
Recommended Max Nodes5000.0UnknownUnknownUnknown
Default Network ModelLayer 3Layer 3Layer 3Layer 3
Layer 2 Encapsulation-Unknown--
Layer 3 Routingiptables, kubeproxyBPF, kubeproxyIPVS, iptables, ipsetsiptables
Layer 3 EncapsulationIPIP (optional)VXLan, GeneveIPVS/LVS DR mode, GRE/IPIP-
Layer 4 Route DistributionBGPBGPBGPBGP, OSPF
vnic per containeryesyesyesno
Multicast Suportnononono
Subnet PerOne or more of Cluster / Host / Namespace / DeploymentHostHostHost
Isolationlabel, host, cidr, network setslabel, host, services, entities, cidr, dns, service accounts, namespacescidrcidr
Load Balancingyesyesyesyes
Multi Cluster Routingyesyes (see comment)yesyes
Partially Connected Networksnononono
IP Overlap Supportnononono
Name Servicenononono
Datastorekubernetes CRDs, or etcdv3kubernetes, etcd, consulkubernetes etcdkubernetes etcd
Paid SupportYesYes (https://isovalent.com)noYes
Docshttps://docs.projectcalico.org/v3.3/introduction/http://docs.cilium.io/en/https://github.com/cloudnativelabs/kube-routerhttps://romana.readthedocs.io/en/latest/
PlatformsLinux, WindowsLinuxLinuxLinux
UnknownCalicoCiliumKube RouterRomana
Why?Layer 3 solution. Good network policy support. Default on most Kubernetes distributions. Easy to debug on hosts by looking at route table. BGP allows for access both inside and outside the cluster.Security focussed. Uses BPF which is faster than iptables to enforce identity based policies. Policies also operate at Layer 7 allowing for application specific enforcement. The cluster mesh feature is simpler than BGP to confgure.Single Go binary built from the ground up for Kubernetes. Uses new IPVS/LVS kernel features to improve service load balancing performance. Also does direct server return to improve latency.Aims for performance by using native Linux routing, iptables and no encapsulation.
ScenarioOn-Prem with native routing or cloud Kubernetes servicesOn-Prem or custom cloud security focussedOn-Prem or custom cloud latency focussedLarge scale On-Prem or AWS
Why Not?IPIP mode is needed when routing between subnets (AWS AZ's) which negates some of the performance benefits vs an overlay. BGP is slighly scary to some people.Requires later Kernel version. Overlay can be disabled if direct routing is preferred.Similar to Calico in that it uses IPIP by default to encapsulate traffic between subnets. Quite a new project and although it's in use in production at some companies it's till not v1.Community not very large
IntegrationsFlannel + CalicoKubernetes, Envoy, Prometheus, Other CNIs, Kube Router, Metallb, Bird, FRRCilium + Kube Router-

34 rows

Kubernetes Networks / Defaults (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Kubernetes Networks / Defaults (historical)
Feature / source labelNetwork
GKEUnknown
EKSAWS VPC CNI, Calico orr Antrea for network policy
AKSManaged, adding Calico soon, Antrea is supported
DigitalOceanCilium
OpenShiftOpenShift SDN, can use Flannel as an option. Calico also supported. Antrea supported
PKSNSX-T or Flannel on GCP. Antrea is suppoted
Docker EnterpriseCalico
RancherCanal, Flannel, Calico
KubermaticCanal, Calico
CDKCanal, Flannel, Calico, other CNI like Weave
Suse CaaSCilium
MetalK8sCalico
MesosCalico
IBMCalico
DaocloudCalico, MacVlan, Flannel
Platform 9Calico, Weave, Flannel, OpenContrail
Cisco Container PlatformACI, Contiv, Calico
KopsKubenet (limited to 50 nodes), optional CNI (see comment)
KubesprayUser choice, others (see comment)
KuboFlannel

20 rows

Kubernetes Networks / Sources (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Kubernetes Networks / Sources (historical)
Blog:https://kubedex.com/kubernetes-network-plugins/Column 3 (unnamed)Column 4 (unnamed)
Sources:UnknownUnknownUnknown
https://medium.com/@jain.sm/flannel-vs-calico-a-battle-of-l2-vs-l3-based-networking-5a30cd0a3ebdUnknownUnknownUnknown
http://chunqi.li/2015/11/15/Battlefield-Calico-Flannel-Weave-and-Docker-Overlay-Network/UnknownUnknownUnknown
https://docs.google.com/spreadsheets/d/1polIS2pvjOxCZ7hpXbra68CluwOZybsP1IYfr-HrAXc/edit#gid=0UnknownUnknownUnknown
https://www.objectif-libre.com/en/blog/2018/07/05/k8s-network-solutions-comparison/UnknownUnknownUnknown
http://machinezone.github.io/research/networking-solutions-for-kubernetes/UnknownUnknownUnknown
https://chrislovecnm.com/kubernetes/cni/choosing-a-cni-provider/UnknownUnknownUnknown
https://news.ycombinator.com/item?id=11132574UnknownUnknownUnknown
https://medium.com/@olemarkus/kubernetes-clustermesh-with-cilium-and-kops-7a8670551725UnknownUnknownUnknown
UnknownUnknownUnknownd

10 rows

Container-Native Networking - Comparison / Networking (historical)

Historical snapshot

Recovered comparison data. Versions, prices and availability describe the original research, not a current benchmark. Blank or damaged source values are marked unknown.

Choose columns
Visible columns
Container-Native Networking - Comparison / Networking (historical)
FeatureDocker Overlay NetworkCalicoFlannelWeave NetCanal (Calico + Flannel)RomanaAporeto/TriremeCisco ContivCovalent CiliumKube-RouterOVS/OVNNSX-TMidokuraNuageOpen Contrail
Open SourceYesYesYesYesYesYesYesYesYesYesYesNoYes/NoNoYes
Network Model [Data Path Technique]VXLAN overlayL3 with BGP Peering or IPIP EncapsulationVXLAN or UDP overlayVXLAN or UDP overlay; IP routed for AWS VPCVXLAN or UDP overlayLayer 3Layer 3 with TLSLayer 2, Layer 3 (BGP) & VxLAN overlayL3 with optional encapsulationBGP BasedVxLANGENEVEUnknownUnknownUnknown
Network Policy API SupportUnknownUnknownNoUnknownYesUnknownUnknownUses a custom mechanism for applying policy.UnknownUnknownUnknownYesUnknownUnknownUnknown
Application IsolationCIDR SchemaPolicy Schema based on labels, cidrs, ports and profilesCIDR SchemaCIDR Schema, Network Policy APIPolicy Schema based on labels, cidrs, ports and profilesCIDR SchemaTLS-basedBoth Label based as well as CIDR SchemaPolicy based on labelsUnknownUnknownCIDRUnknownUnknownUnknown
Isolation from Host Network NSYESYesUnknownYesUnknownUnknownUnknownYesUnknownUnknownUnknownYesUnknownUnknownUnknown
Ingress PolicyYesYesUnknownYesUnknownYesUnknownYes*UnknownUnknownUnknownUnknownUnknownUnknownUnknown
Egress policyUnknownYesNoNoYesYesUnknownUnknownYesUnknownUnknownUnknownUnknownUnknownUnknown
Protocol SupportALL except multicastALL ALLALLALLALLTCP onlyAllArtifically limited to IPv4/IPv6 & TCP/UDP/ICMP[v6]UnknownUnknownAll IPv4 and IPv6. Multicast not supportedUnknownUnknownUnknown
Built-in Name ServiceYESNoNoYesNoNoNoYesNoUnknownUnknownNoUnknownUnknownUnknown
Built-in Service Load BalancerYESNoNoNoNoNoUnknownYesYesUnknownUnknownYesUnknownUnknownUnknown
Cluster Store RequirementsNoneetcd/k8s APIetcd/k8s APINoneetcd/k8s API etcd/Consul ZookeeperNone etcd/ConsulYes (consul or etcd)UnknownUnknownZookeeperUnknownUnknownUnknown
EncryptionYESNoNoNaCl LibraryNoNoTLSNoYes (IPSec)UnknownUnknownTLSUnknownUnknownUnknown
Separate vNIC for ContainerYESYesNoYesNoNoNoYesYes (shared logical routing table)UnknownUnknownNAUnknownUnknownUnknown
IP Overlap SupportYESNoNoNoNoNoNoYes, multiple VRFsNoUnknownUnknownYesUnknownUnknownUnknown
Container Subnet RestrictionYESNoNoYes, configurable after startNoNoNoNo restrictionNoUnknownUnknownUnknownUnknownUnknownUnknown
Multicast supportNONoNoYesNoNoNoYesNoUnknownUnknownUnknownUnknownUnknownUnknown
Pods routable from outside clusterN/AYesNoYesUnknownNoUnknownYesYesUnknownUnknownUnknownUnknownUnknownUnknown
Container Networking InterfaceN/AYesYesYesYesYes?YesYesUnknownUnknownUnknownUnknownUnknownUnknown
Container Networking ModelYESYesNoYesNoNo?YesYesUnknownUnknownUnknownUnknownUnknownUnknown
OpenStack SupportN/AYesNoNoNoYesUnknownYesNoUnknownYesYesYesYesYes
Kubernetes CNIN/AYesYesYesYesYesUnknownYesYesUnknownUnknownYesYesUnknownUnknown
Mesos SupportN/AYesYesYesYesNoUnknownUnknownYesUnknownUnknownYesUnknownUnknownUnknown
Docker SupportYesYesNoYesUnknownNoUnknownYesYesUnknownUnknownYesUnknownUnknownUnknown
rkt SupportN/AYesYesUnknownUnknownUnknownUnknownUnknownNoUnknownUnknownUnknownUnknownUnknownUnknown
Cloud Foundry SupportNO?Yes??NoUnknownUnknownNoUnknownUnknownYesUnknownUnknownUnknown
Nomad SupportN/ANoNoNoNoNoUnknownYesNoUnknownUnknownUnknownUnknownUnknownUnknown
URL to Networking ArchitectureUnknownCalico Reference ArchitectureFlannelIntroducing Weavetigera/canalRomana BasicsTrireme Architecturecontiv.iohttps://github.com/cilium/ciliumUnknownUnknownUnknownUnknownUnknownUnknown
URL to Reference ArchitectureDesigning Scalable, Portable Docker Container NetworksUnknownUnknownUnknownUnknownRomana DetailsUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknown
URL to DemoUnknownCalico DemoUnknownUnknownUnknownUnknownUnknownUnknownCiliumUnknownUnknownUnknownUnknownUnknownUnknown
TroubleshootingUnknownCalicoUnknownWeaveUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Please use N/A if support isn't applicableUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknown
Kubernetes Cluster Backup - ComparisonUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknownUnknown

32 rows

Sources & further reading

  1. Cilium kube-proxy replacement
  2. Calico overview
  3. Kubernetes NetworkPolicy
  4. Recovered historical source
  5. Kubernetes Networks: historical workbook
  6. Container-Native Networking - Comparison: historical workbook
  7. Cilium introduction
  8. Calico eBPF networking
  9. Calico BGP routing

Spotted something that needs another look?

Help improve this page →