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