Kubetap 集群内运行完整指南:以 Pod 或 Docker 注入 Kubernetes Service 代理的最佳实践
Kubetap 集群内运行完整指南:以 Pod 或 Docker 注入 Kubernetes Service 代理的最佳实践
【免费下载链接】kubetapKubectl plugin to interactively proxy Kubernetes Services with ease项目地址: https://gitcode.com/gh_mirrors/ku/kubetap
Kubetap 是一款 kubectl 插件(kubectl tap),用于在 Kubernetes 集群内以极简方式为目标 Service 部署拦截式代理(Proxy),让你无需修改业务 Deployment、无需引入 CNI 就能"轻点"任意服务流量。本文面向新手,系统讲解 Kubetap 集群内运行的两种姿势:以 Pod 形式部署到集群,以及从本地机器用 Docker 运行。
上图展示了 Kubetap 的工作方式:代理(Proxy)作为 Service 与 Pod 之间的一环被"注入"集群,流量经过代理后即可被观察、拦截与转发,而无需改动任何业务代码。
为什么选择 Kubetap 注入代理
传统上要给集群里的 Web 应用做流量拦截测试,流程漫长而繁琐:
- 手动修改 Deployment 添加 sidecar、打补丁修改 Service、部署 mitmweb、测试、修 bug、回滚……
- 或者在应用里塞调试日志,等 CI 构建、再翻 Pod 日志 🐛
Kubetap 把这条链路压缩成一条命令:tap on注入代理,tap off清理现场。代理容器(默认 MITMproxy)以 sidecar 方式运行在集群内,流量不出集群,性能损耗更小。更多背景可参考 docs/getting_started/quick-start.md。
方式一:以 Pod 形式注入集群
这是最优雅的玩法:直接把 Kubetap 容器调度到 Kubernetes 中运行。官方镜像为gcr.io/soluble-oss/kubectl-tap:latest,其构建过程见 Dockerfile。
apiVersion: v1 kind: Pod metadata: name: kubetap spec: serviceAccountName: kubetap # 需有集群操作权限 containers: - name: kubetap image: gcr.io/soluble-oss/kubectl-tap:latest args: ["on", "-p80", "myservice"]🔑关键特性:在集群内运行时,Kubetap 会自动检测并使用挂载到容器文件系统的 ServiceAccount Token,无需手工配置 kubeconfig。只要 ServiceAccount 具备操作目标命名空间的权限,代理即可注入成功。
方式二:从本地用 Docker 运行代理
如果你更习惯在开发机上操作,可以把本机的~/.kube配置以只读方式挂载进容器:
docker run -v "${HOME}/.kube/:/.kube/:ro" \ gcr.io/soluble-oss/kubectl-tap:latest on -p80 myservice用完之后,用同样的方式"关阀":
docker run -v "${HOME}/.kube/:.kube/:ro" \ gcr.io/soluble-oss/kubectl-tap:latest off myservice💡 两条命令与kubectl tap的参数完全一致,区别仅在于运行载体是本地 Docker 容器而非集群 Pod。详细说明见 docs/getting_started/usage.md。
选择镜像标签:latest 还是 alpine?
Kubetap 基于 Alpine 构建,提供两类标签,按需选择:
| 镜像标签 | 说明 |
|---|---|
gcr.io/soluble-oss/kubectl-tap:latest | Alpine 构建 +scratch运行环境,体积极小、无 Shell |
gcr.io/soluble-oss/kubectl-tap:alpine | Alpine 构建 + Alpine 运行环境,带 Shell,适合调试 🛠️ |
两个标签分别由 Dockerfile(scratch 版本)与 Dockerfile.alpine 构建,后者保留了交互式 Shell,排障时非常有用。
注入后如何访问代理?
tap on成功后会打印 Port-Forward 隧道地址,浏览器访问http://127.0.0.1:2244即可看到 MITMproxy 的 Web 控制台:
实用参数小贴士:
--https:代理 HTTPS 端口(如-p443 --https)--port-forward:自动建立端口转发隧道--browser:自动打开浏览器访问代理与目标服务(隐含--port-forward)kubectl tap list:列出当前所有活跃代理,可用-n限定命名空间
快速上手命令速查
假设要代理argocd命名空间的argocd-server服务:
kubectl tap on -n argocd -p443 --https argocd-server --port-forward # 注入代理 kubectl tap list # 查看活跃代理 kubectl tap off -n argocd argocd-server # 移除代理整个过程无需改动任何 Deployment 或 Service 清单,代理注入与清理都由 Kubetap 自动完成。
延伸阅读与源码路径
- 安装方式(源码 / Homebrew / Krew / 二进制):docs/getting_started/installation.md
- 使用文档(on / off / list / 容器运行):docs/getting_started/usage.md
- 代理注入核心逻辑:cmd/kubectl-tap/tap.go
- MITMproxy 容器入口脚本:proxies/mitmproxy/kubetap-entrypoint.sh
- 项目镜像构建定义:Dockerfile、Dockerfile.alpine
📌 一句话总结:集群内跑 Pod 最省心(自动识别 ServiceAccount),本地跑 Docker 最灵活(复用你已有的 kubeconfig)——两种注入方式任选其一,Kubetap 都能让 Kubernetes Service 代理"即插即用"。
【免费下载链接】kubetapKubectl plugin to interactively proxy Kubernetes Services with ease项目地址: https://gitcode.com/gh_mirrors/ku/kubetap
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
