K8s API 动态白名单代理网关,为公网 CI 环境提供安全的 K8s API 访问通道。
# 编译
make build
# 配置
export KUBE_API_URL=https://your-k8s-api:6443
export AUTH_TOKENS=your-secret-token
# 运行
./kube-bridge
# 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"
| 方法 | 路径 | 认证 | 说明 |
|---|---|---|---|
| POST | /_bridge/register | Bearer Token | 注册当前 IP 到白名单 |
| POST | /_bridge/release | Bearer Token | 释放当前 IP |
| GET | /_bridge/whitelist | Bearer Token | 查询白名单 |
| GET | /healthz | 无 | 健康检查 |
* | /* | IP 白名单 | K8s API 代理 |
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
kube-bridge-cli 可直接嵌入 CNB .cnb.yml,覆盖两类场景:
启动时 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
三层防御:
keep-alive 捕获 SIGTERM → 主动释放endStages 在容器销毁前显式 release构建开始前 register,结束阶段 release。endStages 无论成功或失败都会执行。
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_URL与KUBE_BRIDGE_TOKEN建议通过 CNBimports从 secrets 仓库引入。
通过环境变量配置,详见 .env.example。