V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Weixk
V2EX  ›  问与答

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

  •  
  •   Weixk · Jul 28, 2020 · 3501 views
    This topic created in 2112 days ago, the information mentioned may be changed or developed.

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

    Supplement 1  ·  Jul 28, 2020
    最后是使用了阿里开源的 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 replies    2020-07-28 14:51:19 +08:00
    amrom
        1
    amrom  
       Jul 28, 2020
    今天看书发现有个方案可以解决你的问题,k8s 可以代理“遗留系统”,就是空 service,没有具体的 pod,只是代理端口用,放你这里貌似可以解决问题,我还在验证,蹲一手更好方案
    wenbinwu
        3
    wenbinwu  
       Jul 28, 2020
    自定义 EurekaInstanceConfigBean setInstanceId ?
    wenbinwu
        4
    wenbinwu  
       Jul 28, 2020
    setHostname ^^
    Weixk
        5
    Weixk  
    OP
       Jul 28, 2020
    @wenbinwu 这样生产环境和开发环境用的代码就变得有差异了,而且集群内部要被外部访问到还得给每个服务开 service
    asilin
        6
    asilin  
       Jul 28, 2020
    1. 如果本地服务运行在 k8s 集群节点上,那么本地服务是可以直接访问 Pod IP 的;
    2. 如果本地服务没有运行在 k8s 集群节点上,那么有两种解决方案:
    - 将这个节点加入到 k8s 集群中,并设置 taint 不运行任何 Pod;
    - 本地服务所在主机使用 iptables 进行透明代理

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

    https://github.com/telepresenceio/telepresence
    asilin
        13
    asilin  
       Jul 28, 2020
    @Weixk 是的,我们是在路由器上面做的透明转发,所以无所谓本地服务的操作系统。
    vcode
        14
    vcode  
       Jul 28, 2020
    我们的方案是在服务上架个 vpn,本地流量进 vpn 再转发进 pod 服务里
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3014 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 07:16 · PVG 15:16 · LAX 00:16 · JFK 03:16
    ♥ Do have faith in what you're doing.