云原生应用开发实践

1,080 阅读2分钟

Why we need it

云原生应用的开发相比传统应用存在以下问题:

  • 开发的自测反馈链路比较长:写代码 -> 编译 -> 构建镜像 -> 更新集群容器镜像 -> 等待 Pod 重建
  • 多人共同开发同一个服务时容易冲突

How to solve

使用云原生开发工具 KubeVPN ,将远端集群流量代理到本地,在本地开发云上应用!!!

How it works

流量转发

流量转发方式,代码只需要在本地运行起来,将集群访问开发中应用的流量导向本地

支持多人协作

思路:让请求带上特定的请求头,根据不同的请求头将流量导向不同开发者的本地机器或原始服务

前提:需要服务间支持 header 透传,一般使用 tracing 技术

方案

原理图.svg

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 运行本地配置参考:

image.png

在项目和工具上为上述开发流程的规范化提供支持 :

  • 前端可能会将自定义的 header 丢弃掉,需要让前端透传指定 header

Q&A

本地运行程序缺少某些环境变量怎么办?

可以使用 kubectl exec 进入原始的业务容器中,使用 env 命令获取业务容器中的环境变量,再把它们导向本地