Skip to content

Experimental Layer 4 Kubernetes Gateway using eBPF for the data-plane

License

Notifications You must be signed in to change notification settings

mlavacca/blixt

 
 

Repository files navigation

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 with a control-plane built on Gateway API in Golang with Operator SDK/Controller Runtime, and an eBPF-based data-plane built in Rust using Aya.

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

Current Status

This is presently a work-in-progress. The project goals are currently:

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

Note: TLSRoute 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, the maintainers are most likely going to be converting this to a TC program soon.

Note: There is an open question as to whether the data-plane should be implemented standalone behind the Gateway resources, or if it might make any sense or be advantageous to implement it as a backend for KPNG. This is something the maintainers intend to determine before a v1 release.

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.

Deploy Gateway API CRDs:

kubectl kustomize https://github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.5.1 | kubectl apply -f -

Deploy:

kubectl kustomize config/default | kubectl apply -f -

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.

Community

This project originally started at Kong but is being donated to Kubernetes SIG Network. It is becoming a part of the Gateway API project and as such is discussed in the Gateway API weekly meetings.In particular, we do some discussion and paired programming of this project on the Gateway API Code Jam meeting which is on the calendar for every Friday.

You can also reach out with problems or questions by creating an issue, or a discussion on this repo. You can also reach out on Kubernetes Slack on the #sig-network-gateway-api channel.

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.

About

Experimental Layer 4 Kubernetes Gateway using eBPF for the data-plane

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 55.5%
  • Rust 35.0%
  • Makefile 7.5%
  • Dockerfile 2.0%