Skip to content
API-aware Networking and Security using eBPF and XDP
Go C Shell Makefile C++ Ruby Other
Branch: master
Clone or download

Latest commit

gandro and joestringer helm: Simplify Hubble metrics values
This introduces a standard port for the Hubble metrics: 9091. The port
is chosen after 9090, which is used by the Cilium metrics.

To enable Hubble metrics, a user now only has to specify which metrics
should be enabled, e.g. `global.hubble.metrics.enabled='{drop,icmp}'`
instead of providing both a list of metrics and the server port.

In addition, the Helm values are made more consistent:
`global.hubble.metricsServer` is changed to `global.hubble.metrics.port`.
This mirrors the existing `global.prometheus.port` and simplifies the
chart.

Signed-off-by: Sebastian Wicki <sebastian@isovalent.com>
Latest commit 7316fa6 Jun 4, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github ci: run simple ginkgo test in github action Jun 3, 2020
.travis travis: run build checks and complete build May 29, 2020
Documentation Include directions to restart pods in the k3s install guide Jun 4, 2020
api/v1 api: Add node status message for hubble-relay May 25, 2020
bpf Add audit action to the policy verdict log Jun 4, 2020
bugtool Remove non-functional commands from cilium-bugtool May 29, 2020
cilium-health datapath: split datapath mode option values into own package May 18, 2020
cilium pkg/k8s: use node name from pkg/node instead of env variable Jun 3, 2020
contrib cocci: Detect unlogged missed tail calls Jun 3, 2020
daemon daemon: cancel daemon context on TearDownTest Jun 3, 2020
envoy Makefiles: Tidy up output Jan 24, 2019
examples test: Add single node conformance test Jun 3, 2020
hack add 2020 copyright Jan 28, 2020
hubble-relay hubble-relay: add an option to run pprof May 13, 2020
install/kubernetes helm: Simplify Hubble metrics values Jun 5, 2020
jenkinsfiles ci: Change vagrant timeout mechanism Jun 3, 2020
operator operator: Build 3 new slimmer binaries May 29, 2020
pkg pkg/k8s: delete toCIDRSets for more than 2 endpoints Jun 4, 2020
plugins fix(lint): Use coalesce CIDRs for linux routing in cni May 28, 2020
proxylib build: Use shorter license header in all Makefiles Apr 16, 2020
test helm: Simplify Hubble metrics values Jun 5, 2020
tests build: Use shorter license header in all Makefiles Apr 16, 2020
tools Makefile: Build maptool with CGO enabled if RACE May 21, 2020
vendor bump k8s dependencies and test to v1.18.3 May 27, 2020
.authors.aux docs: update authors Sep 17, 2018
.dockerignore git: Sync .gitignore and .dockerignore May 13, 2020
.gitattributes test: Add single node conformance test Jun 3, 2020
.gitignore build: Avoid using git if not in a git repo May 20, 2020
.gitmodules envoy: Envoy integration. Nov 22, 2017
.mailmap docs, minor: update mailmap and authors file Jan 14, 2020
.travis.yml Update Go to 1.14.4 Jun 3, 2020
AUTHORS docs, minor: update mailmap and authors file Jan 14, 2020
CODEOWNERS CODEOWNERS: add helm as codeowner of install/kubernetes May 28, 2020
CONTRIBUTING.md Update link to the guide Feb 24, 2020
Dockerfile Update Go to 1.14.4 Jun 3, 2020
Dockerfile.builder Update Go to 1.14.4 Jun 3, 2020
FURTHER_READINGS.rst Update FURTHER_READINGS.rst Apr 24, 2020
GO_VERSION Update Go to 1.14.4 Jun 3, 2020
Jenkinsfile.nightly [CI] Replace jenkinsfiles with symlinks Mar 4, 2020
LICENSE LICENSE: Update copyright column Jun 26, 2018
MAINTAINERS.rst Add MAINTAINERS file Nov 13, 2019
Makefile build: Place operator binaries in separate images May 29, 2020
Makefile.buildkit build: Place operator binaries in separate images May 29, 2020
Makefile.defs Makefile: Fix double '-mod=vendor' in go flags May 29, 2020
Makefile.docker build: Place operator binaries in separate images May 29, 2020
Makefile.quiet build: Use shorter license header in all Makefiles Apr 16, 2020
README.rst Update stable releases May 15, 2020
SECURITY.md SECURITY.md: update versions of supported releases Feb 26, 2020
USERS.md Add SAP Concur to USERS.md May 7, 2020
VERSION preparing v1.9 dev cycle May 29, 2020
Vagrantfile build(k8s): To fix issue for make generate-k8s-api May 13, 2020
cilium-dev.Dockerfile Update Go to 1.14.4 Jun 3, 2020
cilium-dev.Dockerfile.dockerignore build: Cleanup Makefiles of Go components Apr 16, 2020
cilium-docker-plugin.Dockerfile Update Go to 1.14.4 Jun 3, 2020
cilium-operator-aws.Dockerfile Update Go to 1.14.4 Jun 3, 2020
cilium-operator-azure.Dockerfile Update Go to 1.14.4 Jun 3, 2020
cilium-operator-generic.Dockerfile Update Go to 1.14.4 Jun 3, 2020
cilium-operator.Dockerfile Update Go to 1.14.4 Jun 3, 2020
docs.Jenkinsfile [CI] Replace jenkinsfiles with symlinks Mar 4, 2020
flannel.Jenkinsfile [CI] Replace jenkinsfiles with symlinks Mar 4, 2020
ginkgo-kubernetes-all.Jenkinsfile [CI] Replace jenkinsfiles with symlinks Mar 4, 2020
ginkgo.Jenkinsfile [CI] Replace jenkinsfiles with symlinks Mar 4, 2020
go.mod bump k8s dependencies and test to v1.18.3 May 27, 2020
go.sum bump k8s dependencies and test to v1.18.3 May 27, 2020
hubble-relay.Dockerfile Update Go to 1.14.4 Jun 3, 2020
kubernetes-upstream.Jenkinsfile [CI] Replace jenkinsfiles with symlinks Mar 4, 2020
netlify.toml doc: Enable Netlify Deploy Preview May 21, 2020
vagrant_box_defaults.rb vagrant: bump all vagrant box versions May 27, 2020

