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

2020-07-28 02:37:13 +08:00
 Weixk

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

2844 次点击
所在节点    问与答
14 条回复
amrom
2020-07-28 04:09:57 +08:00
今天看书发现有个方案可以解决你的问题,k8s 可以代理“遗留系统”,就是空 service,没有具体的 pod,只是代理端口用,放你这里貌似可以解决问题,我还在验证,蹲一手更好方案
amrom
2020-07-28 04:14:36 +08:00
wenbinwu
2020-07-28 06:19:14 +08:00
自定义 EurekaInstanceConfigBean setInstanceId ?
wenbinwu
2020-07-28 06:19:27 +08:00
setHostname ^^
Weixk
2020-07-28 09:38:09 +08:00
@wenbinwu 这样生产环境和开发环境用的代码就变得有差异了,而且集群内部要被外部访问到还得给每个服务开 service
asilin
2020-07-28 09:38:48 +08:00
1. 如果本地服务运行在 k8s 集群节点上,那么本地服务是可以直接访问 Pod IP 的;
2. 如果本地服务没有运行在 k8s 集群节点上,那么有两种解决方案:
- 将这个节点加入到 k8s 集群中,并设置 taint 不运行任何 Pod;
- 本地服务所在主机使用 iptables 进行透明代理

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

https://github.com/telepresenceio/telepresence
asilin
2020-07-28 13:36:54 +08:00
@Weixk 是的,我们是在路由器上面做的透明转发,所以无所谓本地服务的操作系统。
vcode
2020-07-28 14:51:19 +08:00
我们的方案是在服务上架个 vpn,本地流量进 vpn 再转发进 pod 服务里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693604

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX