服务IP不能跨kubernetes中的节点访问

时间:2016-07-14 07:54:43

标签: azure proxy cluster-computing kubernetes

我创建了一个在Azure云中运行的kubernetes v1.2,其中包含一个主服务器(主服务器)和两个节点( Node1 Node2 ) 。我已经部署了 Nginx Tomcat 应用程序。这两个容器都部署在具有 RC 的单个 pod 中,并且每个容器都有 SERVICE

Nginx pod 部署在 Node1 中, Tomcat pod 部署在 Node2 中。现在来自 Node1 Nginx 正在尝试通过 tomcat的ServiceIP(clusterIP)访问 Tomcat 即可。但它无法到达。

  

Nginx serviceIP:10.16.0.2 Node1

     

Tomcat serviceIP:10.16.0.4 Node2

我从 Node2 尝试了 curl 10.16.0.4:8080 ,它确实有效。但 同样失败 卷曲:(52)来自服务器的空回复

因此,跨节点与serviceIP的通信失败。这是kube v1.2的问题吗?

注意:将在创建服务时指定服务的ClusterIP。

1 个答案:

答案 0 :(得分:0)

由于您可以从Node2到达群集IP,因此看起来服务选择器已正确定义。

Kube-proxy是监视服务并为端点创建iptable规则的组件。我会检查kube-proxy是否在Node1上正常运行。然后检查是否为您尝试访问的群集IP正确设置了iptable规则。 您可以使用iptables -L -t nat | grep namespace/servicename

查看这些内容

以下是一个例子:

bash-4.3# iptables -L -t nat | grep kube-system/heapster KUBE-MARK-MASQ all -- 172.168.16.182 anywhere /* kube-system/heapster: */ DNAT tcp -- anywhere anywhere /* kube-system/heapster: */ tcp to:172.168.16.182:8082 KUBE-SVC-BJM46V3U5RZHCFRZ tcp -- anywhere 192.168.172.66 /* kube-system/heapster: cluster IP */ tcp dpt:http KUBE-SEP-KNJP5BBKUOCH7NDB all -- anywhere anywhere /* kube-system/heapster: */

在这个例子中,我查找了在kube-system名称空间中运行的heapster。它显示集群ip为192.168.172.66 DNAT到端点172.168.16.182,即pods ip(您应该使用kubectl describe service中列出的端点进行交叉检查。

如果不存在,重启kube-proxy可能有所帮助。