README.rst

Cilium Logo

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

Cilium is open source software for providing and transparently securing network connectivity and loadbalancing between application workloads such as application containers or processes. Cilium operates at Layer 3/4 to provide traditional networking and security services as well as Layer 7 to protect and secure use of modern application protocols such as HTTP, gRPC and Kafka. Cilium is integrated into common orchestration frameworks such as Kubernetes and Mesos.

A new Linux kernel technology called BPF is at the foundation of Cilium. It supports dynamic insertion of BPF bytecode into the Linux kernel at various integration points such as: network IO, application sockets, and tracepoints to implement security, networking and visibility logic. BPF is highly efficient and flexible. To learn more about BPF, read more in our extensive BPF and XDP Reference Guide.

https://cdn.rawgit.com/cilium/cilium/master/Documentation/images/cilium-arch.png

Stable Releases

The Cilium community maintains minor stable releases for the last three major Cilium versions. Older Cilium stable versions from major releases prior to that are considered EOL.

For upgrades to new major releases please consult the Cilium Upgrade Guide.

Listed below are the actively maintained release branches along with their latest minor release, corresponding image pull tags and their release notes:

v1.7 2020-05-15 docker.io/cilium/cilium:v1.7.4 Release Notes General Announcement
v1.6 2020-03-25 docker.io/cilium/cilium:v1.6.8 Release Notes General Announcement
v1.5 2020-03-04 docker.io/cilium/cilium:v1.5.13 Release Notes General Announcement

Functionality Overview

Protect and secure APIs transparently

