我正在尝试访问一个运行在Openshift吊舱中的Flask服务器。
为此,我创建了如下服务。
$ oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-web-app ClusterIP 172.30.216.112 <none> 8080/TCP 8m
$ oc describe svc my-web-app
Name: my-web-app
Namespace: neo4j-sys
Labels: app=my-web-app
Annotations: openshift.io/generated-by=OpenShiftNewApp
Selector: app=my-web-app,deploymentconfig=my-web-app
Type: ClusterIP
IP: 172.30.216.112
Port: 8080-tcp 8080/TCP
TargetPort: 8080/TCP
Endpoints: 172.20.203.104:5000,172.20.49.150:5000
Session Affinity: None
Events: <none>
1)首先,我从一个
豆荚ping到另一个豆荚并得到响应。
(app-root) sh-4.2$ ping 172.20.203.104
PING 172.20.203.104 (172.20.203.104) 56(84) bytes of data.
64 bytes from 172.20.203.104: icmp_seq=1 ttl=64 time=5.53 ms
64 bytes from 172.20.203.104: icmp_seq=2 ttl=64 time=0.527 ms
64 bytes from 172.20.203.104: icmp_seq=3 ttl=64 time=3.10 ms
64 bytes from 172.20.203.104: icmp_seq=4 ttl=64 time=2.12 ms
64 bytes from 172.20.203.104: icmp_seq=5 ttl=64 time=0.784 ms
64 bytes from 172.20.203.104: icmp_seq=6 ttl=64 time=6.81 ms
64 bytes from 172.20.203.104: icmp_seq=7 ttl=64 time=18.2 ms
^C
--- 172.20.203.104 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6012ms
rtt min/avg/max/mdev = 0.527/5.303/18.235/5.704 ms
但是,当我尝试curl
时,它没有响应。
(app-root) sh-4.2$ curl 172.20.203.104
curl: (7) Failed connect to 172.20.203.104:80; Connection refused
(app-root) sh-4.2$ curl 172.20.203.104:8080
curl: (7) Failed connect to 172.20.203.104:8080; Connection refused
2) 之后,我尝试从一个pod访问集群IP。在这种情况下,ping和curl
都不可访问。
(app-root) sh-4.2$ ping 172.30.216.112
PING 172.30.216.112 (172.30.216.112) 56(84) bytes of data.
From 172.20.49.1 icmp_seq=1 Destination Host Unreachable
From 172.20.49.1 icmp_seq=4 Destination Host Unreachable
From 172.20.49.1 icmp_seq=2 Destination Host Unreachable
From 172.20.49.1 icmp_seq=3 Destination Host Unreachable
^C
--- 172.30.216.112 ping statistics ---
7 packets transmitted, 0 received, +4 errors, 100% packet loss, time 6002ms
pipe 4
(app-root) sh-4.2$ curl 172.30.216.112
curl: (7) Failed connect to 172.30.216.112:80; No route to host
请告诉我哪里出错了。为什么上面的情况#1,#2失败。如何访问集群IP服务。
我对服务和访问服务完全陌生,因此我可能缺少一些基础知识。
我回答了其他问题:我如何通过ClusterIP 1访问Kubernetes服务。但是,这对Nodeport
没有帮助。
根据Graham Dumpleton的以下评论进行更新,以下是我的观察。
这是我在pods中运行的Flask服务器日志。
* Serving Flask app "wsgi" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [14/Nov/2019 04:54:53] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [14/Nov/2019 04:55:05] "GET / HTTP/1.1" 200 -
你的pod是在pod 8080上监听外部接口吗?
如果我正确理解问题,我在这里的意图只是通过集群IP服务在pod之间进行通信。我不是在寻找从外部接口(其他项目或通过Web URL作为负载均衡器服务)访问pod
如果你进入吊舱,你能做卷曲$HOSTNAME:8080吗?
是的,如果我以localhost
或127.0.0.1
的身份运行,我会从我按预期运行它的同一个pod获得响应。
(app-root) sh-4.2$ curl http://127.0.0.1:5000/
Hello World!
(app-root) sh-4.2$ curl http://localhost:5000/
Hello World!
但是,如果我尝试使用我的网络应用程序
或服务IP
(clusterIP)。我没有得到回应。
(app-root) sh-4.2$ curl http://172.30.216.112:5000/
curl: (7) Failed connect to 172.30.216.112:5000; No route to host
(app-root) sh-4.2$ curl my-web-app:8080
curl: (7) Failed connect to my-web-app:8080; Connection refused
(app-root) sh-4.2$ curl http://my-web-app:8080/
curl: (7) Failed connect to my-web-app:8080; Connection refused
使用pod IP,我也没有得到回复。
(app-root) sh-4.2$ curl http://172.20.49.150:5000/
curl: (7) Failed connect to 172.20.49.150:5000; Connection refused
(app-root) sh-4.2$ curl 172.20.49.150
curl: (7) Failed connect to 172.20.49.150:80; Connection refused
我正在回答我自己的问题。以下是根据Graham Dumpleton的意见解决我的问题的方法。
最初,我用如下方式连接Flask服务器。
from flask import Flask
application = Flask(__name__)
if __name__ == "__main__":
application.run()
默认情况下,这会将服务器绑定到http://127.0.0.1:5000/
。
作为解析的一部分,我将绑定更改为0.0.0.0
如下所示
from flask import Flask
application = Flask(__name__)
if __name__ == "__main__":
application.run(host='0.0.0.0')
然后记录如下。
* Serving Flask app "wsgi" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
之后,Pod 通过集群 IP 成功通信。以下是服务详情(再增加一个豆荚)
$ oc describe svc my-web-app
Name: my-web-app
Namespace: neo4j-sys
Labels: app=my-web-app
Annotations: openshift.io/generated-by=OpenShiftNewApp
Selector: app=my-web-app,deploymentconfig=my-web-app
Type: ClusterIP
IP: 172.30.4.250
Port: 8080-tcp 8080/TCP
TargetPort: 5000/TCP
Endpoints: 172.20.106.184:5000,172.20.182.118:5000,172.20.83.40:5000
Session Affinity: None
Events: <none>
以下是成功的回应。
(app-root) sh-4.2$ curl http://172.30.4.250:8080 //with clusterIP which is my expectation
Hello World!
(app-root) sh-4.2$ curl http://172.20.106.184:5000 // with pod IP
Hello World!
(app-root) sh-4.2$ curl $HOSTNAME:5000 // with $HOSTNAME
Hello World!
我正在尝试使用三个虚拟机(Master–10.x.x.4、Node1–10.x.x.150、Node2–10.x.x.160)创建Kubernetes集群。 我能够通过此链接成功创建留言簿应用程序:http://kubernetes.io/v1.0/examples/guestbook/.我只对frontend-service.yaml做了一个更改:使用NodePort。我可以使用节点IP和端口号
我想通过postman在openshift项目上创建kafka connect连接器。但是当通过邮递员发送Post命令时,出现如下错误。在openshift中将pod公开为服务(通过postman进行交互)时,我们需要运行什么特定的命令?请指教。 您看到此页面的可能原因: 主机不存在。确保正确键入了主机名,并且存在与此主机名匹配的路由。 主机存在,但没有匹配的路径。检查URL路径是否键入正确,以及
我正在尝试使用入口公开部署,其中DeamonSet具有hostNetwork=true,这将允许我跳过额外的负载平衡器层,并直接在Kubernetes外部节点IP上公开我的服务。很遗憾,我无法从外部网络访问入口控制器。 我在GCP上运行库伯内特斯版本1.11.16-gke.2。 我将刷新群集设置为: 我运行部署: 然后我创建服务: 和入口资源: 我获取节点外部IP: 检查入口是否正在运行: 然后尝
我是的新手,虽然我阅读了基本文档,并尝试部署一个简单的Spring BootAPI,但我可能缺少很多东西 我已经将API部署为.jar文件,然后安装并使用以下命令推送它: 然后使用docker命令启动API: 当我访问localhost:7777/hello时,我得到了所需的响应 这是我的 根据这个应答的命令,发布这个命令以获取 因此,我使用运行它,得到了这个错误 如果我设法获得,我是否能够访问它
我希望我的UI通过我的节点服务器获取数据,其中每个都是一个独立的容器。如何使用docker-compose文件连接它们? 我有三个运行mongodb、node server和oracle jet for ui容器,我想通过oraclejet ui访问node API,通过node访问mongo db,所以我定义了这个Docker-Compose。mongo和node工作之间的链接。
我们正在建立一个测试云OpenShift Origin,它是我们使用openShift anable playbook创建的。我们按照留档在:https://docs.openshift.com/container-platform/latest/install_config/install/advanced_install.html 我们没有做任何关于openShift注册表或路由器的特别事情。