我创建了一个在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 ,它确实有效。但
因此,跨节点与serviceIP的通信失败。这是kube v1.2的问题吗?
注意:将在创建服务时指定服务的ClusterIP。
答案 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可能有所帮助。