求助: kube proxy 无法转发流量


我按照官方教程在三个节点的 ubuntu 机器上搭建了一个 k8s 集群,并且运行了一个 demo 服务,运行了一个 rc 服务,这个 rc 服务有俩个副本,分别落在其中的俩台服务器上面, service 采用的是 nodeport 的方式。创建完 rc,service 服务后可以查看 service 的详细情况如下:

屏幕快照_2016-07-05_下午9.24_.17_.png


这里可以看到这个服务映射到了主机的32717端口,并且查看到落在134, 135主机上,我分别 curl 134:32717
135:32717(是一个 web 应用)都正确的返回结果,但是curl 136:32717的时候,就得不到返回结果,136这台主机上面没有相应的 pod,但是我查看 kube-proxy 是有在32717端口的截图如下:

屏幕快照_2016-07-05_下午9.27_.28_.png


按照 k8s 的 service 定义,我想我访问只要运行了 kube-proxy 的主机 node 都是可以将流量转发到对应的 pod 的,如今为什么不可以?求教大家,谢谢
已邀请:

beyondblog - 标准90后有为青年

赞同来自:


136这台机器kube-proxy 启动正常嘛?

如果没有异常就看下 iptables 是否正确是否有安全策略给 block 了

ɡōōd洋

赞同来自:


楼主解决了没,我遇到同样的问题,还是说kube-proxy只能转发本机的pod

xiaolunsanguo - 京东商城-基础平台部-JDOS团队

赞同来自:


你可以做这样一个实验,你的这个demo服务在启动时候为自己生成一个uuid,然后访问该服务时返回该uuid,这样你就可以确定你访问的是哪一个容器了。

我直接说下我的猜测和判断。134上通过32717访问的demo服务,仅仅只是访问的134上的容器,而并没有通过kube-proxy访问到135上的容器。根本的原因在于134上的kube-proxy到135上的容器的ip的网路不通(即134上不能直接通过curl135上容器的ip访问到)。
这也同样解释了curl136上的32717不能访问的原因。因为136上的kube-proxy无法访问到134/135上的容器,所以没法将请求转发。
大致猜测是这种问题。你可以试着延这个思路解决下。如果不是这个原因,可以继续@我。一起再分析。

要回复问题请先登录注册