Thanks to visit codestin.com
Credit goes to github.com

Skip to content

jwcjlu/k8s-proxy

Repository files navigation

K8s Proxy

一个用于Kubernetes集群的HTTP代理服务,可以通过HTTP请求转发到K8s集群内的Service。

功能特性

  • 🚀 高性能HTTP代理
  • 🔒 支持K8s认证和授权
  • 📊 请求日志记录
  • 🛡️ CORS支持
  • ⚡ 连接池和超时控制
  • 🔧 灵活的配置管理
  • 🏥 健康检查端点
  • 🌐 支持集群外访问K8s服务
  • 🔍 服务发现和列表功能
  • 🔐 多种认证方式支持

快速开始

1. 构建和运行

# 构建
go build -o k8s-proxy .

# 运行
./k8s-proxy -config config.yaml

2. 使用Docker

# 构建镜像
docker build -t k8s-proxy .

# 运行容器
docker run -p 8080:8080 k8s-proxy

3. 在K8s中部署

# 部署到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"

配置说明

配置文件 (config.yaml)

# 服务端口
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: 90

环境变量

  • K8S_MASTER_URL: K8s API服务器地址
  • K8S_BEARER_TOKEN: 认证令牌
  • K8S_NAMESPACE: 默认命名空间

架构说明

客户端请求 → K8s Proxy → K8s Service
    ↓              ↓           ↓
  HTTP请求    解析服务信息   转发到目标服务
  1. 请求解析: 从URL路径中解析出namespace、service、port和path
  2. 服务发现: 构建K8s service的完整URL
  3. 请求转发: 使用反向代理将请求转发到目标服务
  4. 响应处理: 将目标服务的响应返回给客户端

开发

项目结构

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published