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

203 天前
 wencaiwulue

为什么需要 KubeVPN ?

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

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

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

核心功能全景

1. 集群网络直连

kubevpn connect

执行后即可:

➜ curl productpage:9080 # 直接访问集群服务
<!DOCTYPE html>
<html>...</html>

2. 智能流量拦截

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

kubevpn proxy deployment/productpage --headers 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

启动的容器具备:

技术架构揭秘

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 已形成完整工具链:

加入开发者社区:

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

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

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

2676 次点击
所在节点    Kubernetes
12 条回复
R4rvZ6agNVWr56V0
203 天前
用 Lens 这类的 GUI 的集群管理工具不就可以了
HSn0918
203 天前
看介绍,对我平时本地调试很有用
DefoliationM
203 天前
你说得对,但是 tailscale 会出手
https://github.com/tailscale/tailscale/tree/main/k8s-operator
DefoliationM
203 天前
@DefoliationM https://tailscale.com/kb/1185/kubernetes
更完美的生态,随时随地通过 tsnet 可访问。
wencaiwulue
202 天前
@GeekGao 这两种是不同的场景哈,lens 是用来可视化的,kubevpn 是用来打通容器网络的。并且可以拦截服务流量到本地电脑,lens 是无法实现的哈。欢迎体验体验
wencaiwulue
202 天前
@HSn0918 GO GO GO ,欢迎提 commit 和 issue 哈 ~
wencaiwulue
202 天前
@DefoliationM 嗯,看了一下 tailscale 在 k8s 中的部署,的确可以从本地访问到集群网络哈,不过我好像没有看到可以拦截流量到本地的操作哈(不知道是不是看漏了)。并且 kubevpn 还提供 service mesh 的功能,多人可以同时拦截同一个服务的流量。此外 kubevpn 提供了更加丰富的功能,比如通过跳板机访问 k8s 集群,开发模式,克隆模式哈。这两个工具的侧重场景是不同的哈。欢迎体验看看。PS: 项目中其实有用到 tailscale 的部分功能。😂
R4rvZ6agNVWr56V0
202 天前
@wencaiwulue 拦截服务流量到本地电脑,是啥概念? port forwarding ? 如果是的话,Lens 也是支持的
retanoj
201 天前
拦截流量这事儿要看适用性。。
比如团队里我们希望每一个人通过代理去访问集群,但我们不希望每个人都有权限劫持流量到本地
wencaiwulue
201 天前
@GeekGao 是可以把一个服务的入流量,路由到本地哈,比如访问一个集群中的服务 `curl productpage:9080/health`,然后流量就会打到本地电脑的 9080 端口上,你的本地电脑启动服务对应的源码,就可以调试啦。可以看这里哈 https://www.kubevpn.cn/zh/docs/functions/reverse_proxyhttps://www.kubevpn.cn/zh/docs/architecture/proxy
wencaiwulue
201 天前
@retanoj 这个权限部分可以考虑和 kubeconfig 的 role 考虑起来哈。如果想实现这样的功能,可以把 kubeconfig 中的 "update deployment/xxx" 的权限去掉,只有一个 get deployment 的权限。这样就可以实现你说的功能了哈。
wencaiwulue
201 天前
@GeekGao 不是 port-forward 哈,port-forward 还是本地访问集群资源。是可以拦截流量到本地的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1113453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX