logo
0
0
WeChat Login

kube-bridge

K8s API 动态白名单代理网关,为公网 CI 环境提供安全的 K8s API 访问通道。

使用场景

  • K8s API Server 配置了 IP 白名单,CI Runner 出口 IP 动态变化
  • kube-bridge 作为 K8s Service 部署,固定 IP 加入 K8s API 白名单
  • CI Runner 通过 kube-bridge 的动态白名单机制按需获取临时访问权限

快速开始

部署

# 编译 make build # 配置 export KUBE_API_URL=https://your-k8s-api:6443 export AUTH_TOKENS=your-secret-token # 运行 ./kube-bridge

CI 集成

# 1. 注册 IP curl -X POST https://bridge.example.com:6443/_bridge/register \ -H "Authorization: Bearer $KUBE_BRIDGE_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ttl": 1800}' # 2. 正常使用 kubectl/helm kubectl --server=https://bridge.example.com:6443 get pods # 3. 释放 IP curl -X POST https://bridge.example.com:6443/_bridge/release \ -H "Authorization: Bearer $KUBE_BRIDGE_TOKEN"

API

方法路径认证说明
POST/_bridge/registerBearer Token注册当前 IP 到白名单
POST/_bridge/releaseBearer Token释放当前 IP
GET/_bridge/whitelistBearer Token查询白名单
GET/healthz健康检查
*/*IP 白名单K8s API 代理

CLI

kube-bridge-cli 为开发者提供一键开通 / 续期 / 释放能力。

make build-cli export KUBE_BRIDGE_URL=https://bridge.example.com:6443 export KUBE_BRIDGE_TOKEN=your-token # 一次性开通(默认 30m) kube-bridge-cli register --ttl 1h # 查看白名单 kube-bridge-cli list # 主动释放 kube-bridge-cli release # 守护进程:启动时开通,周期续期,Ctrl+C 时释放 kube-bridge-cli keep-alive --ttl 30m --interval 10m

子命令:

子命令说明
register注册当前 IP,支持 --ttl
release释放当前 IP
list / ls查看白名单
keep-alive注册后按 --interval 自动续期,退出时释放(--no-release 关闭)

全局参数:--url / -u(或 $KUBE_BRIDGE_URL)、--token / -t(或 $KUBE_BRIDGE_TOKEN)。

下载预编译二进制

每次 tag 发布会产出两类产物:

文件名用途
kube-bridge-cli-<tag>-<os>-<arch>固定版本
kube-bridge-cli-<os>-<arch>无版本别名,/releases/latest/download/ 始终指向最新版
# 最新版(推荐,URL 稳定) curl -fsSL -o kube-bridge-cli \ https://cnb.cool/debug.icu/kube-bridge/-/releases/latest/download/kube-bridge-cli-linux-amd64 chmod +x kube-bridge-cli # 指定版本 curl -fsSL -o kube-bridge-cli \ https://cnb.cool/debug.icu/kube-bridge/-/releases/v1.0.1/download/kube-bridge-cli-v1.0.1-linux-amd64

CNB 集成示例

kube-bridge-cli 可直接嵌入 CNB .cnb.yml,覆盖两类场景:

1. 云原生开发环境(VSCode / Cursor)

启动时 keep-alive 守护进程注册并周期续期,工作区销毁前由 endStages 显式 release

$: vscode: - docker: image: your-image:latest services: - vscode imports: - https://cnb.cool/<org>/secrets/-/blob/main/deploy.yaml # 提供 KUBE_BRIDGE_URL / KUBE_BRIDGE_TOKEN stages: - name: Register to kube-bridge script: | set -e ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') curl -fsSL -o /usr/local/bin/kube-bridge-cli \ "https://cnb.cool/debug.icu/kube-bridge/-/releases/latest/download/kube-bridge-cli-linux-${ARCH}" chmod +x /usr/local/bin/kube-bridge-cli # 守护进程:周期续期、收到 SIGTERM 时释放;TTL 为兜底 nohup kube-bridge-cli keep-alive --ttl 1h --interval 20m \ > /tmp/kube-bridge-cli.log 2>&1 & endStages: - name: Release kube-bridge whitelist script: | if [ -x /usr/local/bin/kube-bridge-cli ]; then kube-bridge-cli release || true fi

三层防御:

  1. 常规关闭:keep-alive 捕获 SIGTERM → 主动释放
  2. SIGKILL:endStages 在容器销毁前显式 release
  3. 异常丢失:服务端 TTL 过期兜底

2. 构建环境(push / tag_push 等一次性流水线)

构建开始前 register,结束阶段 releaseendStages 无论成功或失败都会执行。

main: push: - services: - docker imports: - https://cnb.cool/<org>/secrets/-/blob/main/deploy.yaml stages: - name: Grant kube access script: | ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') curl -fsSL -o /usr/local/bin/kube-bridge-cli \ "https://cnb.cool/debug.icu/kube-bridge/-/releases/latest/download/kube-bridge-cli-linux-${ARCH}" chmod +x /usr/local/bin/kube-bridge-cli kube-bridge-cli register --ttl 30m - name: Deploy script: | kubectl --server="$KUBE_BRIDGE_URL" apply -f deploy/ endStages: - name: Revoke kube access script: | kube-bridge-cli release || true

必备凭据 KUBE_BRIDGE_URLKUBE_BRIDGE_TOKEN 建议通过 CNB imports 从 secrets 仓库引入。

配置

通过环境变量配置,详见 .env.example

About

k8s api 代理服务,用于向特定主机开放k8s api 端口(通过代理), 用于公网CI 环境部署

Language
Go92.4%
Makefile6.1%
Dockerfile1.5%