Why we need it
云原生应用的开发相比传统应用存在以下问题:
- 开发的自测反馈链路比较长:写代码 -> 编译 -> 构建镜像 -> 更新集群容器镜像 -> 等待 Pod 重建
- 多人共同开发同一个服务时容易冲突
How to solve
使用云原生开发工具 KubeVPN ,将远端集群流量代理到本地,在本地开发云上应用!!!
How it works
流量转发
流量转发方式,代码只需要在本地运行起来,将集群访问开发中应用的流量导向本地
支持多人协作
思路:让请求带上特定的请求头,根据不同的请求头将流量导向不同开发者的本地机器或原始服务
前提:需要服务间支持 header 透传,一般使用 tracing 技术
方案
How to use
Kubevpn
注意,如果指定 k8s 无法访问 docker.io 镜像仓库,需要手动从 docker.io(docker.io/naison/kubevpn:v1.1.29) 上拉取镜像,再把镜像推送到指定环境上并在命令行的 --image 参数中指明所要使用的镜像
kubevpn proxy deployment/my-server --headers user=naison -n default --kubeconfig ~/.kube/config
参数说明:
- --workloads: 指定要开发的工作负载
- --image: 指定 kubevpn 镜像,默认会使用 dockerhub 上的 kubevpn 镜像
- --headers: 指定到转到本地的流量所需要带的 header
- -n: k8s namespace
- --kubeconfig: k8s kubeconfig
Goland 运行本地配置参考:
在项目和工具上为上述开发流程的规范化提供支持 :
- 前端可能会将自定义的 header 丢弃掉,需要让前端透传指定 header
Q&A
本地运行程序缺少某些环境变量怎么办?
可以使用 kubectl exec 进入原始的业务容器中,使用 env 命令获取业务容器中的环境变量,再把它们导向本地