如题。 目前想到的一种方案是 K8s 集群的 eureka 开放 NodePort, 本地服务注册上去。但是这里有个问题,K8s 中的微服务服务注册到 eureka 都是 Pod IP,本地服务注册上去是大网 IP 。虽然 K8s 中的服务能通过大网 IP 访问本地服务,但是本地服务无法通过 Pod IP 访问集群中的服务。请教一下,大家的解决方案是什么?
1
amrom 2020 年 7 月 28 日
今天看书发现有个方案可以解决你的问题,k8s 可以代理“遗留系统”,就是空 service,没有具体的 pod,只是代理端口用,放你这里貌似可以解决问题,我还在验证,蹲一手更好方案
|
2
amrom 2020 年 7 月 28 日
|
3
wenbinwu 2020 年 7 月 28 日
自定义 EurekaInstanceConfigBean setInstanceId ?
|
4
wenbinwu 2020 年 7 月 28 日
setHostname ^^
|
6
asilin 2020 年 7 月 28 日
1. 如果本地服务运行在 k8s 集群节点上,那么本地服务是可以直接访问 Pod IP 的;
2. 如果本地服务没有运行在 k8s 集群节点上,那么有两种解决方案: - 将这个节点加入到 k8s 集群中,并设置 taint 不运行任何 Pod; - 本地服务所在主机使用 iptables 进行透明代理 目前我们采用的是 2 中的第二种方式。 |
7
NoirStrike 2020 年 7 月 28 日
意思是直接访问 pod? svc 有个东西叫 headless
|
8
rrfeng 2020 年 7 月 28 日 via Android
service 还有个概念叫 externalName
|
10
asilin 2020 年 7 月 28 日
@Weixk 可以的,我们的本地服务有时也是在开发同学的机器上,这里的 iptables 只是举一个例子,对于 Mac 或者 Windows,应该也有相应的方案来实现同样的效果。
|
11
Weixk OP @asilin 比如,在 k8s 集群中的服务 pod ip 是 10.244.1.*,这时候本地服务调用这个 ip 是不通的。你的意思是通过 iptables 类似的工具将目的 ip 的请求转到集群内?
|
12
baiyi 2020 年 7 月 28 日
如果是调试,可是使用 telepresence,它会建立一个代理,转发集群内的请求,也让你本地的请求可以解析到集群里
https://github.com/telepresenceio/telepresence |
14
vcode 2020 年 7 月 28 日
我们的方案是在服务上架个 vpn,本地流量进 vpn 再转发进 pod 服务里
|