V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Weixk
V2EX  ›  问与答

SpringCloud 本地服务如何注册到 K8s 集群中

  •  
  •   Weixk · 2020-07-28 02:37:13 +08:00 · 2826 次点击
    这是一个创建于 1565 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。 目前想到的一种方案是 K8s 集群的 eureka 开放 NodePort, 本地服务注册上去。但是这里有个问题,K8s 中的微服务服务注册到 eureka 都是 Pod IP,本地服务注册上去是大网 IP 。虽然 K8s 中的服务能通过大网 IP 访问本地服务,但是本地服务无法通过 Pod IP 访问集群中的服务。请教一下,大家的解决方案是什么?

    第 1 条附言  ·  2020-07-28 23:47:27 +08:00
    最后是使用了阿里开源的 kt connect,满足了我的需求
    https://github.com/alibaba/kt-connect
    实际上在集群内外启动了双向代理转发消息,本地服务在 idea 中配置代理即可注册到集群中
    https://alibaba.github.io/kt-connect/#/en-us/guide/how-to-use-in-idea
    感谢各位建议,感谢 alibaba [点赞]
    14 条回复    2020-07-28 14:51:19 +08:00
    amrom
        1
    amrom  
       2020-07-28 04:09:57 +08:00
    今天看书发现有个方案可以解决你的问题,k8s 可以代理“遗留系统”,就是空 service,没有具体的 pod,只是代理端口用,放你这里貌似可以解决问题,我还在验证,蹲一手更好方案
    wenbinwu
        3
    wenbinwu  
       2020-07-28 06:19:14 +08:00
    自定义 EurekaInstanceConfigBean setInstanceId ?
    wenbinwu
        4
    wenbinwu  
       2020-07-28 06:19:27 +08:00
    setHostname ^^
    Weixk
        5
    Weixk  
    OP
       2020-07-28 09:38:09 +08:00
    @wenbinwu 这样生产环境和开发环境用的代码就变得有差异了,而且集群内部要被外部访问到还得给每个服务开 service
    asilin
        6
    asilin  
       2020-07-28 09:38:48 +08:00
    1. 如果本地服务运行在 k8s 集群节点上,那么本地服务是可以直接访问 Pod IP 的;
    2. 如果本地服务没有运行在 k8s 集群节点上,那么有两种解决方案:
    - 将这个节点加入到 k8s 集群中,并设置 taint 不运行任何 Pod;
    - 本地服务所在主机使用 iptables 进行透明代理

    目前我们采用的是 2 中的第二种方式。
    NoirStrike
        7
    NoirStrike  
       2020-07-28 09:41:51 +08:00
    意思是直接访问 pod? svc 有个东西叫 headless
    rrfeng
        8
    rrfeng  
       2020-07-28 09:49:55 +08:00 via Android
    service 还有个概念叫 externalName
    Weixk
        9
    Weixk  
    OP
       2020-07-28 10:01:30 +08:00
    @asilin 本地服务其实是指我的 idea 启动的微服务,用的是 windows 机器,想接入到我们的 k8s 集群中和其他服务能正常交互。
    asilin
        10
    asilin  
       2020-07-28 10:10:38 +08:00
    @Weixk 可以的,我们的本地服务有时也是在开发同学的机器上,这里的 iptables 只是举一个例子,对于 Mac 或者 Windows,应该也有相应的方案来实现同样的效果。
    Weixk
        11
    Weixk  
    OP
       2020-07-28 12:47:28 +08:00
    @asilin 比如,在 k8s 集群中的服务 pod ip 是 10.244.1.*,这时候本地服务调用这个 ip 是不通的。你的意思是通过 iptables 类似的工具将目的 ip 的请求转到集群内?
    baiyi
        12
    baiyi  
       2020-07-28 13:15:02 +08:00
    如果是调试,可是使用 telepresence,它会建立一个代理,转发集群内的请求,也让你本地的请求可以解析到集群里

    https://github.com/telepresenceio/telepresence
    asilin
        13
    asilin  
       2020-07-28 13:36:54 +08:00
    @Weixk 是的,我们是在路由器上面做的透明转发,所以无所谓本地服务的操作系统。
    vcode
        14
    vcode  
       2020-07-28 14:51:19 +08:00
    我们的方案是在服务上架个 vpn,本地流量进 vpn 再转发进 pod 服务里
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2789 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 152ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.