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

tma*_*dry 7 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.
Run Code Online (Sandbox Code Playgroud)

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

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

CJ *_*len 10

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

GCE/GKE上的Pod IP由GCE Routes管理,这更像是网络中所有VM的"底层".

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

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