All Projects → sercand → Kuberesolver

sercand / Kuberesolver

Licence: apache-2.0
Grpc Load Balancer with Kubernetes resolver

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Kuberesolver

Yorkie
Yorkie is a document store for collaborative applications.
Stars: ✭ 196 (-18.67%)
Mutual labels:  grpc
Clay
Proto-first minimal server platform for gRPС+REST+Swagger APIs
Stars: ✭ 212 (-12.03%)
Mutual labels:  grpc
Tensorrt Laboratory
Explore the Capabilities of the TensorRT Platform
Stars: ✭ 236 (-2.07%)
Mutual labels:  grpc
Hivemq Mqtt Tensorflow Kafka Realtime Iot Machine Learning Training Inference
Real Time Big Data / IoT Machine Learning (Model Training and Inference) with HiveMQ (MQTT), TensorFlow IO and Apache Kafka - no additional data store like S3, HDFS or Spark required
Stars: ✭ 204 (-15.35%)
Mutual labels:  grpc
Hello Auth Grpc
two grpc microservices with mutual TLS and token authentication in Go
Stars: ✭ 208 (-13.69%)
Mutual labels:  grpc
Grpc Over Webrtc
gRPC over WebRTC
Stars: ✭ 220 (-8.71%)
Mutual labels:  grpc
Liiklus
Reactive (RSocket/gRPC) Gateway for the event-based systems
Stars: ✭ 192 (-20.33%)
Mutual labels:  grpc
Ttrpc
GRPC for low-memory environments
Stars: ✭ 236 (-2.07%)
Mutual labels:  grpc
Core Grpc
C# Grpc驱动封装,基于Consul实现服务注册服务发现,支持dotnetcore / framework,可快速实现基于Grpc的微服务,内部有完整案例,包含服务端Server 客户端 Client,core+grpc, netcore+grpc, dotnetcore+grpc
Stars: ✭ 209 (-13.28%)
Mutual labels:  grpc
Homo
An open source natural interaction system based on offline wake-up, natural language understanding and sentiment analysis
Stars: ✭ 233 (-3.32%)
Mutual labels:  grpc
Trunk
Make bazel an out of box solution for C++/Java developers
Stars: ✭ 203 (-15.77%)
Mutual labels:  grpc
Rules protobuf
Bazel rules for building protocol buffers and gRPC services (java, c++, go, ...)
Stars: ✭ 206 (-14.52%)
Mutual labels:  grpc
Pike
Generate CRUD gRPC backends from single YAML description.
Stars: ✭ 222 (-7.88%)
Mutual labels:  grpc
Terraform Plugin Sdk
Terraform Plugin SDK enables building plugins (providers) to manage any service providers or custom in-house solutions
Stars: ✭ 201 (-16.6%)
Mutual labels:  grpc
Eslint Import Resolver Babel Module
Custom eslint resolve for babel-plugin-module-resolver
Stars: ✭ 236 (-2.07%)
Mutual labels:  resolver
Istio Micro
istio 微服务示例代码 grpc+protobuf+echo+websocket+mysql+redis+kafka+docker-compose
Stars: ✭ 194 (-19.5%)
Mutual labels:  grpc
Mu Haskell
Mu (μ) is a purely functional framework for building micro services.
Stars: ✭ 215 (-10.79%)
Mutual labels:  grpc
Adlik
Adlik: Toolkit for Accelerating Deep Learning Inference
Stars: ✭ 237 (-1.66%)
Mutual labels:  grpc
Yivnet
Yivnet is a microservice game server base on go-kit
Stars: ✭ 237 (-1.66%)
Mutual labels:  grpc
Anycable Go
Anycable Go WebSocket Server
Stars: ✭ 234 (-2.9%)
Mutual labels:  grpc

kuberesolver

A Grpc name resolver by using kubernetes API. It comes with a small ~250 LOC kubernetes client to find service endpoints. Therefore it won't bloat your binaries.

USAGE


// Import the module
import "github.com/sercand/kuberesolver/v3"
	
// Register kuberesolver to grpc before calling grpc.Dial
kuberesolver.RegisterInCluster()

// it is same as
resolver.Register(kuberesolver.NewBuilder(nil /*custom kubernetes client*/ , "kubernetes"))

// if schema is 'kubernetes' then grpc will use kuberesolver to resolve addresses
cc, err := grpc.Dial("kubernetes:///service.namespace:portname", opts...)

An url can be one of the following, grpc naming docs

kubernetes:///service-name:8080
kubernetes:///service-name:portname
kubernetes:///service-name.namespace:8080

kubernetes://namespace/service-name:8080
kubernetes://service-name:8080/
kubernetes://service-name.namespace:8080/

Using alternative Schema

Use RegisterInClusterWithSchema(schema) instead of RegisterInCluster on start.

Client Side Load Balancing

You need to pass grpc.WithBalancerName option to grpc on dial:

grpc.DialContext(ctx,  "kubernetes:///service:grpc", grpc.WithBalancerName("round_robin"), grpc.WithInsecure())

This will create subconnections for each available service endpoints.

How is this different from dialing to service.namespace:8080

Connecting to a service by dialing to service.namespace:8080 uses DNS and it returns service stable IP. Therefore, gRPC doesn't know the endpoint IP addresses and it fails to reconnect to target services in case of failure.

Kuberesolver uses kubernetes API to get and watch service endpoint IP addresses. Since it provides and updates all available service endpoints, together with a client-side balancer you can achive zero downtime deployments.

RBAC

You need give GET and WATCH access to the endpoints if you are using RBAC in your cluster.

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