Skip to content

aryan9600/blixt

 
 

Repository files navigation

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.

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.

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.

Deploy Gateway API CRDs:

kubectl apply -k https://github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.8.1

Deploy:

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 #sig-network-gateway-api 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.

About

Layer 4 Kubernetes load-balancer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 61.2%
  • Rust 30.8%
  • Makefile 6.4%
  • Dockerfile 1.6%