从计算引擎实例连接到容器服务clusterip

时间:2016-04-05 14:08:14

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

我有一些应用程序在常规的Compute Engine节点上运行。另外我有一个容器集群,我正在迁移应用程序。所有应用程序迟早都应该在Container Engine中,因此服务发现是直截了当的。 但是现在Compute Engine上的应用程序需要能够与Container Engine应用程序通信。 Container Engine应用程序都已注册为服务。 为了测试,我使用了“echoheaders”图像:

$ kubectl describe svc echoheaders
Name:                   echoheaders
Namespace:              default
Labels:                 app=echoheaders
Selector:               app=echoheaders
Type:                   ClusterIP
IP:                     10.115.249.140
Port:                   http    80/TCP
Endpoints:              10.112.1.3:8080
Session Affinity:       None
No events.

现在的问题是我只能通过10.112.1.3:8080直接从计算引擎节点访问pod服务,但不能通过其clusterip 10.115.249.140:80访问。这仅适用于实际的Compute Engine节点。

我已经尝试创建指向其中一个Container Engine节点的堡垒路线,但它仍然不起作用:

$ gcloud compute routes describe gke-cluster-1-services 
creationTimestamp: '2016-04-05T05:39:55.275-07:00'
description: Route to Cluster-1 service IP range
destRange: 10.115.240.0/20
id: '926323215677918452'
kind: compute#route
name: gke-cluster-1-services
network: https://www.googleapis.com/compute/v1/projects/infrastructure-1173/global/networks/infra
nextHopInstance: https://www.googleapis.com/compute/v1/projects/infrastructure-1173/zones/europe-west1-d/instances/gke-cluster-1-5679a61a-node-f7iu
priority: 500
selfLink: https://www.googleapis.com/compute/v1/projects/infrastructure-1173/global/routes/gke-cluster-1-services

在防火墙上,计算节点可以连接到任何。

任何人碰巧都有可能缺少的指针,以允许Compute Engine节点通过其ClusterIP访问计算节点服务?

由于

1 个答案:

答案 0 :(得分:3)

Kubernetes希望群集中的任何内容都能够与其他所有内容交谈。 GKE通过advanced routing完成此操作。默认情况下,这允许同一网络上的GKE容器和GCE节点进行通信。这就是你可以直接打开容器的原因。

只有Kubernetes集群内才能访问ClusterIP。这些IP由iptables在Kubernetes节点上管理。这就是为什么您无法从GCE节点点击您的服务,但您可以从容器中点击它。

堡垒路由将所有流量发送到群集的子网到群集节点。然后,节点正确地路由流。创建多个具有相同优先级的多个节点的堡垒路由,以避免热点单个节点。

尝试使用群集的完整/ 14,您可以在容器引擎用户界面中的群集说明中找到它。