我曾尝试在 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 查找时它会中止或阻止。