无法访问来宾节点上的 Kubernetes 服务

无法访问来宾节点上的 Kubernetes 服务

我曾尝试在 Kubernetes Github 存储库中运行留言簿示例,但无法从本地主机访问此服务。我的测试环境由 CloudStack 配置的两台虚拟机(装有 CentOS7)组成,并在其上安装了 OpenShift Origin。以下是服务列表:

    [root@openshift-master amd64]# ./oc get svc
NAME              CLUSTER-IP       EXTERNAL-IP   PORT(S)                   AGE
docker-registry   172.30.39.251    <none>        5000/TCP                  1d
guestbook         172.30.55.125    nodes         3000/TCP                  56m
kubernetes        172.30.0.1       <none>        443/TCP,53/UDP,53/TCP     1d
redis-master      172.30.24.94     <none>        6379/TCP                  1h
redis-slave       172.30.132.250   <none>        6379/TCP                  1h
router            172.30.33.117    <none>        80/TCP,443/TCP,1936/TCP   1d

暴露的服务是guestbook,下面是guestbook服务的描述:

[root@openshift-master amd64]# ./oc describe svc guestbook
Name:           guestbook
Namespace:      default
Labels:         app=guestbook
Selector:       app=guestbook
Type:           NodePort
IP:         172.30.55.125
Port:           <unset> 3000/TCP
NodePort:       <unset> 30642/TCP
Endpoints:      172.17.0.6:3000,172.17.0.7:3000,172.17.0.8:3000
Session Affinity:   None
No events.

如果我做:

curl 172.30.55.125:3000

它只在承载留言簿 pod 的节点、集群中的其他节点和我的主机(192.168.1.2)上起作用,但它不起作用。

我打开了 CloudStack 中的所有端口,否则我无法 ssh 节点,并且在节点中我设置了以下防火墙规则:

firewall-cmd --permanent --zone=public --add-port=30642/tcp

30642 是 NodePort,这是从集群外访问它的必需端口。您知道如何解决吗?提前致谢。

答案1

curl 172.17.0.6:3000(即每个Endpoints地址)应该可直接从每个集群节点使用。如果不起作用,则集群网络设置不正确。这可能包括任何过滤从一个节点发送到另一个节点的数据包的防火墙或 SDN。

172.30.55.125:3000应该在每个集群节点的列表中都有一个条目iptables,由每个集群节点上的本地kube-proxy守护程序维护。如果 curl 远程端点有效但使用服务虚拟 IP 和端口失败,则可能是它kube-proxy不起作用。检查其 iptables 条目、其进程状态及其日志文件。

最后,有可能留言簿应用程序确实正在接收连接,但是在尝试注定失败的反向 DNS 查找时它会中止或阻止。

相关内容