【发布时间】:2020-10-21 18:15:03
【问题描述】:
我想要什么
- ClusterA 有 PodA
- ClusterB 让 ServiceB 在
namespace:default中选择 PodB - 在 GKE(Google Kubernetes 引擎)中
ClusterA 中的 PodA 可以像 api.default.svc.cluster.clusterB 一样访问 clusterB 中的 ServiceB。
我尝试过的解决方案
- GKE 内部负载均衡器:https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing
- 有效。但我需要为每一项服务创建大量 ILB。
-
https://stackoverflow.com/a/31665248/3854890
- 我认为手动配置 kube-proxy 不是一个好的选择,因为我使用的是抢占式 VM。
- Kubefed:https://github.com/kubernetes-sigs/kubefed
- 我没有挖得太深。这就像操纵多个集群并公开它们。以及它在内部传达的信息。
- 梅什https://containo.us/maesh/
- 没有看到跨集群配置。
- Istio https://istio.io/latest/blog/2020/multi-cluster-mesh-automation/
- 对我来说有点复杂。不确定它是否适合这种情况。
感谢任何解决方案或想法!一个例子会更好。
【问题讨论】:
-
这两个kubernetes集群在同一个网络/平面网络,你想用serviceB.default.svc.cluster.local访问它吗?
-
我不确定您所尝试的是否容易实现。请告诉您是否有任何理由尝试使用 2 个集群?您是否考虑过使用带有额外节点池的单个集群?您可以使用
nodeSelector仅在其上生成特定的工作负载。如果您有兴趣,这里是链接:Kubernetes.io: Create a pod that gets scheduled to your chosen node -
@NadeemHussain 目前在同一个 GCP 项目和同一个区域。但我还需要访问 GCP 之外的其他集群。
serviceB.default.svc.cluster.local没问题。带集群名后缀会更好。 -
@DawidKruk 跨区域。跨云平台。所以更多的节点池对我不起作用。
-
如果我明白你的最终目标是从一个集群访问 svc 到另一个集群,并且这两个集群可以在不同的网络上,如果是这样,你为什么不通过内部负载均衡器 nginx 入口公开这些 svc . ,这样您就不必创建多个负载均衡器,只需入口 crd 将适用于每个 svc
标签: kubernetes google-cloud-platform microservices load-balancing google-kubernetes-engine