V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wganbleuthall
V2EX  ›  Kubernetes

springCloud 微服务 + K8s service discovery, 如何在集群外跑

  •  
  •   wganbleuthall · 220 天前 · 1707 次点击
    这是一个创建于 220 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 因为我之前用的是 eureka, nacos 之类的,另起一个 nacos 服务器,再起微服务,然后本地跑测试
    • 但是如果切换到 k8s 环境该怎么办
      • 如何将所有 app 打包部署到 k8s 集群中,我能理解,但是如果几个 app 我想要快速的测试下,本地 idea 直接起一下,debug 一下,也就是所有的微服务集群外起起来,但是我又要利用 k8s 的 service 让它们互相发请求,这该咋做啊
    • 我就想到如果在工作中,一群开发都在 dev 上开发,然后要起起来测试,然后他们都 cicd 到本地 dev 的集群上在测试吗,如果想要本地快速测功能,或者单步调试该咋做啊
      • 用 mock 吗,拖慢开发速度啊
    20 条回复    2023-09-21 19:26:37 +08:00
    mooyo
        1
    mooyo  
       220 天前
    本地 build 然后 push 到仓库上去覆盖吧,其实也不会很慢。本地 debug 就很麻烦了
    wganbleuthall
        2
    wganbleuthall  
    OP
       220 天前
    @mooyo 我好奇实际工作怎么搞,每个开发都分配一个 dev 环境的命名空间,然后 push 测试自己的代码吗,而且如果微服务架构变复杂了,那不是更麻烦
    而且本地调试很重要吗,比如生产出啥问题,不得本地起起来一步步调试吗
    HonovaSV
        3
    HonovaSV  
       220 天前 via Android
    这种情况就是很麻烦,要么 mock ,要么装一套环境自用远程 debug
    crsmk01
        4
    crsmk01  
       220 天前
    看上面的需求描述,可以考虑阿里云的端云互联( Alibaba Cloud Toolkit ) https://help.aliyun.com/zh/edas/w1h7u7
    主要是从本地 Idea 里面安装 Alibaba Cloud Toolkit 插件,然后用了 SSH 代理或者使用 kubeconfig 的方式实现对 K8s 集群 Spring Cloud 服务进行访问的,按说 k8s service 也没问题。
    调试的时候,可以从本地 Idea 启动应用发起调用或者被 K8s 集群里面部署的 Spring Cloud 服务调用。3 年前就出来了这样的功能,鹅厂还在抄袭。
    coolair
        5
    coolair  
       220 天前   ❤️ 1
    所以,想着有些公司,不管啥大大小小的项目都上微服务,就觉得很脑残。本来业务功能简单,没有几个访问量的应用,用单体做一把梭就能搞定的事,给你拆的乱七八糟,坑开发、坑测试、坑交付、坑运维……
    mooyo
        6
    mooyo  
       220 天前
    @wganbleuthall 工作后的两个项目都是上云的,实际工作是开发环境一整套环境,不区分命名空间,谁要测试自己 deploy 自己的镜像上去测试。在某个群里面通知一下就行了。现在这个项目会每天全量的 deploy 一遍主干的代码,所以其实还好。
    mooyo
        7
    mooyo  
       220 天前
    @wganbleuthall 本地调试不重要吧,我工作三年从来没用过本地调试。打足日志就行了,本地可以写一些小 demo 验证一下猜想。 实际上,线上也不存在给你 debug 的环境,一大堆复杂的依赖和多线程在上面跑,你单步又能调出啥呢。
    bringyou
        8
    bringyou  
       219 天前
    提供一个思路:首先做好生产系统和测试环境的隔离,然后在测试环境部署一个网络代理软件,需要本地 debug 的时候,就通过代理加入到测试环境
    dayeye2006199
        9
    dayeye2006199  
       219 天前   ❤️ 1
    首先如果你的微服务每次都得全部拉起来,才能测试的话,那得重新考虑一下这个架构。

    本地的话,几种方法
    - 搞个 kind, k3d 这种本地集群,部署到上面测试。
    - 用 https://www.telepresence.io/ 把远程的流量拦下来导入到你本地上面
    li24361
        10
    li24361  
       219 天前
    直接通过 nodeport 形式把 k8s 服务开放即可
    agzou
        11
    agzou  
       219 天前
    本地调试可以用 kt connect 或者 telepresence ,代理本机与 k8s 的 service ip 互通。
    fzdwx
        12
    fzdwx  
       219 天前
    kubevpn 可以试试?
    cryboy007
        13
    cryboy007  
       219 天前
    将你需要的服务,多部署一份,通过 nodeport 形式把 k8s 服务。并且本地跨模块调用时指定 serviceName
    mango88
        14
    mango88  
       219 天前
    telepresence 或者 Nocalhost
    litchinn
        15
    litchinn  
       219 天前
    这种最常见的情况不是 k8s 集群使用外部数据库吗
    https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors
    修改 service 配置,让其直接访问到你本地。
    但是如果本地服务还需要继续调用 k8s 中其他服务的话可能又有些问题,还需要改其他配置。想想还有点爆炸
    mightybruce
        16
    mightybruce  
       219 天前
    @dayeye2006199
    接你的方法
    还可以用 kt-connect 把远程流量导入本地测试
    https://github.com/alibaba/kt-connect
    sunshengkai27
        17
    sunshengkai27  
       219 天前
    可以本地指定服务发现的 ip 和端口. 对应的配置项是 spring.cloud.nacos.discovery.ip/port. 然后配置 k8s 内服务可以和本地指定的 ip 端口互通就可以.

    这样本地只需要启动需要调试的服务也可以直接调用 k8s 内服务了.
    wganbleuthall
        18
    wganbleuthall  
    OP
       219 天前
    为啥感觉大家都是在提供自己的想法,也就是之前基本没遇到过这种情况,也就是大家都没见过全面云原生的公司吗....
    Bigger8
        19
    Bigger8  
       219 天前
    目前我们的解决方案是通过 openvpn ,具体可以搜索一下; k8s 集群可以使用 openvpn 打通本地开发电脑和 k8s 集群之间的通信,这样本地使用 openvpn 就可以连接到集群进行本地调试,楼上说的阿里开源 kt-connect 也可以,但是因为我们开发环境没有配置 https ,所以没办法通过 kt-connect 直接连接集群
    besscroft
        20
    besscroft  
       219 天前
    试试阿里的 kt-connect
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2494 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:02 · PVG 00:02 · LAX 09:02 · JFK 12:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.