• Stars
    star
    164
  • Rank 230,032 (Top 5 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created about 6 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

CNI plugin for Kubernetes designed for scalability and extensibility

GitHub release CI PkgGoDev Go Report Card

Coil

Coil is a CNI-based network plugin for Kubernetes.

Coil is designed with respect to the UNIX philosophy. You can combine Coil with any routing software and/or any network policy implementation.

Coil allows to define multiple IP address pools. You can define a pool of global IPv4 addresses for a small number of pods and another pool of private IPv4 addresses for the remaining pods.

There are blog articles about Coil: https://blog.kintone.io/archive/category/Coil

Status

Version 2 is generally available (GA). It conforms to CNI spec 0.4.0.

Dependencies

  • Kubernetes Version: 1.24, 1.25, 1.26

    • Other versions are likely to work, but not tested.
  • (Optional) Routing software

    • Coil has a simple routing software for flat L2 networks.
    • If your network is not flat, use BIRD or similar software to advertise the routes.

Features

  • Address pools

    Coil can have multiple pools of IP addresses for different purposes. By setting a special annotation to a namespace, you can specify a pool for the pods in that namespace.

  • IPv4/IPv6 dual stack

    In addition to IPv4-only and IPv6-only stacks, Coil can define dual stack address pools.

  • Running with any routing software

    Coil provides a simple router for clusters where all the nodes are in a flat L2 network. This router, called coil-router, is optional.

    For more complex networks, Coil exports routing information to an unused kernel routing table. By importing the routes from the table, any routing software can advertise them.

  • On-demand NAT for egress traffics

    Coil can implement SNAT on Kubernetes. You can define SNAT routers for external networks as many as you want.

    Only selected pods can communicate with external networks via SNAT routers.

  • Auto MTU configuration

    Coil detects the optimal MTU and configures MTU for container networks.

Refer to the design document for more information on these features.

Quick start

Coil can run on kind clusters using Docker.

Prepare a recent Ubuntu and install Docker and Go, then run:

$ cd v2
$ make certs
$ make image

$ cd e2e
$ make start
$ make install-coil
$ ../bin/kubectl apply -f manifests/default_pool.yaml

Now you can play with Coil.

Usage examples

Project Neco uses Coil with these software:

Coil can work with Cilium through its generic veth chaining feature.

Documentation

Installation procedures are described in docs/setup.md.

The user manual is docs/usage.md.

docs directory contains other documents about designs and specifications.

Upgrade from v1

See coil-migrator.md

License

Coil is licensed under the Apache License, Version 2.0.

More Repositories

1

transocks

Transparent SOCKS5 / HTTP proxy in Go
Go
465
star
2

moco

MySQL operator on Kubernetes using GTID-based semi-synchronous replication.
Go
246
star
3

neco

Project Neco
Go
241
star
4

cke

Cybozu Kubernetes Engine
Go
193
star
5

usocksd

SOCKS4/5 server library and command in Go
Go
142
star
6

well

Go framework for well-behaving commands
Go
125
star
7

goma

An extensible monitoring agent in Go.
Go
124
star
8

aptutil

Go utilities for Debian APT repositories
Go
123
star
9

sabakan

A versatile network boot server for large data centers
Go
122
star
10

placemat

Virtual data center construction tool
Go
82
star
11

etcdpasswd

Distributed Linux user management using etcd
Go
46
star
12

accurate

Kubernetes controller for multi-tenancy. It propagates resources between namespaces accurately and allows tenant users to create/delete sub-namespaces.
Go
28
star
13

log

Logging framework for Cybozu Go products
Go
28
star
14

contour-plus

Enhance contour for external-dns and cert-manager
Go
25
star
15

meows

Kubernetes controller for GitHub actions self-hosted runners
Go
19
star
16

netutil

Add-ons for Go networking
Go
17
star
17

kkok

Alert routing and filtering service
Go
10
star
18

scim

generic SCIM server/client library in Go
Go
7
star
19

options

A small library that provides Option[T], which represents an optional value of type T
Go
5
star
20

cat-gate

A Kubernetes controller to delay pod deployment using scheduling gates
Go
5
star
21

setup-hw

Build container image to configure BMC and BIOS
Go
5
star
22

nginx-i2c

ip2country.conf generation tool for nginx
Go
4
star
23

scim-server

Go
4
star
24

pod-security-admission

A Kubernetes admission webhook to ensure pod security standards
Go
4
star
25

nyamber

Custom controllers to create Neco environment
Go
1
star
26

neco-template

Template repository for Neco
Makefile
1
star
27

neco-gcp

GCP management tools for project Neco
Go
1
star
28

necotiator

ResourceQuota Controller for soft multi-tenancy
Go
1
star
29

etcdutil

Add-ons for etcd
Go
1
star
30

cattage

Kubernetes controller that enhances the multi-tenancy of Argo CD with Accurate.
Go
1
star
31

tenet

Tenet is a Kubernetes controller that aims to facilitate setting-up Network Policies on tenant namespaces.
Go
1
star
32

necoperf

necoperf provides the ability to easily retrieve profiles of containers running on Kubernetes.
Go
1
star
33

zombie-detector

Go
1
star