Code Monkey home page Code Monkey logo

blixt's Introduction

blixt

Warning: Experimental. There is no intention to ever make this viable for production. Do not use in production.

Blixt

An experimental layer 4 load-balancer for Kubernetes.

The control-plane is built using Gateway API and written in Golang with Operator SDK/Controller Runtime. The data-plane is built using eBPF and is written in Rust using Aya.

This project's main purpose is to be a fun sandbox for community members to experiment with networking, and technologies such as eBPF.

Warning: We've decided that we're going to rewrite the control-plane in Rust (as it was earlier on in this project's life), so please note that if you contribute to the Go control-plane in the interim before we take this warning down, things might get "lost" when we switch to the new version. See the relevant milestone and check in with us in the issues (or via discussions) if you're interested in working on something control-plane related!

Note: We use Cargo workspaces to manage the various crates spread across the Rust parts of the repo. However, there is one exception. The dataplane/eBPF crate must be kept as a standalone because it needs to re-implement the panic handler. All new crates should be added to the workspace, if possible.

Note: The word "blixt" means "lightning" in Swedish.

Current Status

Current project goals are the following:

After these goals are achieved, further goals may be decided.

Given the goals and nature of this project, and the fact that everyone who works on it is a volunteer, we try to optimize for time with a highly iterative development approach. This project follows a "Work -> Right -> Fast" development mentality, which is to say for any functionality or feature we focus on making sure it works at a basic level first, then we'll focus on making it work right, and then once we're happy with the code quality we'll move on to making it faster and more efficient. This project is currently still very much in the early parts of the work stage and so the code may be a little rough and/or incomplete. We would love to have you join us in iterating on it and helping us build it together!

Note: TLSRoute support may be on the table, but we're looking for someone from the community to champion this.

Note: HTTPRoute support may be on the table, but we're looking for someone from the community to champion this.

Note: The initial proof of concept was written as an XDP program, but with more features (including access to ip conntrack in newer kernels) available in TC, we made a switch to TC.

Usage

Note: Currently usage is only possible on Kubernetes In Docker (KIND) clusters. You can generate a new development cluster for testing with make build.cluster.

Note: Currently our container images are under migration from a private repository. At this moment, you should build and load images yourself.

  1. Deploy Gateway API CRDs:
kubectl apply -k https://github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.8.1
  1. Build Blixt images:
make build.all.images TAG=latest
  1. Load images into your Kind cluster:
make load.all.images TAG=latest
  1. Deploy Blixt:
kubectl apply -k config/default

At this point you should see the controlplane and dataplane pods running in the blixt-system namespace:

$ kubectl -n blixt-system get pods
NAME                                 READY   STATUS    RESTARTS   AGE
blixt-controlplane-cdccc685b-9dxj2   2/2     Running   0          83s
blixt-dataplane-brsl9                1/1     Running   0          83s

Check the config/samples directory for Gateway and *Route examples you can now deploy.

Note: When developing the dataplane you can make changes in your local dataplane/ directory, and within there quickly build an image and load it into the cluster created in the above steps with make load.image. This will build the eBPF loader and eBPF bytecode in a container image, load that image into the cluster, and then restart the dataplane pods to use the new build.

Community

You can reach out to the community by creating issue or discussions. You can also reach out on Kubernetes Slack on the #blixt channel. There is also a #ebpf channel on Kubernetes Slack for general eBPF related help.

License

The Blixt control-plane components are licensed under Apache License, Version 2.0, which is everything outside of the dataplane/ directory. The data-plane components are dual-licensed under the General Public License, Version 2.0 (only) and the 2-Clause BSD License (at your option) including everything inside the dataplane/ directory.

blixt's People

Contributors

shaneutt avatar dependabot[bot] avatar k8s-ci-robot avatar astoycos avatar aryan9600 avatar mlavacca avatar tzssangglass avatar rushi47 avatar shunpoco avatar eandrewjones avatar acald-creator avatar levikobi avatar synthe102 avatar maheshrayas avatar rahul-d78 avatar rudranshgoel avatar wheelerlaw avatar tonsiasy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.