Skip to content

pole-io/pole-sidecar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pole-sidecar (Pingora)

一个基于 Pingora 的轻量 sidecar 骨架,支持 HTTP 与 gRPC(h2)转发,使用 TOML 作为配置。

功能概览

  • 入站:HTTP/1.1 与 HTTP/2(支持 gRPC-h2c)
  • 出站:按路由前缀/ gRPC 前缀选择上游集群
  • 负载均衡:简单轮询
  • 拦截器骨架:请求阶段与上游阶段的回调占位(可扩展 ACL、限流、熔断、指标)

配置

参考项目根目录的 sidecar.toml

[inbound_http]
addr = "0.0.0.0:8080"

# 可选:独立 gRPC 端口(也可以不配,直接走 8080)
# [inbound_grpc]
# addr = "0.0.0.0:8081"

[[routes]]
name = "http_api"
prefix = "/api/"
cluster = "backend_http"

[[routes]]
name = "grpc_helloworld"
# gRPC 的 path 形如 /package.Service/Method
grpc_prefix = "/helloworld.Greeter/"
cluster = "backend_grpc"

[[clusters]]
name = "backend_http"
endpoints = ["127.0.0.1:9000"]
lb_policy = "round_robin"
tls = false

[[clusters]]
name = "backend_grpc"
endpoints = ["127.0.0.1:50051"]
lb_policy = "round_robin"
tls = false
  • 路由匹配顺序:先匹配 grpc_prefix,再匹配 prefix
  • gRPC 识别:HTTP/2 且 content-typeapplication/grpc 开头。

运行

  • 先确保本地有 Rust 工具链(1.74+),macOS 下无需 OpenSSL(当前未启用 TLS)。
  • 可选:通过环境变量指定配置文件路径 SIDECAR_CONFIG
# 构建
cargo build

# 运行(默认读取 ./sidecar.toml)
RUST_LOG=info cargo run

# 或自定义配置路径
SIDECAR_CONFIG=./my-sidecar.toml RUST_LOG=debug cargo run

代码结构

  • src/config.rs:TOML 配置结构与校验、端点解析
  • src/proxy.rsSidecarProxy 实现 ProxyHttp,包含路由、负载均衡与拦截回调
  • src/main.rs:初始化日志、加载配置、创建 Pingora Server 与监听服务

设计与扩展建议

  • 访问控制(ACL):在 request_filter 中读取白名单/黑名单规则并拒绝请求
  • 限流:在 request_filterproxy_upstream_filter 加入令牌桶/漏桶,实现 QPS/并发控制
  • 熔断:对端点的错误率做滑窗统计,自动摘除异常实例(可扩展到 cluster_endpoints 的动态更新)
  • 动态路由:结合配置热更新(通知/轮询),替换 SidecarConfigArc 即可生效
  • 指标:在 logging 阶段记录成功/失败与时延,暴露 Prometheus 端点(可通过 Service::prometheus_http_service() 新增 admin 监听)

备注

  • gRPC 无 TLS(h2c)可直接透传;若需要 TLS/ALPN,请为 pingora 启用 openssl/boringssl/rustls feature,并配置监听与上游 TLS 参数。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors