cni-plugins icon indicating copy to clipboard operation
cni-plugins copied to clipboard

Library to create CNI plugins in Rust, and a set of plugins

Adopt-a-crate!

I am no longer working with Nomad, Consul, Kubernetes, or container runtime sysadmin, and so this repository is not maintained. Feel free to fork! If you're committed, email me to get the crate name transferred.

Crate release version Crate license: Apache 2.0 or MIT MSRV: latest stable CI status

CNI Plugins

A library for writing CNI plugins in Rust, and some plugins built with it.

  • Plugins:
    • host-routes, to add routes to the host
    • host-neigh, to add neighbours to the host
    • ipam-delegated, to stack multiple IPAM plugins
    • ipam-ds-nomad, a delegated IPAM plugin which selects IP pool configuration from a Nomad job's metadata
    • ipam-ds-static, a delegated IPAM plugin which selects IP pool configuration from the network configuration
    • ipam-da-consul, a delegated IPAM plugin which allocates IPs from a pool stored in Consul KV
  • Guides:
    • Standard tooling
    • Hello world plugin
  • API documentation for the cni-plugin crate.
  • CNI information on the cni.dev website.
  • Dual-licensed with Apache 2.0 and MIT.

Obtain plugins

Note that these plugins should not be considered solid implementations. They work, and I use them, and eventually they'll surely evolve into robust software, but for now consider them beta quality, and alpha stability.

Flavours

The cni-plugins library can be built with a feature release-logs that enables verbose logging to a file in release builds, which usually is reserved for debug (development) builds. Warning/error logs are always copied to stderr.

It's up to each plugin to carry through the feature, but all in this repo do. The pre-build binary releases available below also come in these two flavours, with the -verbose suffix for productions builds with verbose logging to file.

Logs are appended to /var/log/cni/name-of-plugin.log in production, and to name-of-plugin.log in the working directory in development.

From binary release

The release tab on GitHub.

Builds are available for x86-64 Linux, but adding architectures is often trivial, so please ask if needed.

From source

Clone this repo, install the Rust toolchain, and build with:

# Standard production binary
cargo build --release

# Log-enabled production binary
cargo build --release --features release-logs

# Debug binary
cargo build