All Projects → AbsaOSS → K8gb

AbsaOSS / K8gb

Licence: apache-2.0
A cloud native Kubernetes Global Balancer

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to K8gb

Rbacsync
Automatically sync groups into Kubernetes RBAC
Stars: ✭ 197 (+74.34%)
Mutual labels:  k8s, kubernetes-operator, kubernetes-controller
Cronjobber
Cronjobber is a cronjob controller for Kubernetes with support for time zones
Stars: ✭ 169 (+49.56%)
Mutual labels:  k8s, kubernetes-operator, kubernetes-controller
kubereplay
Seamless integration of goReplay and Kubernetes
Stars: ✭ 30 (-73.45%)
Mutual labels:  cloud-native, kubernetes-operator, kubernetes-controller
Bonny
The Elixir based Kubernetes Development Framework
Stars: ✭ 190 (+68.14%)
Mutual labels:  k8s, kubernetes-operator, kubernetes-controller
Sens8
Kubernetes controller for Sensu checks
Stars: ✭ 42 (-62.83%)
Mutual labels:  k8s, kubernetes-operator, kubernetes-controller
kotary
Managing Kubernetes Quota with confidence
Stars: ✭ 85 (-24.78%)
Mutual labels:  k8s, kubernetes-operator, kubernetes-controller
siddhi-operator
Operator allows you to run stream processing logic directly on a Kubernetes cluster
Stars: ✭ 16 (-85.84%)
Mutual labels:  k8s, cloud-native, kubernetes-operator
K3sup
bootstrap Kubernetes with k3s over SSH < 1 min 🚀
Stars: ✭ 4,012 (+3450.44%)
Mutual labels:  cloud-native, k8s
Linstor Server
High Performance Software-Defined Block Storage for container, cloud and virtualisation. Fully integrated with Docker, Kubernetes, Openstack, Proxmox etc.
Stars: ✭ 374 (+230.97%)
Mutual labels:  cloud-native, k8s
Kube Scan
kube-scan: Octarine k8s cluster risk assessment tool
Stars: ✭ 566 (+400.88%)
Mutual labels:  cloud-native, k8s
Kudo
Kubernetes Universal Declarative Operator (KUDO)
Stars: ✭ 849 (+651.33%)
Mutual labels:  kubernetes-operator, kubernetes-controller
Airflow Operator
Kubernetes custom controller and CRDs to managing Airflow
Stars: ✭ 278 (+146.02%)
Mutual labels:  kubernetes-operator, kubernetes-controller
Operator Kit
A library for creating a Kubernetes Operator
Stars: ✭ 275 (+143.36%)
Mutual labels:  kubernetes-operator, kubernetes-controller
Mysql Operator
Bulletproof MySQL on Kubernetes using Percona Server
Stars: ✭ 527 (+366.37%)
Mutual labels:  kubernetes-operator, kubernetes-controller
port-map-operator
LoadBalancer Service type implementation for home Kubernetes clusters via Port Control Protocol.
Stars: ✭ 25 (-77.88%)
Mutual labels:  kubernetes-operator, kubernetes-controller
Openyurt
OpenYurt - Extending your native Kubernetes to edge(project under CNCF)
Stars: ✭ 750 (+563.72%)
Mutual labels:  cloud-native, k8s
rabbitmq-operator
RabbitMQ Kubernetes operator
Stars: ✭ 16 (-85.84%)
Mutual labels:  k8s, kubernetes-operator
Kubesphere
The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ 🖥 ☁️
Stars: ✭ 8,315 (+7258.41%)
Mutual labels:  cloud-native, k8s
Spark On K8s Operator
Kubernetes operator for managing the lifecycle of Apache Spark applications on Kubernetes.
Stars: ✭ 1,780 (+1475.22%)
Mutual labels:  kubernetes-operator, kubernetes-controller
Argo Workflows
Workflow engine for Kubernetes
Stars: ✭ 10,024 (+8770.8%)
Mutual labels:  k8s, cloud-native

K8GB - Kubernetes Global Balancer

Project Health

