k8s- grpc- solver 解析器
Kubernetes服务的自定义 gRPC 解析器, 可以在Kubernetes集群中发现服务 。 这种解析器允许gRPC客户端自动发现并连接到运行于Kubernetes的服务,而无需硬编码IP地址.
概览
在Kubernetes运行微服务时,服务发现可能具有挑战性,特别是对gRPC服务而言. 此库提供自定义解析器:
监视 Kubernetes 端点资源以跟踪服务 IP 地址 当端点改变时自动更新 gRPC 客户端连接 处理多个服务实例之间的故障和负载平衡 在Kubernetes集群内无缝工作
解决器分两部分:
- 使用 GRPC 官方解析器接口执行 Golang
- 使用@grpc/grpc-js执行节点.js
特征
- 动态服务发现: 在Kubernetes中自动发现服务端点
- 实时更新: 监视服务端点的更改并实时更新连接
- 倒置机制: 节点. js 执行返回到 DNS 解析度 如果 Kubernetes API 不可用的话
- 处理错误: 实施重联尝试的后退策略
- 简单整合: 方便与现有的gRPC客户集成
安装
戈兰g
go get github.com/city-mall/k8s-grpc-resolver/golang
节点.js
npm install @citymallservices/k8s-grpc-resolver
使用量
戈兰g
import (
"google.golang.org/grpc"
k8sresolver "github.com/city-mall/k8s-grpc-resolver/golang"
)
func main() {
// Register the resolver
resolver := k8sresolver.Builder()
// Use the resolver in your gRPC client
// Format: k8s://<namespace>/<service-name>:<port>
conn, err := grpc.Dial(
"k8s://default/my-service:8080",
grpc.WithResolvers(resolver),
grpc.WithInsecure(),
)
if err != nil {
// Handle error
}
defer conn.Close()
// Use the connection with your gRPC client
client := pb.NewMyServiceClient(conn)
// ...
}
用于标准Kubernetes DNS格式的服务(service.namespace.svc.cluster.local),可以使用 Try 帮助函数 :
import (
k8sresolver "github.com/city-mall/k8s-grpc-resolver/golang"
)
// Convert standard Kubernetes DNS to resolver format
address := k8sresolver.Try("my-service.default.svc.cluster.local:8080")
// address will be "k8s://default/my-service:8080"
节点.js
import { setup } from "@citymallservices/k8s-grpc-resolver";
import { credentials, createClient } from "@grpc/grpc-js";
// Register the resolver and get the formatted address
const address = setup("my-service.default:8080");
// Create a client with the address
const client = createClient(address, credentials.createInsecure());
// Use the client as normal
如何运作
执行
戈兰的实施工作:
- 在自定义解析器中注册
k8s://计划 - 使用 Kubernetes API 监视指定服务的端点资源
- 从端点资源提取 IP 地址
- 更新 gRPC 客户端与新地址的连接
节点.js 执行
节点J的执行:
- 在自定义解析器中注册
k8s://计划 - 初始使用 DNS 分辨率同时尝试连接到 Kubernetes API
- 一旦连接, 监视指定服务的端点资源
- 更新 gRPC 客户端与新地址的连接
- 为重新连接尝试实施后退策略
所需资源
戈兰g
- 具有 API 访问权限的 Kubernetes 集群
- 适当的 RBAC 读取端点资源的权限
- 走1.15号或以后
节点.js
- 具有 API 访问权限的 Kubernetes 集群
- 适当的 RBAC 读取端点资源的权限
- 节点.js 14 或以后
- @grpc/grpc-js 1.13.4 或以后
- @kubernetes/客户端-节点1.3.0或以后
出版
要发布新版本的Node.js软件包:
- 更新软件包中的版本。 json
- 运行以下命令 :
npm publish
许可证
公务员制度委员会
作者
阿卡德夫·巴内吉
该项目由CityMall Services维护.