Ability to secure modern application protocols such as REST/HTTP, gRPC and Kafka. Traditional firewalls operates at Layer 3 and 4. A protocol running on a particular port is either completely trusted or blocked entirely. Cilium provides the ability to filter on individual application protocol requests such as:

  • Allow all HTTP requests with method GET and path /public/.*. Deny all other requests.
  • Allow service1 to produce on Kafka topic topic1 and service2 to consume on topic1. Reject all other Kafka messages.
  • Require the HTTP header X-Token: [0-9]+ to be present in all REST calls.

See the section Layer 7 Policy in our documentation for the latest list of supported protocols and examples on how to use it.

Secure service to service communication based on identities

Modern distributed applications rely on technologies such as application containers to facilitate agility in deployment and scale out on demand. This results in a large number of application containers to be started in a short period of time. Typical container firewalls secure workloads by filtering on source IP addresses and destination ports. This concept requires the firewalls on all servers to be manipulated whenever a container is started anywhere in the cluster.

In order to avoid this situation which limits scale, Cilium assigns a security identity to groups of application containers which share identical security policies. The identity is then associated with all network packets emitted by the application containers, allowing to validate the identity at the receiving node. Security identity management is performed using a key-value store.

Secure access to and from external services

Label based security is the tool of choice for cluster internal access control. In order to secure access to and from external services, traditional CIDR based security policies for both ingress and egress are supported. This allows to limit access to and from application containers to particular IP ranges.

Simple Networking

A simple flat Layer 3 network with the ability to span multiple clusters connects all application containers. IP allocation is kept simple by using host scope allocators. This means that each host can allocate IPs without any coordination between hosts.

The following multi node networking models are supported:

  • Overlay: Encapsulation-based virtual network spanning all hosts. Currently VXLAN and Geneve are baked in but all encapsulation formats supported by Linux can be enabled.

    When to use this mode: This mode has minimal infrastructure and integration requirements. It works on almost any network infrastructure as the only requirement is IP connectivity between hosts which is typically already given.

  • Native Routing: Use of the regular routing table of the Linux host. The network is required to be capable to route the IP addresses of the application containers.

    When to use this mode: This mode is for advanced users and requires some awareness of the underlying networking infrastructure. This mode works well with:

    • Native IPv6 networks
    • In conjunction with cloud network routers
    • If you are already running routing daemons

Load balancing

Distributed load balancing for traffic between application containers and to external services. The loadbalancing is implemented using BPF using efficient hashtables allowing for almost unlimited scale and supports direct server return (DSR) if the loadbalancing operation is not performed on the source host. Note: load balancing requires connection tracking to be enabled. This is the default.

Monitoring and Troubleshooting

The ability to gain visibility and to troubleshoot issues is fundamental to the operation of any distributed system. While we learned to love tools like tcpdump and ping and while they will always find a special place in our hearts, we strive to provide better tooling for troubleshooting. This includes tooling to provide:

  • Event monitoring with metadata: When a packet is dropped, the tool doesn't just report the source and destination IP of the packet, the tool provides the full label information of both the sender and receiver among a lot of other information.
  • Policy decision tracing: Why is a packet being dropped or a request rejected. The policy tracing framework allows to trace the policy decision process for both, running workloads and based on arbitrary label definitions.
  • Metrics export via Prometheus: Key metrics are exported via Prometheus for integration with your existing dashboards.
  • Hubble: An observability platform specifically written for Cilium. It provides service dependency maps, operational monitoring and alerting, and application and security visibility based on flow logs.

Integrations

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 recently 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.14.x).

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

To read up on the necessary kernel versions to run the BPF runtime, see the section Prerequisites.

https://cdn.rawgit.com/cilium/cilium/master/Documentation/images/bpf-overview.png

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.

To know more about Cilium, it's extensions and use cases around Cilium and BPF take a look at Further Readings section.

Community

Slack

Join the Cilium Slack channel to chat with Cilium developers and other Cilium users. This is a good place to learn about Cilium, ask questions, and share your experiences.

Special Interest Groups (SIG)

See Special Interest groups for a list of all SIGs and their meeting times.

Weekly Developer meeting

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

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.

You can’t perform that action at this time.