【发布时间】:2020-07-21 10:07:36
【问题描述】:
我是微服务新手,想了解在 Kubernetes 上部署的微服务中实现以下行为的最佳方式是什么:
有 2 个不同的 K8s 集群。微服务 B 部署在两个集群上。
现在如果微服务 A 调用微服务 B 并且 B 的 pod 在集群 1 中不可用,那么调用应该转到集群 2 的 B。
我可以想象通过使用 Netflix OSS 来实现这个功能,但我在这里没有使用它。
另外,暂时搁置集群间通信,微服务之间应该如何通信?
我知道的一种方法是为每个微服务创建 NodePort 类型的 Kubernetes 服务,并在调用微服务中使用 IP 和 nodePort。
问题:如果有人删除了目标微服务的K8s Service怎么办?在重新创建 K8s 服务时,K8s 将随机分配一个新的 nodePort,然后我将不得不再次返回调用微服务并更改目标微服务的 nodePort。如何与 nodePort 解耦?
我研究了 kubedns,但似乎它只能在集群中工作。
我对 Istio 和 Kubernetes Ingress 的了解非常有限。这些是否提供了我正在寻找的东西?
抱歉,问题太长了。任何形式的指导都会非常有帮助。
【问题讨论】:
-
有什么理由有人不加评论就对这个问题投了反对票?
-
为什么不设置一个虚拟网络并允许某些子域使用端点 IP 地址相互通信。例如,在 Azure 世界中,为每个 kubernates 集群创建 vnet 和 vnet 网关,然后在它们之间创建一个连接。我们已经在 GCP 和 Azure 上做到了这一点。工作得很好。
标签: java spring-boot kubernetes microservices kubernetes-ingress