为什么我不能通过其IP访问我的Kubernetes服务?

时间:2015-09-16 20:51:23

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

我在GKE上有一个Kubernetes服务如下:

$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         <none>
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.246.27
Port:           <unnamed>   80/TCP
NodePort:       <unnamed>   31683/TCP
Endpoints:      10.8.0.33:1337
Session Affinity:   None
No events.

我可以直接通过其中一个端点(10.8.0.21:1337)或通过节点端口(在我的情况下为10.240.251.174:31683)从VM访问服务。但是,如果我尝试访问10.11.246.27:80,我什么也得不到。我也尝试过端口1337和31683。

为什么我不能通过其IP访问服务?我需要防火墙规则吗?

1 个答案:

答案 0 :(得分:10)

服务IP是由kube-proxy管理的虚拟IP。因此,为了使该IP有意义,客户端还必须是kube-proxy&#34; overlay&#34;的一部分。网络(运行kube-proxy,指向相同的apiserver)。

GCE / GKE上的Pod IP由GCE Routes管理,这更像是&#34; underlay&#34;网络中的所有虚拟机。

有几种方法可以从群集外部访问非公共服务。 Here他们更详细,但简而言之:

  1. 为群集服务创建堡垒GCE路线。
  2. 在您想要访问群集服务的任何位置安装群集的kube-proxy。