我有两个服务,群集K1中的S1和群集K2中的S2。它们有不同的硬件要求。服务S1需要与S2通信。
出于安全原因,我不想公开S2的公共IP。在K2集群上使用NodePorts进行网络负载平衡的计算实例可以灵活地解决,因为每次在K2中添加/删除节点时,我都必须在目标池中添加/删除K2的计算实例。 / p>
是否有类似" service-selector"用于自动更新目标池?如果没有,那么这个用例还有其他更好的方法吗?
答案 0 :(得分:11)
我可以考虑通过几种方式在连接到同一GCP专用网络的多个群集中访问服务:
所有k2服务的堡垒路径为k2:
找到k2群集的SERVICE_CLUSTER_IP_RANGE
。在GKE上,它将是集群描述输出中的servicesIpv4Cidr
字段:
$ gcloud beta container clusters describe k2
...
servicesIpv4Cidr: 10.143.240.0/20
...
添加高级路由规则以获取目的地为该范围的流量并将其路由到k2中的节点:
$ gcloud compute routes create --destination-range 10.143.240.0/20 --next-hop-instance k2-node-0
这将导致k2-node-0
代理来自专用网络的任何k2服务请求。这给予k2-node-0
额外工作有明显的缺点,但很简单。
在k1中的所有节点上安装k2的kube-proxy。
查看k2中任何节点上当前运行的kube-proxy:
$ ps aux | grep kube-proxy
... /usr/local/bin/kube-proxy --master=https://k2-master-ip --kubeconfig=/var/lib/kube-proxy/kubeconfig --v=2
将k2的kubeconfig文件复制到k1中的每个节点(比如/var/lib/kube-proxy/kubeconfig-v2
)并在每个节点上启动第二个kube-proxy:
$ /usr/local/bin/kube-proxy --master=https://k2-master-ip --kubeconfig=/var/lib/kube-proxy/kubeconfig-k2 --healthz-port=10247
现在,k1中的每个节点都在本地处理代理到k2。设置起来有点困难,但具有更好的缩放属性。
正如您所看到的,两种解决方案都不是那么优雅。正在讨论如何在Kubernetes中理想地使用这种类型的设置。您可以查看Cluster Federation提案文档(特别是Cross Cluster Service Discovery部分),并通过开放问题/发送PR加入讨论。
答案 1 :(得分:5)
GKE现在支持内部负载均衡器: https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing
它的主要用例是拥有一个未暴露给公共互联网的负载均衡器,因此可以从同一网络中的其他GCE虚拟机或其他GKE集群到达GKE上运行的服务。