mirror of https://github.com/cncf/toc.git
Merge pull request #637 from tgraf/pr/tgraf/cncf-proposal
Proposal: Cilium as an Incubation project
This commit is contained in:
commit
b5b82abb61
|
|
@ -0,0 +1,316 @@
|
|||
# Cilium Project Proposal
|
||||
|
||||
## Name of Project
|
||||
Cilium
|
||||
|
||||
## Description
|
||||
|
||||
Cilium is an open source project 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
|
||||
implements the Container Networking Interface (CNI) and integrates directly with
|
||||
Kubernetes.
|
||||
|
||||
A new Linux kernel technology called eBPF is at the foundation of Cilium. It
|
||||
supports dynamic insertion of eBPF bytecode into the Linux kernel at various
|
||||
integration points such as: network IO, application sockets, and tracepoints to
|
||||
implement security, networking and visibility logic. eBPF is highly efficient
|
||||
and flexible. (To learn more about eBPF, visit [eBPF.io](eBPF.io).)
|
||||
|
||||
## Features
|
||||
|
||||
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
|
||||
|
||||
|
||||
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.
|
||||
|
||||
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](https://github.com/cilium/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.
|
||||
|
||||
## Sponsor / Advisor from TOC
|
||||
Justin Cormack
|
||||
|
||||
## Unique Identifier
|
||||
cilium
|
||||
|
||||
## License
|
||||
|
||||
* The main agent is licensered under [Apache 2.0](https://github.com/cilium/cilium/blob/master/LICENSE)
|
||||
* Portions of the eBPF datapath code are licensed under the [GPL](https://github.com/cilium/cilium/blob/master/bpf/COPYING)
|
||||
|
||||
## Maturity Level
|
||||
|
||||
Incubating
|
||||
|
||||
## Source control repositories
|
||||
|
||||
https://github.com/cilium
|
||||
|
||||
## External dependencies
|
||||
|
||||
From [go.mod](https://github.com/cilium/cilium/blob/master/go.mod):
|
||||
|
||||
- github.com/Azure/azure-sdk-for-go MIT License
|
||||
- github.com/Azure/go-autorest Apaache 2.0
|
||||
- github.com/asaskevich/govalidator MIT License
|
||||
- github.com/aws/aws-sdk-go-v2 Apache 2.0
|
||||
- github.com/aws/smithy-go Apache 2.0
|
||||
- github.com/blang/semver MIT License
|
||||
- github.com/cncf/udpa Apache 2.0
|
||||
- github.com/containernetworking/cni Apache 2.0
|
||||
- github.com/containernetworking/plugins Apache 2.0
|
||||
- github.com/davecgh/go-spew ISC License
|
||||
- github.com/docker/distribution Apache 2.0
|
||||
- github.com/docker/docker Apache 2.0
|
||||
- github.com/docker/go-connections Apache 2.0
|
||||
- github.com/docker/libnetwork Apache 2.0
|
||||
- github.com/fsnotify/fsnotify BSD-3-Clause
|
||||
- github.com/go-bindata/go-bindata Public Domain
|
||||
- github.com/go-openapi/errors Apache 2.0
|
||||
- github.com/go-openapi/loads APache 2.0
|
||||
- github.com/go-openapi/runtime Apache 2.0
|
||||
- github.com/go-openapi/spec Apache 2.0
|
||||
- github.com/go-openapi/strfmt Apache 2.0
|
||||
- github.com/go-openapi/swag Apache 2.0
|
||||
- github.com/go-openapi/validate Apache 2.0
|
||||
- github.com/gogo/protobuf BSD-3-Clause
|
||||
- github.com/golang/protobuf BSD-3-Clause
|
||||
- github.com/google/go-cmp BSD-3-Clause
|
||||
- github.com/google/gopacket BSD-3-Clause
|
||||
- github.com/google/gops BSD-3-Clause
|
||||
- github.com/google/renameio Apache 2.0
|
||||
- github.com/google/uuid BSD-3-Clause
|
||||
- github.com/gorilla/mux BSD-3-Clause
|
||||
- github.com/hashicorp/consul/api MPL-2.0
|
||||
- github.com/hashicorp/go-immutable-radix MPL-2.0
|
||||
- github.com/hashicorp/golang-lru MPL-2.0
|
||||
- github.com/ishidawataru/sctp Apache 2.0
|
||||
- github.com/jeremywohl/flatten MIT
|
||||
- github.com/kevinburke/ssh_config MIT
|
||||
- github.com/kr/pretty MIT
|
||||
- github.com/mattn/go-shellwords MIT
|
||||
- github.com/miekg/dns BSD-3-Clause
|
||||
- github.com/morikuni/aec MIT
|
||||
- github.com/onsi/ginkgo MIT
|
||||
- github.com/onsi/gomega MIT
|
||||
- github.com/opencontainers/go-digest Apache 2.0
|
||||
- github.com/opencontainers/image-spec Apache 2.0
|
||||
- github.com/optiopay/kafka MIT
|
||||
- github.com/pmezard/go-difflib https://github.com/pmezard/go-difflib/blob/master/LICENSE
|
||||
- github.com/prometheus/client_golang Apache 2.0
|
||||
- github.com/prometheus/client_model Apache 2.0
|
||||
- github.com/russross/blackfriday/v2 Simplified BSD
|
||||
- github.com/sasha-s/go-deadlock Apache 2.0
|
||||
- github.com/servak/go-fastping MIT
|
||||
- github.com/shirou/gopsutil/v3 BSD
|
||||
- github.com/sirupsen/logrus MIT
|
||||
- github.com/spf13/cobra Apache 2.0
|
||||
- github.com/spf13/pflag BSD-3-Clause
|
||||
- github.com/spf13/viper MIT
|
||||
- github.com/stretchr/testify MIT
|
||||
- github.com/vishvananda/netlink Apache 2.0
|
||||
- github.com/vishvananda/netns Apache 2.0
|
||||
- go.etcd.io/etcd Apache 2.0
|
||||
- go.uber.org/goleak MIT
|
||||
- golang.org/x/crypto BSD-3-Clause
|
||||
- golang.org/x/net BSD-3-Clause
|
||||
- golang.org/x/sync BSD-3-Clause
|
||||
- golang.org/x/sys BSD-3-Clause
|
||||
- golang.org/x/time BSD-3-Clause
|
||||
- golang.org/x/tools BSD-3-Clause
|
||||
- google.golang.org/genproto Apache 2.0
|
||||
- google.golang.org/grpc Apache 2.0
|
||||
- google.golang.org/protobuf BSD-3-Clause
|
||||
- gopkg.in/check.v1 BSD-3-Clause
|
||||
- gopkg.in/ini.v1 Apache 2.0
|
||||
- gopkg.in/natefinch/lumberjack.v2 MIT
|
||||
- gopkg.in/yaml.v2 Apache 2.0
|
||||
- k8s.io/api Apache 2.0
|
||||
- k8s.io/apiextensions-apiserver Apache 2.0
|
||||
- k8s.io/apimachinery Apache 2.0
|
||||
- k8s.io/client-go Apache 2.0
|
||||
- k8s.io/code-generator Apache 2.0
|
||||
- k8s.io/klog/v2 Apache 2.0
|
||||
- k8s.io/kube-openapi Apache 2.0
|
||||
- sigs.k8s.io/controller-tools Apache 2.0
|
||||
- sigs.k8s.io/structured-merge-diff/v4 Apache 2.0
|
||||
- sigs.k8s.io/yaml MIT
|
||||
|
||||
### Runtime dependencies
|
||||
|
||||
- LLVM Apache 2.0
|
||||
- iproute2 GPL
|
||||
|
||||
## Issue tracker
|
||||
|
||||
See [https://github.com/cilium/cilium/issues](https://github.com/cilium/cilium/issues)
|
||||
|
||||
## Initial committers
|
||||
|
||||
See [MAINTAINERS](https://github.com/cilium/cilium/blob/master/MAINTAINERS.md)
|
||||
|
||||
There are currently committers from eight companies, with the majority from Isovalent. The company block vote limit described in the [project governance](https://docs.cilium.io/en/latest/contributing/governance/commit_access/#company-block-vote-limit) already ensures that Isovalent do not have a controlling majority vote.
|
||||
|
||||
## Infrastructure requirements (CI / CNCF Cluster)
|
||||
|
||||
N/A
|
||||
|
||||
## Statement on alignment with CNCF mission
|
||||
|
||||
Cilium's misson is to provide open source networking and network security for
|
||||
the cloud native ecosystem. Cilium is deeply integrated with Kubernetes, etcd,
|
||||
Prometheus, Envoy, and other CNCF projects. More and more users are adopting Cilium
|
||||
and making it a key part of their infrastructure. As such, there is a mutual
|
||||
interest in building a strong community involving Cilium core developers and
|
||||
users to provide a neutral home for Cilium, and guarantee open governance for
|
||||
the future.
|
||||
|
||||
## Communication channels
|
||||
|
||||
- Slack: http://cilium.io/slack (5877 members)
|
||||
- GitHub: https://github.com/cilium/cilium
|
||||
|
||||
## Website
|
||||
|
||||
https://cilium.io/
|
||||
|
||||
## Release methodology and mechanics
|
||||
|
||||
Cilium employs semantic versioning to name each release ([release process details](https://docs.cilium.io/en/v1.9/contributing/release/)) and compiled container images hosted on [Quay](https://quay.io/repository/cilium/cilium) and [Docker Hub](https://hub.docker.com/u/cilium). SHA256 checksums are provided for all distributed binaries. The release process is fully automated. A new minor release is released every 4 months with extensive release notes. In between minor releaess, micro releaes for the last 3 minor releases are provided regularly with backports of crucial bugfixes and security fixes.
|
||||
|
||||
## Security processes
|
||||
|
||||
See [SECURITY.md](https://github.com/cilium/cilium/blob/master/SECURITY.md)
|
||||
|
||||
## Roadmap
|
||||
|
||||
The roadmap is driven by community requests and feedback:
|
||||
* GitHub [issues](https://github.com/cilium/cilium/issues?q=is%3Aopen+is%3Aissue+label%3Akind%2Fenhancement) with the `enhancement` label
|
||||
* Annual public user surveys ([2021 survey](https://cilium.io/blog/2021/02/25/user-survey-2021))
|
||||
|
||||
The features committed to the next release are tracked in GitHub projects ([1.10 release example](https://github.com/cilium/cilium/projects/131)).
|
||||
|
||||
## Social media account
|
||||
Twitter: https://twitter.com/ciliumproject
|
||||
|
||||
## Community size
|
||||
|
||||
Adopters: Adobe, Alibaba, Canonical, Datadog, DigitalOcean, GitLab, Google, SAP Concur, etc.
|
||||
See [USERS.md](https://github.com/cilium/cilium/blob/master/USERS.md) for a list of over 20 publicly-announced adopters.
|
||||
|
||||
GitHub stars: +7.8K
|
||||
|
||||
Container image pulls: +100M across Docker Hub + Quay
|
||||
|
||||
Slack: 5800+ members
|
||||
|
||||
As of April 6, 2021, we have 263 people who have directly contributed code to
|
||||
the main repository cilium/cilium. Numerous people have contributed by
|
||||
reporting issues, testing, helping out on Slack, and so on.
|
||||
|
||||
We hold a weekly community meeting with 20-40 attendees each week.
|
||||
Loading…
Reference in New Issue