尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Kubetap 注解机制揭秘:original-port 等关键注解如何实现状态追踪

Kubetap 注解机制揭秘:original-port 等关键注解如何实现状态追踪 Kubetap 注解机制揭秘original-port 等关键注解如何实现状态追踪【免费下载链接】kubetapKubectl plugin to interactively proxy Kubernetes Services with ease项目地址: https://gitcode.com/gh_mirrors/ku/kubetapKubetap是一款 Kubectl 插件能够轻松地为 Kubernetes Service 交互式注入代理基于 mitmproxy。它最精巧的设计是借助 Kubernetes 原生注解Annotations机制来追踪谁被 Tapped、原来的端口是多少从而实现一键 Tap/Untap 与状态恢复。本文带你快速看懂kubetap.io/original-port等 3 个关键注解是如何工作的。为什么需要注解来追踪状态Kubetap 的核心动作是篡改你的 Service 和 Deployment把 Service 端口的目标从业务容器切换到 mitmproxy sidecar同时给 Deployment 注入一个代理容器。问题随之而来——怎么知道哪些资源被改过改成了什么样Kubetap 的答案简单而优雅不在集群里建任何额外的 CRD而是往 Service、ConfigMap、Pod 模板上打三个带kubetap.io/前缀的注解。这些注解既是开关标记也是恢复凭据。3 个关键注解一览这三个注解集中定义在 cmd/kubectl-tap/main.go 的常量区注解打在谁身上作用kubetap.io/original-portService记录原始 TargetPort恢复流量的凭据kubetap.io/proxy-configConfigMap标记该配置属于哪个 Deployment便于清理kubetap.io/tappedPod 模板标记被 Tapped 的 Pod定位 port-forward 目标下面逐一拆解。original-port流量回滚的存档点kubetap.io/original-port是最核心的一个。当执行kubectl tap on时tapSvc() 函数会做两件事先存档把目标端口的原始TargetPort可能是数字也可能是命名端口写入kubetap.io/original-port再切换把该端口的TargetPort改指向 mitmproxy 的监听端口7777并额外添加一个2244的 Web 调试端口。执行kubectl tap off时untapSvc()读取这条注解把TargetPort精确还原回原值注意源码中特意用intstr.Parse而非FromString保证命名端口也能正确恢复并删除该注解——一次 Tap 循环Service 上零残留。防重入保护Tap 前会检查original-port注解是否已存在存在则直接报the target Service has already been tapped避免重复注入 sidecar。kubectl tap list也正是靠扫描这条注解来枚举所有被 Tapped 的 Service 的。proxy-config给 ConfigMap 贴上身份证mitmproxy 的运行配置监听 7777、Web 界面 2244、reverse 模式指向上游业务端口被写进一个名为kubetap-target-deployment名的 ConfigMap并挂到容器/home/mitmproxy/config/目录。这个 ConfigMap 带有注解kubetap.io/proxy-config: target-deployment名。卸载时UnreadyEnv()并不靠名字硬删而是按注解匹配找出归属当前 Deployment 的 ConfigMap 再删除——即使名字规则变化清理逻辑也不会误伤其他资源。相关实现在 cmd/kubectl-tap/mitmproxy.go。tapped让 kubetap 找到该 port-forward 的 PodTap 成功后kubetap.io/tapped: Deployment名会被写进 Deployment 的Pod 模板注解随之渲染到每一个 Pod 上。在开启--port-forward或--browser的交互模式下kubetapPod()函数通过遍历 Pod、匹配这条注解来精准定位目标 Pod然后建立两条转发隧道2244 → 2244mitmproxy Web 界面4000 → 7777代理流量入口Untap 时该注解从 Pod 模板中一并删除。注解驱动下的完整生命周期tap on → Service 打上 original-port 注解端口切向 7777 → Pod 模板打上 tapped 注解注入 mitmproxy sidecar → ConfigMap 打上 proxy-config 注解挂载配置 tap off → 按注解逐一还原回滚端口 → 摘除 sidecar → 清理 ConfigMap整个过程没有引入任何自定义资源tap list、防重复 Tap、故障后残留清理例如上次 tap 崩溃留下的 ConfigMap全都由这三条注解驱动。这也是 Kubetap 能即插即拔的底层原因。动手验证3 条命令看懂注解假设你已在 docs/getting_started/ 里完成了安装并 Tapped 一个 Service可以这样观察注解kubectl get svc 名字 -o yaml查看 Service 上的kubetap.io/original-portkubectl get cm -l kubernetes.io/metav1/...直接kubectl get cm -o yaml找kubetap-target-前缀查看kubetap.io/proxy-configkubectl get pods -o yaml在 Pod 的metadata.annotations中找kubetap.io/tapped再执行kubectl tap off重新查看你会发现三处注解全部消失端口恢复原值——这就是注解式状态追踪的完整闭环。小结Kubetap 用最小的机制实现了最大的灵活性kubetap.io/original-portService流量回滚凭据 Tap 状态标记tap.go 中的tapSvc/untapSvc围绕它展开kubetap.io/proxy-configConfigMap配置资源的归属身份证支撑安全清理kubetap.io/tappedPod 模板Pod 级定位标签驱动自动 port-forward。想深入了解使用流程可参考 docs/README.md 与 docs/getting_started/quick-start.md代理镜像构建见 proxies/mitmproxy/。掌握这套注解机制后你就能读懂 Kubetap 每一次外科手术留下的痕迹并放心地随时还原现场。【免费下载链接】kubetapKubectl plugin to interactively proxy Kubernetes Services with ease项目地址: https://gitcode.com/gh_mirrors/ku/kubetap创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表