如何从同一项目中的另一个Kubernetes集群调用Kubernetes集群公开的服务

时间:2015-07-27 21:59:53

标签: google-cloud-platform kubernetes google-kubernetes-engine

我有两个服务,群集K1中的S1和群集K2中的S2。它们有不同的硬件要求。服务S1需要与S2通信。

出于安全原因,我不想公开S2的公共IP。在K2集群上使用NodePorts进行网络负载平衡的计算实例可以灵活地解决,因为每次在K2中添加/删除节点时,我都必须在目标池中添加/删除K2的计算实例。 / p>

是否有类似" service-selector"用于自动更新目标池?如果没有,那么这个用例还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:11)

我可以考虑通过几种方式在连接到同一GCP专用网络的多个群集中访问服务:

  1. 所有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额外工作有明显的缺点,但很简单。

  2. 在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。设置起来有点困难,但具有更好的缩放属性。

  3. 正如您所看到的,两种解决方案都不是那么优雅。正在讨论如何在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上运行的服务。