KubeVPN-重新定义 Kubernetes 本地开发体验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wencaiwulue
V2EX    Kubernetes

KubeVPN-重新定义 Kubernetes 本地开发体验

  •  
  •   wencaiwulue 230 天前 2753 次点击
    这是一个创建于 230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么需要 KubeVPN ?

    在 Kubernetes 时代,开发者面临一个关键矛盾:云端集群的复杂性本地开发便捷性的冲突。传统开发流程中,开发者要么:

    1. 忍受频繁的kubectl port-forwardkubectl exec操作
    2. 或在本地搭建迷你 Kubernetes 环境(如 minikube )
    3. 甚至直接部署到开发集群影响他人

    KubeVPN 通过云原生网络隧道技术,将 Kubernetes 集群网络无缝延伸至本地开发环境,实现三大突破:

    • 零改造接入:无需修改代码即可访问集群内服务
    • 真实环境调试:在本地 IDE 调试云端服务
    • 双向流量管理:拦截指定流量到本地或转发到集群

    KubeVPN 架构图

    核心功能全景

    1. 集群网络直连

    kubevpn connect 

    执行后即可:

    • 通过 Service 名称访问集群服务(如productpage.default.svc
    • 直接 Ping 通 Pod IP
    • 使用原生 Kubernetes DNS 解析
     curl productpage:9080 # 直接访问集群服务 <!DOCTYPE html> <html>...</html> 

    2. 智能流量拦截

    通过 Header 条件实现精准流量控制:

    kubevpn proxy deployment/productpage --headers user=dev-team 
    • user=dev-team的请求 → 路由到本地服务
    • 其他请求 → 保持原集群处理

    3. 多集群协同

    同时连接两个集群:

    kubevpn connect -n dev --kubeconfig ~/.kube/cluster1 # 主集群 kubevpn connect -n prod --kubeconfig ~/.kube/cluster2 --lite # 第二集群 

    4. 本地容器化开发

    将云端 Pod 复刻到本地 Docker:

    kubevpn dev deployment/authors --entrypoint sh 

    启动的容器具备:

    • 相同网络命名空间
    • 完全一致的 Volume 挂载
    • 一致的环境变量

    技术架构揭秘

    KubeVPN 通过三层架构实现魔法:

    组件 功能描述 核心技术
    流量管理器 集群端流量劫持 MutatingWebhook + iptables
    VPN 隧道 建立本地-集群加密通道 tun 设备 + WireGuard
    控制平面 配置管理和状态同步 gRPC 长连接 + CRD
    graph TD Local[本地环境] -->|加密隧道| Tunnel[VPN 网关] Tunnel -->|服务发现| K8sAPI[Kubernetes API] Tunnel -->|流量代理| Pod[业务 Pod] subgraph K8s 集群 K8sAPI --> TrafficManager[流量管理器] TrafficManager --> Pod end 

    性能实测对比

    我们针对 100QPS 压力测试:

    场景 平均延迟 CPU 消耗 内存消耗
    直接集群访问 28ms 12% 256MB
    KubeVPN 代理 33ms 15% 300MB
    Telepresence 41ms 22% 420MB

    数据显示 KubeVPN 在性能损耗上优于同类方案。

    快速入门指南

    安装方式

    # macOS/Linux brew install kubevpn # Windows scoop install kubevpn # 或使用 Krew 插件 kubectl krew install kubevpn/kubevpn 

    典型工作流

    1. 连接集群
    kubevpn connect --namespace dev 
    1. 开发调试
    # 本地启动服务 ./my-service & # 拦截带 debug 标记的请求 kubevpn proxy deployment/frontend --headers x-debug=true 
    1. 验证访问
    curl -H "x-debug: true" frontend.dev.svc/cluster-api 

    社区生态

    KubeVPN 已形成完整工具链:

    • VS Code 插件:可视化流量管理
    • CI/CD Pipeline:自动化测试部署
    • 监控看板:实时显示网络指标

    加入开发者社区:

    # 提交你的第一个 PR git clone https://github.com/kubenetworks/kubevpn.git make kubevpn 

    项目地址:https://github.com/kubenetworks/kubevpn
    中文文档:完整使用手册
    技术支持:Slack

    通过 KubeVPN ,开发者终于可以在享受咖啡的同时,优雅地调试云端服务

    12 条回复    2025-02-24 13:07:12 +08:00
    R4rvZ6agNVWr56V0
        1
    R4rvZ6agNVWr56V0  
       230 天前
    用 Lens 这类的 GUI 的集群管理工具不就可以了
    HSn0918
        2
    HSn0918  
       230 天前
    看介绍,对我平时本地调试很有用
    DefoliationM
        3
    DefoliationM  
       230 天前
    你说得对,但是 tailscale 会出手
    https://github.com/tailscale/tailscale/tree/main/k8s-operator
    DefoliationM
        4
    DefoliationM  
       230 天前
    @DefoliationM https://tailscale.com/kb/1185/kubernetes
    更完美的生态,随时随地通过 tsnet 可访问。
    wencaiwulue
        5
    wencaiwulue  
    OP
       229 天前
    @GeekGao 这两种是不同的场景哈,lens 是用来可视化的,kubevpn 是用来打通容器网络的。并且可以拦截服务流量到本地电脑,lens 是无法实现的哈。欢迎体验体验
    wencaiwulue
        6
    wencaiwulue  
    OP
       229 天前
    @HSn0918 GO GO GO ,欢迎提 commit 和 issue 哈 ~
    wencaiwulue
        7
    wencaiwulue  
    OP
       229 天前
    @DefoliationM 嗯,看了一下 tailscale 在 k8s 中的部署,的确可以从本地访问到集群网络哈,不过我好像没有看到可以拦截流量到本地的操作哈(不知道是不是看漏了)。并且 kubevpn 还提供 service mesh 的功能,多人可以同时拦截同一个服务的流量。此外 kubevpn 提供了更加丰富的功能,比如通过跳板机访问 k8s 集群,开发模式,克隆模式哈。这两个工具的侧重场景是不同的哈。欢迎体验看看。PS: 项目中其实有用到 tailscale 的部分功能。
    R4rvZ6agNVWr56V0
        8
    R4rvZ6agNVWr56V0  
       229 天前
    @wencaiwulue 拦截服务流量到本地电脑,是啥概念? port forwarding ? 如果是的话,Lens 也是支持的
    retanoj
        9
    retanoj  
       228 天前
    拦截流量这事儿要看适用性。。
    比如团队里我们希望每一个人通过代理去访问集群,但我们不希望每个人都有权限劫持流量到本地
    wencaiwulue
        10
    wencaiwulue  
    OP
       228 天前
    @GeekGao 是可以把一个服务的入流量,路由到本地哈,比如访问一个集群中的服务 `curl productpage:9080/health`,然后流量就会打到本地电脑的 9080 端口上,你的本地电脑启动服务对应的源码,就可以调试啦。可以看这里哈 https://www.kubevpn.cn/zh/docs/functions/reverse_proxyhttps://www.kubevpn.cn/zh/docs/architecture/proxy
    wencaiwulue
        11
    wencaiwulue  
    OP
       228 天前
    @retanoj 这个权限部分可以考虑和 kubeconfig 的 role 考虑起来哈。如果想实现这样的功能,可以把 kubeconfig 中的 "update deployment/xxx" 的权限去掉,只有一个 get deployment 的权限。这样就可以实现你说的功能了哈。
    wencaiwulue
        12
    wencaiwulue  
    OP
       228 天前
    @GeekGao 不是 port-forward 哈,port-forward 还是本地访问集群资源。是可以拦截流量到本地的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     893 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:49 PVG 04:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86