All Projects → kontena → akrobateo

kontena / akrobateo

Licence: Apache-2.0 license
Akrobateo is a simple Kubernetes operator to expose in-cluster LoadBalancer services as node hostPorts using DaemonSets.

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to akrobateo

Argocd Operator
A Kubernetes operator for managing Argo CD clusters.
Stars: ✭ 151 (+36.04%)
Mutual labels:  kubernetes-operator
Bonny
The Elixir based Kubernetes Development Framework
Stars: ✭ 190 (+71.17%)
Mutual labels:  kubernetes-operator
Percona Xtradb Cluster Operator
A Kubernetes Operator for Percona XtraDB Cluster
Stars: ✭ 230 (+107.21%)
Mutual labels:  kubernetes-operator
Kubestone
Performance benchmarks for Kubernetes
Stars: ✭ 159 (+43.24%)
Mutual labels:  kubernetes-operator
Operators
Collection of Kubernetes Operators built with KUDO.
Stars: ✭ 175 (+57.66%)
Mutual labels:  kubernetes-operator
Rbacsync
Automatically sync groups into Kubernetes RBAC
Stars: ✭ 197 (+77.48%)
Mutual labels:  kubernetes-operator
Kubetop
A top(1)-like tool for Kubernetes.
Stars: ✭ 142 (+27.93%)
Mutual labels:  kubernetes-operator
pulp-operator
Kubernetes Operator for Pulp 3. Under active development.
Stars: ✭ 32 (-71.17%)
Mutual labels:  kubernetes-operator
Java Operator Sdk
Java SDK for building Kubernetes Operators
Stars: ✭ 186 (+67.57%)
Mutual labels:  kubernetes-operator
Mongodb Enterprise Kubernetes
MongoDB Enterprise Kubernetes Operator
Stars: ✭ 232 (+109.01%)
Mutual labels:  kubernetes-operator
Operator
Kubernetes operator to manage installation, updation and uninstallation of tektoncd projects (pipeline, …)
Stars: ✭ 161 (+45.05%)
Mutual labels:  kubernetes-operator
Marmot
Marmot workflow execution engine
Stars: ✭ 174 (+56.76%)
Mutual labels:  kubernetes-operator
Strimzi Kafka Operator
Apache Kafka running on Kubernetes
Stars: ✭ 2,833 (+2452.25%)
Mutual labels:  kubernetes-operator
Github Actions Runner Operator
K8S operator for scheduling github actions runner pods
Stars: ✭ 159 (+43.24%)
Mutual labels:  kubernetes-operator
mariadb-galera-swarm
Easy to use MariaDb Galera Cluster container based on official mariadb image with support for Docker Swarm Mode.
Stars: ✭ 193 (+73.87%)
Mutual labels:  kontena
Roperator
Experimental Kubernetes Operator kit written in Rust
Stars: ✭ 146 (+31.53%)
Mutual labels:  kubernetes-operator
Cluster Operator
RabbitMQ Cluster Kubernetes Operator
Stars: ✭ 192 (+72.97%)
Mutual labels:  kubernetes-operator
ship-it
Wattpad's tool for continuously deploying code to Kubernetes quickly, safely, and observably.
Stars: ✭ 14 (-87.39%)
Mutual labels:  kubernetes-operator
sops-operator
A Kubernetes operator for Mozilla SOPS
Stars: ✭ 23 (-79.28%)
Mutual labels:  kubernetes-operator
Cassandra Operator
Kubernetes operator for Apache Cassandra
Stars: ✭ 215 (+93.69%)
Mutual labels:  kubernetes-operator

Akrobateo

Akrobateo is a universal load balancer service implementation for Kubernetes. Akrobateo can work in any environment which makes it suitable for many use cases. And it's super light-weight too. It is implemented as an operator that reacts when it sees type: LoadBalancer services in the cluster.

Akrobateo exposes in-cluster LoadBalancer services as node hostPorts using DaemonSets. The operator naturally also syncs the addresses for the services. This essentially makes the LoadBalancer type services behave pretty much like NodePort services. The drawback with NodePort services is that we're not able to use additional components such as ExternalDNS and others.

The node-port proxy Pods utilize iptables to do the actual traffic forwarding.

Inspiration

This operator draws heavy inspiration from K3S servicelb controller: https://github.com/rancher/k3s/blob/master/pkg/servicelb/controller.go

As K3S controller is fully and tightly integrated into K3S, with good reasons, we thought we'd separate the concept into generic operator usable in any Kubernetes cluster.

Why DaemonSets?

Running the "proxies" as DaemonSets makes the proxy not to be a single-point-of-failure. So once you've exposed the service you can safely e.g. push the services external addresses into your DNS. This does have the drawback that a given port can be exposed only in one service throughout the cluster.

Building

Use the included build.sh script. There's naturally also a Dockerfile for putting everything into an image.

Build automation takes care of building all the release artifacts. So just create a tag for the release and everything will be build. The current build also produces multiarch images for both the operator and the LB image itself.

Running locally

Either use operator-sdk to run it like so:

operator-sdk up local

Or use the locally built binary:

WATCH_NAMESPACE="default" ./output/akrobateo_darwin_amd64

LB_IMAGE env variable can be set to define a custom LB image to be used.

Deploying

To deploy to live cluster, use manifests in deploy directory. It sets up the operator in kube-system namespace with proper service-account and RBAC to allow access to only needed resources.

Future

Some ideas how to make things more configurable and/or future-proof

DaemonSet vs. Deployment

The original Klippy controller creates Deployments. Maybe user could put some annotation on the service whether he/she wants a deployment or a daemonset created. Operator SDK SHOULD be able to handle the different kinds of objects as long as there's proper owner references set.

Node selection

There should be some way for the user to select which nodes should act as LBs. So something like a node selector is needed on the services as annotation. That probably also means we'd need to support also tolerations.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].