我正在我的新项目中探索服务发现的选项。
所以它是这样的:我有多个裸机 Kubernetes (Linux) 机器,没有云提供商。我有多个 Kubernetes 集群,对于这个例子,我们将它们命名为Cluster-1和Cluster-2。
现在假设我有 10 个微服务(spring boot),我想将它们部署在两个集群中。所以两个集群中的所有 10 个微服务。
我需要的服务发现机制是这样的:
如果来自Cluster-1的微服务ms- 1需要调用另一个微服务ms-2 ,那么如果ms-2在Cluster-1中启动并且健康,我希望通信首选项在同一个集群中。但是,如果ms-2未在Cluster-1中启动/运行,则来自ms-1 (Cluster-1) 的调用必须转到ms-2 (Cluster-2)。
为了在多集群地理网络中发挥作用,显然必须支持这一点。
我无法通过原生 Kubernetes 提供的服务发现机制来实现这一点。
我尝试使用 Istio,但发现它仅使用原生 Kubernetes 服务发现机制。因此,Istio 就不存在了。
我决定尝试Consul并使用 NodePort类型的 Kubernetes 服务部署我的微服务,希望 Consul 能够解析集群间和集群内目标服务的主机和 nodePort。手指交叉!!
现在我主要有两个问题:
我是否需要在每个微服务中使用 spring-cloud-consul 才能与 Consul 交谈并获取目标服务的主机:端口?
我看到 Linkerd 确实提供了一些功能,微服务可以通过这些功能与 Linkerd 对话,Linkerd 与 Consul 对话并代表 spring-cloud-consul 客户端解析服务。
我什至看到了这篇文章--> https://discourse.linkerd.io/t/linkerd-with-springboot/638
我想知道更多关于如何做到的细节。
我需要领事吗?Linkerd 是否为我的要求提供解决方案?如果是,请赐教如何?
感谢您阅读一个很长的问题。我希望我能得到一些及时和积极的指导来继续我的项目。