我有一些应用程序在常规的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访问计算节点服务?
由于
答案 0 :(得分:3)
Kubernetes希望群集中的任何内容都能够与其他所有内容交谈。 GKE通过advanced routing完成此操作。默认情况下,这允许同一网络上的GKE容器和GCE节点进行通信。这就是你可以直接打开容器的原因。
只有Kubernetes集群内才能访问ClusterIP。这些IP由iptables在Kubernetes节点上管理。这就是为什么您无法从GCE节点点击您的服务,但您可以从容器中点击它。
堡垒路由将所有流量发送到群集的子网到群集节点。然后,节点正确地路由流。创建多个具有相同优先级的多个节点的堡垒路由,以避免热点单个节点。
尝试使用群集的完整/ 14,您可以在容器引擎用户界面中的群集说明中找到它。