我尝试从 Node2 使用 curl 10.16.0.4:8080,它可以工作。但同样的操作从 Node1 失败,并显示curl: (52) Empty reply from server 因此,节点间服务IP的通信失败。这是kube v1.2的问题吗?Nginx serviceIP: 10.16.0.2 Node1
Tomcat serviceIP: 10.16.0.4 Node2
注意:创建服务时必须指定服务的ClusterIP。
我尝试从 Node2 使用 curl 10.16.0.4:8080,它可以工作。但同样的操作从 Node1 失败,并显示curl: (52) Empty reply from server 因此,节点间服务IP的通信失败。这是kube v1.2的问题吗?Nginx serviceIP: 10.16.0.2 Node1
Tomcat serviceIP: 10.16.0.4 Node2
由于您能够从Node2访问集群IP,看起来服务选择器已经正确定义。
Kube-proxy是监视服务并为端点创建iptables规则的组件。我会检查Node1上的kube-proxy是否正常运行。然后检查是否为您正在尝试访问的集群IP正确设置了iptables规则。
您可以使用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: */
192.168.172.66
DNAT到端点172.168.16.182,这是Pod的IP(您应该与kubectl describe service
中列出的端点进行交叉检查)。