Go C Shell C++ Other
Latest commit 6c3e77e Apr 13, 2017 @tgraf tgraf committed with tgraf labels: Remove unneeded printing to stdout in unit tests
Signed-off-by: Thomas Graf <thomas@cilium.io>
Permalink
Failed to load latest commit information.
Documentation updated getting started guide with corrected VM name in vagrant syntax Apr 28, 2017
Godeps vendor: Add vulcand dependencies Mar 25, 2017
api/v1 Introducing endpoints parallelization build Apr 15, 2017
bpf bpf: specify prio and handle for replace Apr 27, 2017
cilium all: switch from package syscall to x/sys/unix Apr 21, 2017
common all: switch from package syscall to x/sys/unix Apr 21, 2017
contrib daemon / kvstore: add kvstore flag for daemon CLI Apr 25, 2017
daemon daemon: Log error if invalid k8s NetworkPolicy objects are received Apr 30, 2017
examples Vagrant: Simplified Vagrantfile to get started Apr 14, 2017
pkg labels: Remove unneeded printing to stdout in unit tests Apr 30, 2017
plugins daemon/main.go, plugins/cilium-docker/main.go: add check that process… Apr 17, 2017
tests tests: convert getting-started guide to a test Apr 21, 2017
vendor vendor: Add vulcand dependencies Mar 25, 2017
.gitignore Godeps: updating cni, k8s and cli Jan 11, 2017
AUTHORS AUTHORS: add Faiyaz Ahmed Apr 27, 2017
Dockerfile Dockerfile: Add a group cilium Apr 14, 2017
Jenkinsfile Set Jenkins timeout to 30 minutes Mar 23, 2017
LICENSE Initial commit Dec 16, 2015
Makefile Makefile.defs: fixed go version checker Apr 20, 2017
Makefile.defs Add version command and flag to tools Mar 26, 2017
NEWS.rst NEWS.rst: added the major changes for this PR Apr 15, 2017
README.md README: Updates Apr 25, 2017
VERSION Establish release process Mar 31, 2017
Vagrantfile Vagrantfile: Fail testsuite if `go tests` fails Apr 16, 2017

README.md

Cilium Logo

Build Status Go Report Card GoDoc Read the Docs Apache licensed GPL licensed Join the Cilium slack channel

Cilium is open source software for providing and transparently securing the network connectivity between application services deployed using Linux container management platforms like Docker and Kubernetes.

At the foundation of Cilium is a new Linux kernel technology called eBPF, which enables the dynamic insertion of BPF bytecode into the Linux kernel. Cilium generates BPF programs for each individual container to provide networking, security and visibility.

Features Overview

  • Security Policies: Enforcement of security policies at application and networking layer. Application level policies include filtering of HTTP protocol properties such as method, path, and headers. Networking policies include container/pod/service interconnectivity rules as well as restriction to particular port ranges.
  • Networking: Single flat Layer 3 network which can span multiple clusters if needed. Support for native routing of container/pod/service IPs via the regular Linux routing layer or automatic creation of an overlay network with the means of encapsulation protocols (VXLAN/Geneve/GRE). No dependency on key/value store or external control plane.
  • Load balancing: Distributed load balancing for both inter service as well external traffic with direct server return (DSR) capability. Implements the Kubernetes Ingress and Service spec.
  • Troubleshooting: Built-in troubleshooting tools with full context visibility. tcpdump free troubleshooting guaranteed(tm)
  • Integrations:
    • Network plugins: CNI, libnetwork
    • container runtime events: containerd
    • Kubernetes: pod labels, Ingress, Service, NetworkPolicy
    • logging: logstash

Getting Started

What is eBPF and XDP?

Berkeley Packet Filter (BPF) is a Linux kernel bytecode interpreter originally introduced to filter network packets, e.g. for tcpdump and socket filters. The BPF instruction set and surrounding architecture has since been significantly reworked with additional data structures such as hash tables and arrays for keeping state as well as additional actions to support packet mangling, forwarding, encapsulation, etc. Furthermore, a compiler back end for LLVM allows for programs to be written in C and compiled into BPF instructions. An in-kernel verifier ensures that BPF programs are safe to run and a JIT compiler converts the BPF bytecode to CPU architecture specific instructions for native execution efficiency. BPF programs can be run at various hooking points in the kernel such as for incoming packets, outgoing packets, system calls, kprobes, uprobes, tracepoints, etc.

BPF continues to evolve and gain additional capabilities with each new Linux release. Cilium leverages BPF to perform core data path filtering, mangling, monitoring and redirection, and requires BPF capabilities that are in any Linux kernel version 4.8.0 or newer (the latest current stable Linux kernel is 4.10.x).

Many Linux distributions including CoreOS, Debian, Docker's LinuxKit, Fedora, and Ubuntu already ship kernel versions >= 4.8.x. You can check your Linux kernel version by running uname -a. If you are not running a recent enough kernel yet, check the Documentation of your Linux distribution on how to run Linux kernel 4.9.x or later.

For more detail on kernel versions, see: Prerequisites

XDP is a further step in evolution and enables to run a specific flavor of BPF programs from the network driver with direct access to the packet's DMA buffer. This is, by definition, the earliest possible point in the software stack, where programs can be attached to in order to allow for a programmable, high performance packet processor in the Linux kernel networking data path.

Further information about BPF and XDP targeted for developers can be found in the BPF and XDP reference guide.

Installation

See the Installation instructions

Presentations

Podcasts

  • Software Gone Wild by Ivan Pepelnjak, Oct 2016: Blog, MP3
  • OVS Orbit by Ben Pfaff, May 2016: Blog, MP3

Community blog posts

  • Cilium for Network and Application Security with BPF and XDP, Apr 2017: Blog
  • Cilium, BPF and XDP, Google Open Source Blog, Nov 2016: Blog

Weekly Hangout

  • The developer community is hanging out on zoom on a weekly basis to chat. Everybody is welcome.
  • Weekly, Monday, 8am PT, 11am ET, 5pm CEST
  • Join zoom

Contact

If you have any questions feel free to contact us on Slack

License

The cilium user space components are licensed under the Apache License, Version 2.0. The BPF code templates are licensed under the General Public License, Version 2.0.