0

我正在我的新项目中探索服务发现的选项。

所以它是这样的:我有多个裸机 Kubernetes (Linux) 机器没有云提供商。我有多个 Kubernetes 集群,对于这个例子,我们将它们命名为Cluster-1Cluster-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。手指交叉!!

现在我主要有两个问题:

  1. 我是否需要在每个微服务中使用 spring-cloud-consul 才能与 Consul 交谈并获取目标服务的主机:端口?

    我看到 Linkerd 确实提供了一些功能,微服务可以通过这些功能与 Linkerd 对话,Linkerd 与 Consul 对话并代表 spring-cloud-consul 客户端解析服务。

    我什至看到了这篇文章--> https://discourse.linkerd.io/t/linkerd-with-springboot/638

    我想知道更多关于如何做到的细节。

  2. 我需要领事吗?Linkerd 是否为我的要求提供解决方案?如果是,请赐教如何?

感谢您阅读一个很长的问题。我希望我能得到一些及时和积极的指导来继续我的项目。

4

1 回答 1

0

听起来您正在尝试使用服务网格来解决此问题。如果是这样,Consul 可以通过其服务网格本地提供此功能。您不需要任何额外的软件。

您需要在每个 Kubernetes 集群中部署 Consul,并使用WAN Federation联合两个环境。集群联合后,您可以部署Mesh 网关(请参阅教程)以启用集群之间的服务到服务通信。然后在 L7配置中配置故障转移策略service-resolver,以便在本地实例不可用时将流量重新路由到备用集群。

我希望这有帮助。如果您需要更多详细信息,请告诉我。

于 2020-04-28T22:15:23.367 回答