一个用于Kubernetes集群的HTTP代理服务,可以通过HTTP请求转发到K8s集群内的Service。
- 🚀 高性能HTTP代理
- 🔒 支持K8s认证和授权
- 📊 请求日志记录
- 🛡️ CORS支持
- ⚡ 连接池和超时控制
- 🔧 灵活的配置管理
- 🏥 健康检查端点
- 🌐 支持集群外访问K8s服务
- 🔍 服务发现和列表功能
- 🔐 多种认证方式支持
# 构建
go build -o k8s-proxy .
# 运行
./k8s-proxy -config config.yaml# 构建镜像
docker build -t k8s-proxy .
# 运行容器
docker run -p 8080:8080 k8s-proxy# 部署到K8s集群
kubectl apply -f k8s-deployment.yaml代理服务接受以下格式的请求:
http://proxy-server:8080/{namespace}/{service}/{port}/{path}
支持从Kubernetes集群外部访问集群内的服务:
# 使用kubeconfig文件
export KUBECONFIG=/path/to/your/kubeconfig
./k8s-proxy -config config-external.yaml
# 使用环境变量
export K8S_MASTER_URL="https://your-k8s-api-server:6443"
export K8S_BEARER_TOKEN="your-bearer-token"
./k8s-proxy假设您有一个名为 my-app 的服务在 default 命名空间中运行在端口 8080:
# 访问服务的根路径
curl http://localhost:8080/default/my-app/8080/
# 访问服务的特定路径
curl http://localhost:8080/default/my-app/8080/api/users
# 使用POST请求
curl -X POST http://localhost:8080/default/my-app/8080/api/users \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "[email protected]"}'curl http://localhost:8080/health# 列出默认命名空间的服务
curl http://localhost:8080/api/services
# 列出指定命名空间的服务
curl "http://localhost:8080/api/services?namespace=production"# 服务端口
port: 8080
# 日志级别 (debug, info, error)
log_level: info
# 超时设置(秒)
read_timeout: 30
write_timeout: 30
# Kubernetes配置
k8s:
master_url: "https://kubernetes.default.svc.cluster.local"
kube_config: "" # 如果为空,使用集群内配置
insecure: false
bearer_token: "" # 如果为空,使用默认的service account token
namespace: "default"
# 代理配置
proxy:
timeout: 30
max_idle_conns: 100
idle_timeout: 90K8S_MASTER_URL: K8s API服务器地址K8S_BEARER_TOKEN: 认证令牌K8S_NAMESPACE: 默认命名空间
客户端请求 → K8s Proxy → K8s Service
↓ ↓ ↓
HTTP请求 解析服务信息 转发到目标服务
- 请求解析: 从URL路径中解析出namespace、service、port和path
- 服务发现: 构建K8s service的完整URL
- 请求转发: 使用反向代理将请求转发到目标服务
- 响应处理: 将目标服务的响应返回给客户端
k8s-proxy/
├── main.go # 主程序入口
├── internal/
│ ├── config/ # 配置管理
│ ├── handler/ # 请求处理器
│ ├── logger/ # 日志模块
│ └── middleware/ # 中间件
├── config.yaml # 配置文件
├── Dockerfile # Docker构建文件
├── k8s-deployment.yaml # K8s部署文件
└── README.md # 说明文档
# 安装依赖
go mod tidy
# 运行测试
go test ./...
# 构建
go build -o k8s-proxy .MIT License