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