All Projects → improbable-eng → Kedge

improbable-eng / Kedge

Licence: apache-2.0
kEdge - Kubernetes Edge Proxy for gRPC and HTTP Microservices

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Kedge

Grpc Tools
A suite of gRPC debugging tools. Like Fiddler/Charles but for gRPC.
Stars: ✭ 881 (+261.07%)
Mutual labels:  proxy, tls
Go Http Tunnel
Fast and secure tunnels over HTTP/2
Stars: ✭ 2,786 (+1041.8%)
Mutual labels:  proxy, tls
Ghostunnel
A simple SSL/TLS proxy with mutual authentication for securing non-TLS services
Stars: ✭ 1,296 (+431.15%)
Mutual labels:  proxy, tls
Mitmproxy
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.
Stars: ✭ 25,495 (+10348.77%)
Mutual labels:  proxy, tls
Console
Management UI for MinIO and MinIO operator
Stars: ✭ 159 (-34.84%)
Mutual labels:  tls, k8s
Blinksocks
A framework for building composable proxy protocol stack.
Stars: ✭ 587 (+140.57%)
Mutual labels:  proxy, tls
Websocks
A secure proxy based on WebSocket. 一个基于 WebSocket 的代理工具
Stars: ✭ 102 (-58.2%)
Mutual labels:  proxy, tls
Ssl Proxy
🔒 Simple zero-config SSL reverse proxy with real autogenerated certificates (LetsEncrypt, self-signed, provided)
Stars: ✭ 427 (+75%)
Mutual labels:  proxy, tls
Charon Spring Boot Starter
Reverse proxy implementation in form of a Spring Boot starter.
Stars: ✭ 155 (-36.48%)
Mutual labels:  proxy, reverse
Gitwebhookproxy
A proxy to let webhooks reach running services behind a firewall – [✩Star] if you're using it!
Stars: ✭ 123 (-49.59%)
Mutual labels:  proxy, k8s
Nsmartproxy
NSmartProxy是一款开源免费的内网穿透工具。采用.NET CORE的全异步模式打造。(NSmartProxy is an open source reverse proxy tool that creates a secure tunnel from a public endpoint to a locally service.)
Stars: ✭ 547 (+124.18%)
Mutual labels:  proxy, reverse
Kubefwd
Bulk port forwarding Kubernetes services for local development.
Stars: ✭ 2,713 (+1011.89%)
Mutual labels:  proxy, k8s
Leaf
A lightweight and fast proxy utility tries to include any useful features.
Stars: ✭ 530 (+117.21%)
Mutual labels:  proxy, tls
Simple Java Mail
Simple API, Complex Emails (JavaMail smtp wrapper)
Stars: ✭ 821 (+236.48%)
Mutual labels:  proxy, tls
Gsnova
Private proxy solution & network troubleshooting tool.
Stars: ✭ 509 (+108.61%)
Mutual labels:  proxy, tls
Nitmproxy
Proxy server based on netty
Stars: ✭ 94 (-61.48%)
Mutual labels:  proxy, tls
Trojan Go
Go实现的Trojan代理,支持多路复用/路由功能/CDN中转/Shadowsocks混淆插件,多平台,无依赖。A Trojan proxy written in Go. An unidentifiable mechanism that helps you bypass GFW. https://p4gefau1t.github.io/trojan-go/
Stars: ✭ 4,049 (+1559.43%)
Mutual labels:  proxy, tls
Jwtproxy
An HTTP-Proxy that adds AuthN through JWTs
Stars: ✭ 379 (+55.33%)
Mutual labels:  proxy, tls
Gobetween
☁️ Modern & minimalistic load balancer for the Сloud era
Stars: ✭ 1,631 (+568.44%)
Mutual labels:  proxy, tls
Undermoon
Mordern Redis Cluster solution for easy operation.
Stars: ✭ 166 (-31.97%)
Mutual labels:  proxy, k8s

⚓️ kedge - Kubernetes Edge Proxy

Travis Build Go Report Card Apache 2.0 License

kedge (verb) to move (a ship) by means of a line attached to a small anchor dropped at the distance and in the direction desired

Proxy for gRPC, HTTP (1.1/2) microservices with the aim to make cross-cluster microservice communication simple to set up, and secure. All you need for it to work is: TLS client certificates in your service pods and special dialer, a single L4 load balanced IP address in each cluster, and a kedge server behind it.

The pain of cross-cluster Kubernetes communication

Kubernetes is great, if you have one cluster. If you want to have two or more, you need more advanced configuration. This project stems from the frustration of setting up communication between two K8S clusters. This requires a couple of things:

  • cross-cluster networking - usually a complex process of setting up and maintaining IPSec bridges
  • configuration of routing rules - each cluster needs to know about each other cluster's 3 (!) network ranges: host, pod and internal-service networks
  • providing federated service discovery - either through the alpha-grade K8S Federation or CoreDNS stub zones

All these are subject to subtle interplays between routes, iptables rules, DNS packets and MTU limits of IPSec tunnels, which would make even a seasoned network engineer go gray.

At the same time, none of the existing service meshes or networking overlays provide an easy fix for this.

Kedge Design

Kedge is a reverse/forward proxy for gRPC and HTTP traffic.

It uses a concept of backends (see gRPC, HTTP) that map onto K8S Services. These define load balancing policies, middleware used for calls, and resolution. The backends have "warm" connections ready to receive inbound requests.

The inbound requests are directed to backends based on routes (see gRPC, HTTP). These match onto requests based on host, paths (services), headers (metadata). They also specify authorization requirements for the route to be taken.

Kedge can be accessed then:

Using native kedge http.Client inside caller library

Following diagram shows cross-cluster POD to POD communication using kEdge dialer.

Kedge Cert Routing

Using Winch (local proxy to kedges)

Following diagram shows the routing done by forward proxy called winch (client). In this example kedge OIDC auth is enabled to support corp use cases (per backend access controlled by permissions stored in custom IDToked claim). It can be also switched to just client certificate verification as in the diagram above.

NOTE: Any auth which is required by Service B / Pod B needs to configured on winch due to clients blocking sending auth headers via plain HTTP, even over local network (e.g kubectl).

Kedge Winch Routing

Usage

Kedge package is using Go modules for vendoring.

Please see

Status

The project is still in beta state, however heavily tested and used on prod clusters. For status, see CHANGELOG

Wishlist

See Feature / Improvement issues for currently wanted features and improvements.

License

kedge is released under the Apache 2.0 license. See LICENSE.txt.

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