因为我之前用的是 eureka, nacos 之类的,另起一个 nacos 服务器,再起微服务,然后本地跑测试

但是如果切换到 k8s 环境该怎么办
如何将所有 app 打包部署到 k8s 集群中,我能理解,但是如果几个 app 我想要快速的测试下,本地 idea 直接起一下,debug 一下,也就是所有的微服务集群外起起来,但是我又要利用 k8s 的 service 让它们互相发请求,这该咋做啊

我就想到如果在工作中,一群开发都在 dev 上开发,然后要起起来测试,然后他们都 cicd 到本地 dev 的集群上在测试吗,如果想要本地快速测功能,或者单步调试该咋做啊
用 mock 吗,拖慢开发速度啊

本地 build 然后 push 到仓库上去覆盖吧,其实也不会很慢。本地 debug 就很麻烦了

我好奇实际工作怎么搞,每个开发都分配一个 dev 环境的命名空间,然后 push 测试自己的代码吗,而且如果微服务架构变复杂了,那不是更麻烦而且本地调试很重要吗,比如生产出啥问题,不得本地起起来一步步调试吗

这种情况就是很麻烦,要么 mock ,要么装一套环境自用远程 debug

看上面的需求描述,可以考虑阿里云的端云互联( Alibaba Cloud Toolkit ) help.aliyun.com/zh/edas/w1h7u7主要是从本地 Idea 里面安装 Alibaba Cloud Toolkit 插件,然后用了 SSH 代理或者使用 kubeconfig 的方式实现对 K8s 集群 Spring Cloud 服务进行访问的,按说 k8s service 也没问题。调试的时候,可以从本地 Idea 启动应用发起调用或者被 K8s 集群里面部署的 Spring Cloud 服务调用。3 年前就出来了这样的功能,鹅厂还在抄袭。

所以,想着有些公司,不管啥大大小小的项目都上微服务,就觉得很脑残。本来业务功能简单,没有几个访问量的应用,用单体做一把梭就能搞定的事,给你拆的乱七八糟,坑开发、坑测试、坑交付、坑运维……

工作后的两个项目都是上云的,实际工作是开发环境一整套环境,不区分命名空间,谁要测试自己 deploy 自己的镜像上去测试。在某个群里面通知一下就行了。现在这个项目会每天全量的 deploy 一遍主干的代码,所以其实还好。

本地调试不重要吧,我工作三年从来没用过本地调试。打足日志就行了,本地可以写一些小 demo 验证一下猜想。 实际上,线上也不存在给你 debug 的环境,一大堆复杂的依赖和多线程在上面跑,你单步又能调出啥呢。

提供一个思路:首先做好生产系统和测试环境的隔离,然后在测试环境部署一个网络代理软件,需要本地 debug 的时候,就通过代理加入到测试环境

首先如果你的微服务每次都得全部拉起来,才能测试的话,那得重新考虑一下这个架构。本地的话,几种方法- 搞个 kind, k3d 这种本地集群,部署到上面测试。- 用 www.telepresence.io/ 把远程的流量拦下来导入到你本地上面

直接通过 nodeport 形式把 k8s 服务开放即可

本地调试可以用 kt connect 或者 telepresence ,代理本机与 k8s 的 service ip 互通。

kubevpn 可以试试?

将你需要的服务,多部署一份,通过 nodeport 形式把 k8s 服务。并且本地跨模块调用时指定 serviceName

telepresence 或者 Nocalhost

这种最常见的情况不是 k8s 集群使用外部数据库吗 kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors修改 service 配置,让其直接访问到你本地。但是如果本地服务还需要继续调用 k8s 中其他服务的话可能又有些问题,还需要改其他配置。想想还有点爆炸

接你的方法还可以用 kt-connect 把远程流量导入本地测试 github.com/alibaba/kt-connect

可以本地指定服务发现的 ip 和端口. 对应的配置项是 spring.cloud.nacos.discovery.ip/port. 然后配置 k8s 内服务可以和本地指定的 ip 端口互通就可以. 这样本地只需要启动需要调试的服务也可以直接调用 k8s 内服务了.

为啥感觉大家都是在提供自己的想法,也就是之前基本没遇到过这种情况,也就是大家都没见过全面云原生的公司吗....

目前我们的解决方案是通过 openvpn ,具体可以搜索一下; k8s 集群可以使用 openvpn 打通本地开发电脑和 k8s 集群之间的通信,这样本地使用 openvpn 就可以连接到集群进行本地调试,楼上说的阿里开源 kt-connect 也可以,但是因为我们开发环境没有配置 https ,所以没办法通过 kt-connect 直接连接集群

试试阿里的 kt-connect