为什么我无法通过Kubernetes服务的IP访问它?

9

我在 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个回答

11

Service IPs是由kube-proxy管理的虚拟IP。因此,为了使该IP具有意义,客户端还必须是kube-proxy“覆盖”网络的一部分(运行kube-proxy,并指向相同的apiserver)。

GCE/GKE上的Pod IPs是由GCE Routes管理的,更像是网络中所有VM的“基础层”。

有几种方法可以从集群外部访问非公共服务。 这里 详细介绍了它们,但简而言之:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接