License: MIT Build Status Terratest Status Gosec CodeQL Go Report Card Helm Publish KubeLinter Docker Pulls Artifact HUB doc.crds.dev

A Global Service Load Balancing solution with a focus on having cloud native qualities and work natively in a Kubernetes context.

Just a single Gslb CRD to enable the Global Load Balancing:

apiVersion: k8gb.absa.oss/v1beta1
kind: Gslb
metada:
  name: test-gslb-failover
  namespace: test-gslb
spec:
  ingress:
    rules:
      - host: failover.test.k8gb.io # Desired GSLB enabled FQDN
        http:
          paths:
          - backend:
              serviceName: frontend-podinfo # Service name to enable GSLB for
              servicePort: http
            path: /
  strategy:
    type: failover # Global load balancing strategy
    primaryGeoTag: eu-west-1 # Primary cluster geo tag

Global load balancing, commonly referred to as GSLB (Global Server Load Balancing) solutions, have typically been the domain of proprietary network software and hardware vendors and installed and managed by siloed network teams.

k8gb is a completely open source, cloud native, global load balancing solution for Kubernetes.

k8gb focuses on load balancing traffic across geographically dispersed Kubernetes clusters using multiple load balancing strategies to meet requirements such as region failover for high availability.

Global load balancing for any Kubernetes Service can now be enabled and managed by any operations or development teams in the same Kubernetes native way as any other custom resource.

Key Differentiators

  • Load balancing is based on timeproof DNS protocol which is perfect for global scope and extremely reliable
  • No dedicated management cluster and no single point of failure
  • Kubernetes native application health checks utilizing status of Liveness and Readiness probes for load balancing decisions
  • Configuration with a single Kubernetes CRD of Gslb kind

Quick Start

Simply run

make deploy-full-local-setup

It will deploy two local k3s clusters via k3d, expose associated CoreDNS service for UDP DNS traffic), and install k8gb with test applications and two sample Gslb resources on top.

This setup is adapted for local scenario and works without external DNS provider dependency.

Consult with local playground documentation to learn all the details of experimenting with local setup.

Motivation and Architecture

k8gb was born out of need for an open source, cloud native GSLB solution at Absa bank in South Africa.

As part of the bank's wider container adoption running multiple, geographically dispersed Kubernetes clusters, the need for a global load balancer that was driven from the health of Kubernetes Services was required and for which there did not seem to be an existing solution.

Yes, there are proprietary network software and hardware vendors with GSLB solutions and products, however, these were costly, heavy weight in terms of complexity and adoption and in most cases were not Kubernetes native, requiring dedicated hardware or software to be run outside of Kubernetes.

This was the problem we set out to solve with k8gb.

Born as a completely open source project and following the popular Kubernetes operator pattern, k8gb can be installed in a Kubernetes cluster and via a Gslb custom resource, can provide independent GSLB capability to any Ingress or Service in the cluster, without the need for handoffs and coordination between dedicated network teams.

k8gb commoditises GSLB for Kubernetes, putting teams in complete control of exposing Services across geographically dispersed Kubernetes clusters across public and private clouds.

k8gb requires no specialised software or hardware, relying completely on other OSS/CNCF projects, has no single point of failure and fits in with any existing Kubernetes deployment workflow (e.g. GitOps, Kustomize, Helm, etc.) or tools.

Please see the extended architecture documentation here

Internal k8gb architecture and its components are described here

Installation and Configuration Tutorials

Production Readiness

k8gb is very well tested with the following environment options

Type Implementation
Kubernetes Version >= 1.15
Environment Self-managed, AWS(EKS) *
Ingress Controller NGINX, AWS Load Balancer Controller *
EdgeDNS Infoblox, Route53, NS1

* We only mention solutions where we have tested and verified a k8gb installation. If your Kubernetes version or Ingress controller is not included in the table above, it does not mean that k8gb will not work for you. k8gb is architected to run on top of any compliant Kubernetes cluster and Ingress controller.

Presentations Featuring k8gb

  • Demo at Kubernetes SIG Multicluster

  • OpenShift Commons Briefings

Contributing

See CONTRIBUTING

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].