All Projects → Huang-Wei → shared-loadbalancer

Huang-Wei / shared-loadbalancer

Licence: other
Demo for 2018 KubeCon NA

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to shared-loadbalancer

springboot-microservice-with-spring-cloud-netflix
msa backend service example with springboot REST API
Stars: ✭ 36 (+63.64%)
Mutual labels:  service
intuit-spring-cloud-config-inspector
Inspection of Spring Cloud Config properties made easy using React
Stars: ✭ 18 (-18.18%)
Mutual labels:  service
dklb
Expose Kubernetes services and ingresses through EdgeLB.
Stars: ✭ 13 (-40.91%)
Mutual labels:  service
chrly
Lightweight implementation of Minecraft skins system server. It's packaged and distributed as a Docker image.
Stars: ✭ 23 (+4.55%)
Mutual labels:  service
InitKit
Neo-InitWare is a modular, cross-platform reimplementation of the systemd init system. It is experimental.
Stars: ✭ 364 (+1554.55%)
Mutual labels:  service
My Android Garage
A quick reference guide for Android development.
Stars: ✭ 66 (+200%)
Mutual labels:  service
ember-contextual-services
Services in Ember are scoped to the app as a whole and are singletons. Sometimes you don't want that. :) This addon provides ephemeral route-based services.
Stars: ✭ 20 (-9.09%)
Mutual labels:  service
rpc
RPC-like client-service implementation over messaging queue
Stars: ✭ 26 (+18.18%)
Mutual labels:  service
super-mario-message
Display custom messages in a Super Mario Bros environment
Stars: ✭ 18 (-18.18%)
Mutual labels:  service
LGTVCompanion
Power On and Off WebOS LG TVs together with your PC
Stars: ✭ 420 (+1809.09%)
Mutual labels:  service
lion
A simple, modular Discord bot from scratch
Stars: ✭ 15 (-31.82%)
Mutual labels:  service
ngx-malihu-scrollbar
Angular 2+ scrollbar customization using Malihu jQuery Custom Scrollbar plugin
Stars: ✭ 59 (+168.18%)
Mutual labels:  service
webApi-angularjs
⚓ Definitely simplifies your work with server side & organizes webApi layout to further managing.
Stars: ✭ 15 (-31.82%)
Mutual labels:  service
tower-lsp
Language Server Protocol implementation written in Rust
Stars: ✭ 455 (+1968.18%)
Mutual labels:  service
gogen
Command-line tool to generate GO applications and libraries
Stars: ✭ 17 (-22.73%)
Mutual labels:  service
gps-permission-checks-livedata
Sample project to demonstrate how GPS and Runtime Location Permission checks can be done on UI and Background Service using LiveData
Stars: ✭ 37 (+68.18%)
Mutual labels:  service
mqtt-android-tutorial
A tutorial for using the MQTT Android Service.
Stars: ✭ 37 (+68.18%)
Mutual labels:  service
kivy service osc
simple UI/Service communication using osc on python-for-android
Stars: ✭ 53 (+140.91%)
Mutual labels:  service
IQService
iOS端模块间通信解决方案。
Stars: ✭ 17 (-22.73%)
Mutual labels:  service
ngx-localstorage
An Angular wrapper for localstorage/sessionstorage access.
Stars: ✭ 27 (+22.73%)
Mutual labels:  service

Shared Kubernetes LoadBalancer

Background

We know that in Kubernetes, there are generally 3 ways to expose workloads publicly:

  • Service (with type NodePort)
  • Service (with type LoadBalancer)
  • Ingress

kubectl proxy and similar dev/debug solutions are not counted in.

NodePort Service comes almost as early as born of Kubernetes. But due to limitation on ports range (30000~32767), randomness of port, and the need to expose public network of (almost) the whole cluster, NodePort Service is usually not considered as a good L4 solution in serious production workloads.

A viable solution today for L4 apps is LoadBalancer service. It's implemented differently in different Kubernetes offerings, by connecting an Kubernetes Service object with a real/virtual IaaS LoadBalancer, so that traffic going through LoadBalancer endpoint can be routed to destination pods properly.

However, in reality, L7 (e.g. HTTP) workloads are way more widely used than L4 ones. So community comes up with the Ingress concept. Ingress object defines how incoming request can be routed to internal Service, and under the hood there is an ingress controller (1) dealing with Ingress objects, setting up mapping rules by leveraging Nginx/Envoy/etc. and also (2) (normally) exposing via LoadBalancer externally.

There is a misunderstanding that using Ingress, it's also doable to manage L4 workloads. It's not true. Why Ingress can work is b/c it can differentiate requests by HTTP headers, but for a L4 packet, it's only ip + port.

Motivation

Ingress introduces a possibility which enables you to expose multiple internal L7 services through one public endpoint. But it doesn't work for L4 workloads.

From the above picture, you might wonder where's the missing piece for L4 services? This is exactly the problem we're trying to solve in this project. And following factors are considered:

  • Cost effective
  • User friendly
  • Reusing existing Kubernetes assets
  • Minimum operation efforts
  • Consistent with Kubernetes roadmap

How It Works

We introduce a "SharedLoadBalancer Controller" to customize current Kubernetes behavior.

Without a "SharedLoadBalancer Controller", it's N Services (of type LoadBalancer) mapped to N LoadBalancer endpoints:

With a "SharedLoadBalancer Controller", it's N SharedLB CR objects mapped to 1 LoadBalancer endpoint (on different ports):

More Info

Want to get more info on this? Join us at KubeCon + CloudNativeCon North America 2018 in Seattle, December 11-13, we will be giving a session on this.

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