github.com/cilium/cilium@v1.16.2/README.rst (about)

     1  .. raw:: html
     2  
     3     <picture>
     4        <source media="(prefers-color-scheme: light)" srcset="https://cdn.jsdelivr.net/gh/cilium/cilium@main/Documentation/images/logo.png" width="350" alt="Cilium Logo">
     5        <img src="https://cdn.jsdelivr.net/gh/cilium/cilium@main/Documentation/images/logo-dark.png" width="350" alt="Cilium Logo">
     6     </picture>
     7  
     8  |cii| |go-report| |clomonitor| |artifacthub| |slack| |go-doc| |rtd| |apache| |bsd| |gpl| |fossa| |gateway-api| |codespaces|
     9  
    10  Cilium is a networking, observability, and security solution with an eBPF-based
    11  dataplane. It provides a simple flat Layer 3 network with the ability to span
    12  multiple clusters in either a native routing or overlay mode. It is L7-protocol
    13  aware and can enforce network policies on L3-L7 using an identity based security
    14  model that is decoupled from network addressing.
    15  
    16  Cilium implements distributed load balancing for traffic between pods and to
    17  external services, and is able to fully replace kube-proxy, using efficient
    18  hash tables in eBPF allowing for almost unlimited scale. It also supports
    19  advanced functionality like integrated ingress and egress gateway, bandwidth
    20  management and service mesh, and provides deep network and security visibility and monitoring.
    21  
    22  A new Linux kernel technology called eBPF_ is at the foundation of Cilium. It
    23  supports dynamic insertion of eBPF bytecode into the Linux kernel at various
    24  integration points such as: network IO, application sockets, and tracepoints to
    25  implement security, networking and visibility logic. eBPF is highly efficient
    26  and flexible. To learn more about eBPF, visit `eBPF.io`_.
    27  
    28  .. image:: Documentation/images/cilium-overview.png
    29     :alt: Overview of Cilium features for networking, observability, service mesh, and runtime security
    30  
    31  Stable Releases
    32  ===============
    33  
    34  The Cilium community maintains minor stable releases for the last three minor
    35  Cilium versions. Older Cilium stable versions from minor releases prior to that
    36  are considered EOL.
    37  
    38  For upgrades to new minor releases please consult the `Cilium Upgrade Guide`_.
    39  
    40  Listed below are the actively maintained release branches along with their latest
    41  patch release, corresponding image pull tags and their release notes:
    42  
    43  +---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
    44  | `v1.15 <https://github.com/cilium/cilium/tree/v1.15>`__ | 2024-06-10 | ``quay.io/cilium/cilium:v1.15.6``  | `Release Notes <https://github.com/cilium/cilium/releases/tag/v1.15.6>`__  |
    45  +---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
    46  | `v1.14 <https://github.com/cilium/cilium/tree/v1.14>`__ | 2024-06-10 | ``quay.io/cilium/cilium:v1.14.12`` | `Release Notes <https://github.com/cilium/cilium/releases/tag/v1.14.12>`__ |
    47  +---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
    48  | `v1.13 <https://github.com/cilium/cilium/tree/v1.13>`__ | 2024-06-10 | ``quay.io/cilium/cilium:v1.13.17`` | `Release Notes <https://github.com/cilium/cilium/releases/tag/v1.13.17>`__ |
    49  +---------------------------------------------------------+------------+------------------------------------+----------------------------------------------------------------------------+
    50  
    51  Architectures
    52  -------------
    53  
    54  Cilium images are distributed for AMD64 and AArch64 architectures.
    55  
    56  Software Bill of Materials
    57  --------------------------
    58  
    59  Starting with Cilium version 1.13.0, all images include a Software Bill of
    60  Materials (SBOM). The SBOM is generated in `SPDX`_ format. More information
    61  on this is available on `Cilium SBOM`_.
    62  
    63  .. _`SPDX`: https://spdx.dev/
    64  .. _`Cilium SBOM`: https://docs.cilium.io/en/latest/configuration/sbom/
    65  
    66  Development
    67  ===========
    68  
    69  For development and testing purpose, the Cilium community publishes snapshots,
    70  early release candidates (RC) and CI container images build from the `main
    71  branch <https://github.com/cilium/cilium/commits/main>`_. These images are
    72  not for use in production.
    73  
    74  For testing upgrades to new development releases please consult the latest
    75  development build of the `Cilium Upgrade Guide`_.
    76  
    77  Listed below are branches for testing along with their snapshots or RC releases,
    78  corresponding image pull tags and their release notes where applicable:
    79  
    80  +--------------------------------------------------------------------------------------+------------+----------------------------------------------+-------------------------------------------------------------------------------------------+
    81  | `main <https://github.com/cilium/cilium/commits/main>`__                             | daily      | ``quay.io/cilium/cilium-ci:latest``          | N/A                                                                                       |
    82  +--------------------------------------------------------------------------------------+------------+----------------------------------------------+-------------------------------------------------------------------------------------------+
    83  | `v1.16.0-rc.0 <https://github.com/cilium/cilium/commits/v1.16.0-rc.0>`__             | 2024-06-17 | ``quay.io/cilium/cilium:v1.16.0-rc.0``       | `Release Candidate Notes <https://github.com/cilium/cilium/releases/tag/v1.16.0-rc.0>`__  |
    84  +--------------------------------------------------------------------------------------+------------+----------------------------------------------+-------------------------------------------------------------------------------------------+
    85  
    86  Functionality Overview
    87  ======================
    88  
    89  .. begin-functionality-overview
    90  
    91  Protect and secure APIs transparently
    92  -------------------------------------
    93  
    94  Ability to secure modern application protocols such as REST/HTTP, gRPC and
    95  Kafka. Traditional firewalls operate at Layer 3 and 4. A protocol running on a
    96  particular port is either completely trusted or blocked entirely. Cilium
    97  provides the ability to filter on individual application protocol requests such
    98  as:
    99  
   100  - Allow all HTTP requests with method ``GET`` and path ``/public/.*``. Deny all
   101    other requests.
   102  - Allow ``service1`` to produce on Kafka topic ``topic1`` and ``service2`` to
   103    consume on ``topic1``. Reject all other Kafka messages.
   104  - Require the HTTP header ``X-Token: [0-9]+`` to be present in all REST calls.
   105  
   106  See the section `Layer 7 Policy`_ in our documentation for the latest list of
   107  supported protocols and examples on how to use it.
   108  
   109  Secure service to service communication based on identities
   110  -----------------------------------------------------------
   111  
   112  Modern distributed applications rely on technologies such as application
   113  containers to facilitate agility in deployment and scale out on demand. This
   114  results in a large number of application containers being started in a short
   115  period of time. Typical container firewalls secure workloads by filtering on
   116  source IP addresses and destination ports. This concept requires the firewalls
   117  on all servers to be manipulated whenever a container is started anywhere in
   118  the cluster.
   119  
   120  In order to avoid this situation which limits scale, Cilium assigns a security
   121  identity to groups of application containers which share identical security
   122  policies. The identity is then associated with all network packets emitted by
   123  the application containers, allowing to validate the identity at the receiving
   124  node. Security identity management is performed using a key-value store.
   125  
   126  Secure access to and from external services
   127  -------------------------------------------
   128  
   129  Label based security is the tool of choice for cluster internal access control.
   130  In order to secure access to and from external services, traditional CIDR based
   131  security policies for both ingress and egress are supported. This allows to
   132  limit access to and from application containers to particular IP ranges.
   133  
   134  Simple Networking
   135  -----------------
   136  
   137  A simple flat Layer 3 network with the ability to span multiple clusters
   138  connects all application containers. IP allocation is kept simple by using host
   139  scope allocators. This means that each host can allocate IPs without any
   140  coordination between hosts.
   141  
   142  The following multi node networking models are supported:
   143  
   144  * **Overlay:** Encapsulation-based virtual network spanning all hosts.
   145    Currently, VXLAN and Geneve are baked in but all encapsulation formats
   146    supported by Linux can be enabled.
   147  
   148    When to use this mode: This mode has minimal infrastructure and integration
   149    requirements. It works on almost any network infrastructure as the only
   150    requirement is IP connectivity between hosts which is typically already
   151    given.
   152  
   153  * **Native Routing:** Use of the regular routing table of the Linux host.
   154    The network is required to be capable to route the IP addresses of the
   155    application containers.
   156  
   157    When to use this mode: This mode is for advanced users and requires some
   158    awareness of the underlying networking infrastructure. This mode works well
   159    with:
   160  
   161    - Native IPv6 networks
   162    - In conjunction with cloud network routers
   163    - If you are already running routing daemons
   164  
   165  Load Balancing
   166  --------------
   167  
   168  Cilium implements distributed load balancing for traffic between application
   169  containers and to external services and is able to fully replace components
   170  such as kube-proxy. The load balancing is implemented in eBPF using efficient
   171  hashtables allowing for almost unlimited scale.
   172  
   173  For north-south type load balancing, Cilium's eBPF implementation is optimized
   174  for maximum performance, can be attached to XDP (eXpress Data Path), and supports
   175  direct server return (DSR) as well as Maglev consistent hashing if the load
   176  balancing operation is not performed on the source host.
   177  
   178  For east-west type load balancing, Cilium performs efficient service-to-backend
   179  translation right in the Linux kernel's socket layer (e.g. at TCP connect time)
   180  such that per-packet NAT operations overhead can be avoided in lower layers.
   181  
   182  Bandwidth Management
   183  --------------------
   184  
   185  Cilium implements bandwidth management through efficient EDT-based (Earliest Departure
   186  Time) rate-limiting with eBPF for container traffic that is egressing a node. This
   187  allows to significantly reduce transmission tail latencies for applications and to
   188  avoid locking under multi-queue NICs compared to traditional approaches such as HTB
   189  (Hierarchy Token Bucket) or TBF (Token Bucket Filter) as used in the bandwidth CNI
   190  plugin, for example.
   191  
   192  Monitoring and Troubleshooting
   193  ------------------------------
   194  
   195  The ability to gain visibility and troubleshoot issues is fundamental to the
   196  operation of any distributed system. While we learned to love tools like
   197  ``tcpdump`` and ``ping`` and while they will always find a special place in our
   198  hearts, we strive to provide better tooling for troubleshooting. This includes
   199  tooling to provide:
   200  
   201  - Event monitoring with metadata: When a packet is dropped, the tool doesn't
   202    just report the source and destination IP of the packet, the tool provides
   203    the full label information of both the sender and receiver among a lot of
   204    other information.
   205  
   206  - Metrics export via Prometheus: Key metrics are exported via Prometheus for
   207    integration with your existing dashboards.
   208  
   209  - Hubble_: An observability platform specifically written for Cilium. It
   210    provides service dependency maps, operational monitoring and alerting,
   211    and application and security visibility based on flow logs.
   212  
   213  .. _Hubble: https://github.com/cilium/hubble/
   214  .. _`Layer 7 Policy`: https://docs.cilium.io/en/stable/security/policy/language/#layer-7-examples
   215  
   216  .. end-functionality-overview
   217  
   218  Getting Started
   219  ===============
   220  
   221  * `Why Cilium?`_
   222  * `Getting Started`_
   223  * `Architecture and Concepts`_
   224  * `Installing Cilium`_
   225  * `Frequently Asked Questions`_
   226  * Contributing_
   227  
   228  What is eBPF and XDP?
   229  =====================
   230  
   231  Berkeley Packet Filter (BPF) is a Linux kernel bytecode interpreter originally
   232  introduced to filter network packets, e.g. for tcpdump and socket filters. The
   233  BPF instruction set and surrounding architecture have recently been
   234  significantly reworked with additional data structures such as hash tables and
   235  arrays for keeping state as well as additional actions to support packet
   236  mangling, forwarding, encapsulation, etc. Furthermore, a compiler back end for
   237  LLVM allows for programs to be written in C and compiled into BPF instructions.
   238  An in-kernel verifier ensures that BPF programs are safe to run and a JIT
   239  compiler converts the BPF bytecode to CPU architecture-specific instructions
   240  for native execution efficiency. BPF programs can be run at various hooking
   241  points in the kernel such as for incoming packets, outgoing packets, system
   242  calls, kprobes, uprobes, tracepoints, etc.
   243  
   244  BPF continues to evolve and gain additional capabilities with each new Linux
   245  release. Cilium leverages BPF to perform core data path filtering, mangling,
   246  monitoring and redirection, and requires BPF capabilities that are in any Linux
   247  kernel version 4.8.0 or newer (the latest current stable Linux kernel is
   248  4.14.x).
   249  
   250  Many Linux distributions including CoreOS, Debian, Docker's LinuxKit, Fedora,
   251  openSUSE and Ubuntu already ship kernel versions >= 4.8.x. You can check your Linux
   252  kernel version by running ``uname -a``. If you are not yet running a recent
   253  enough kernel, check the Documentation of your Linux distribution on how to run
   254  Linux kernel 4.9.x or later.
   255  
   256  To read up on the necessary kernel versions to run the BPF runtime, see the
   257  section Prerequisites_.
   258  
   259  .. image:: https://cdn.jsdelivr.net/gh/cilium/cilium@main/Documentation/images/bpf-overview.png
   260      :align: center
   261  
   262  XDP is a further step in evolution and enables running a specific flavor of BPF
   263  programs from the network driver with direct access to the packet's DMA buffer.
   264  This is, by definition, the earliest possible point in the software stack,
   265  where programs can be attached to in order to allow for a programmable, high
   266  performance packet processor in the Linux kernel networking data path.
   267  
   268  Further information about BPF and XDP targeted for developers can be found in
   269  the `BPF and XDP Reference Guide`_.
   270  
   271  To know more about Cilium, its extensions and use cases around Cilium and BPF
   272  take a look at `Further Readings <FURTHER_READINGS.rst>`_ section.
   273  
   274  Community
   275  =========
   276  
   277  Slack
   278  -----
   279  
   280  Join the Cilium `Slack channel <https://slack.cilium.io>`_ to chat with
   281  Cilium developers and other Cilium users. This is a good place to learn about
   282  Cilium, ask questions, and share your experiences.
   283  
   284  Special Interest Groups (SIG)
   285  -----------------------------
   286  
   287  See `Special Interest groups
   288  <https://docs.cilium.io/en/stable/community/community/#special-interest-groups>`_ for a list of all SIGs and their meeting times.
   289  
   290  Developer meetings
   291  ------------------
   292  The Cilium developer community hangs out on Zoom to chat. Everybody is welcome.
   293  
   294  * Weekly, Wednesday,
   295    5:00 pm `Europe/Zurich time <https://time.is/Canton_of_Zurich>`__ (CET/CEST),
   296    usually equivalent to 8:00 am PT, or 11:00 am ET. `Join Zoom`_
   297  * Third Wednesday of each month, 9:00 am `Japan time <https://time.is/Tokyo>`__ (JST). `Join Zoom`_
   298  
   299  eBPF & Cilium Office Hours livestream
   300  -------------------------------------
   301  We host a weekly community `YouTube livestream called eCHO <https://www.youtube.com/channel/UCJFUxkVQTBJh3LD1wYBWvuQ>`_ which (very loosely!) stands for eBPF & Cilium Office Hours. Join us live, catch up with past episodes, or head over to the `eCHO repo <https://github.com/isovalent/eCHO>`_ and let us know your ideas for topics we should cover.
   302  
   303  Governance
   304  ----------
   305  The Cilium project is governed by a group of `Maintainers and Committers <https://raw.githubusercontent.com/cilium/cilium/main/MAINTAINERS.md>`__.
   306  How they are selected and govern is outlined in our `governance document <https://github.com/cilium/community/blob/main/GOVERNANCE.md>`__.
   307  
   308  Adopters
   309  --------
   310  A list of adopters of the Cilium project who are deploying it in production, and of their use cases,
   311  can be found in file `USERS.md <https://github.com/cilium/cilium/blob/main/USERS.md>`__.
   312  
   313  Roadmap
   314  -------
   315  Cilium maintains a `public roadmap <https://docs.cilium.io/en/latest/community/roadmap/>`__. It gives a high-level view of the main priorities for the project, the maturity of different features and projects, and how to influence the project direction.
   316  
   317  License
   318  =======
   319  
   320  .. _apache-license: LICENSE
   321  .. _bsd-license: bpf/LICENSE.BSD-2-Clause
   322  .. _gpl-license: bpf/LICENSE.GPL-2.0
   323  
   324  The Cilium user space components are licensed under the
   325  `Apache License, Version 2.0 <apache-license_>`__.
   326  The BPF code templates are dual-licensed under the
   327  `General Public License, Version 2.0 (only) <gpl-license_>`__
   328  and the `2-Clause BSD License <bsd-license_>`__
   329  (you can use the terms of either license, at your option).
   330  
   331  .. _`Cilium Upgrade Guide`: https://docs.cilium.io/en/stable/operations/upgrade/
   332  .. _`Why Cilium?`: https://docs.cilium.io/en/stable/overview/intro
   333  .. _`Getting Started`: https://docs.cilium.io/en/stable/#getting-started
   334  .. _`Architecture and Concepts`: https://docs.cilium.io/en/stable/overview/component-overview/
   335  .. _`Installing Cilium`: https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/
   336  .. _`Frequently Asked Questions`: https://github.com/cilium/cilium/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Akind%2Fquestion+
   337  .. _Contributing: https://docs.cilium.io/en/stable/contributing/development/
   338  .. _Prerequisites: https://docs.cilium.io/en/stable/operations/system_requirements/
   339  .. _`BPF and XDP Reference Guide`: https://docs.cilium.io/en/stable/bpf/
   340  .. _`eBPF`: https://ebpf.io
   341  .. _`eBPF.io`: https://ebpf.io
   342  .. _`Join Zoom`: https://zoom.us/j/596609673
   343  
   344  .. |go-report| image:: https://goreportcard.com/badge/github.com/cilium/cilium
   345      :alt: Go Report Card
   346      :target: https://goreportcard.com/report/github.com/cilium/cilium
   347  
   348  .. |go-doc| image:: https://godoc.org/github.com/cilium/cilium?status.svg
   349      :alt: GoDoc
   350      :target: https://godoc.org/github.com/cilium/cilium
   351  
   352  .. |rtd| image:: https://readthedocs.org/projects/docs/badge/?version=latest
   353      :alt: Read the Docs
   354      :target: https://docs.cilium.io/
   355  
   356  .. |apache| image:: https://img.shields.io/badge/license-Apache-blue.svg
   357      :alt: Apache licensed
   358      :target: apache-license_
   359  
   360  .. |bsd| image:: https://img.shields.io/badge/license-BSD-blue.svg
   361      :alt: BSD licensed
   362      :target: bsd-license_
   363  
   364  .. |gpl| image:: https://img.shields.io/badge/license-GPL-blue.svg
   365      :alt: GPL licensed
   366      :target: gpl-license_
   367  
   368  .. |slack| image:: https://img.shields.io/badge/slack-cilium-brightgreen.svg?logo=slack
   369      :alt: Join the Cilium slack channel
   370      :target: https://slack.cilium.io
   371  
   372  .. |cii| image:: https://bestpractices.coreinfrastructure.org/projects/1269/badge
   373      :alt: CII Best Practices
   374      :target: https://bestpractices.coreinfrastructure.org/projects/1269
   375  
   376  .. |clomonitor| image:: https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/cilium/badge
   377      :alt: CLOMonitor
   378      :target: https://clomonitor.io/projects/cncf/cilium
   379  
   380  .. |artifacthub| image:: https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/cilium
   381      :alt: Artifact Hub
   382      :target: https://artifacthub.io/packages/helm/cilium/cilium
   383  
   384  .. |fossa| image:: https://app.fossa.com/api/projects/custom%2B162%2Fgit%40github.com%3Acilium%2Fcilium.git.svg?type=shield
   385      :alt: FOSSA Status
   386      :target: https://app.fossa.com/projects/custom%2B162%2Fgit%40github.com%3Acilium%2Fcilium.git?ref=badge_shield
   387  
   388  .. |gateway-api| image:: https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.0.0-Cilium-green
   389      :alt: Gateway API Status
   390      :target: https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.0.0/cilium.yaml
   391  
   392  .. |codespaces| image:: https://img.shields.io/badge/Open_in_GitHub_Codespaces-gray?logo=github
   393      :alt: Github Codespaces
   394      :target: https://github.com/codespaces/new?hide_repo_select=true&ref=master&repo=48109239&machine=standardLinux32gb&location=WestEurope