OpenShift 路由 - 无法连接到远程主机:没有到主机的路由
OpenShift route - Unable to connect to remote host: No route to host
我已经在 OpenShift Origin 上部署了一个 grpc 服务 运行。这由 OpenShift 服务支持。该服务通过 OpenShift 路由公开。我正在尝试通过将容器端口 (50051) 映射到端口 8080 上的外部世界的服务和路由来使此 pod 可用。
该服务尝试公开的图像在其 Dockerfile 中包含:
EXPOSE 50051
路线如下:
- 服务端口:8080/TCP
- 目标端口:50051
在 DeploymentConfig 中,我指定端口:
ports:
- containerPort: 50051
protocol: TCP
但是,当我尝试通过路由和端口访问应用程序时,我得到(来自 Java)
java.net.NoRouteToHostException: No route to host
当我尝试远程登录服务 IP 时:
telnet 172.30.197.247 8080
我可以连接。
但是,当我尝试通过路由连接时它不起作用:
telnet my.route.com 8080
正在尝试...
远程登录:连接到地址:连接被拒绝
当我使用:
curl -kv my-svc.myproject.svc.cluster.local:8080
我可以连接。
看来服务正常,但路由不正常。
我一直在阅读 https://docs.openshift.org/3.6/admin_guide/sdn_troubleshooting.html#debugging-the-router
上的故障排除指南
有很多事情要检查:
你的路由指向你的服务吗?这是一个例子:
apiVersion: v1
kind: Route
spec:
host: my.route.com
to:
kind: Service
name: yourservice
weight: 100
If it's not the case, the route and the service are not connected.
您可以检查路由器配置。使用 oc rsh
连接到您的路由器并检查您是否在 /var/lib/haproxy/conf/haproxy.config
中找到您的路由名称(后端名称格式应为后端 be_http_NAMESPACE_ROUTENAME)。后端部分下方的 server
部分应包含您的 pod 的 ip(您可以使用 oc get pods -o wide
命令获取您的 pod ip)。
If it's not the case, the route is not registered in the router config. You can try to restart the router end recheck the haproxy.config file.
你能从路由器容器连接到pod ip吗?
OpenShift 中的路由器设置着重于 HTTP/HTTPS(SNI)/TLS(SNI). However it appears that you can use an externalIP 以公开集群中的非 Web 应用程序端口。因为 gRPC 是一种在线协议,您可能需要走这条路。
我已经在 OpenShift Origin 上部署了一个 grpc 服务 运行。这由 OpenShift 服务支持。该服务通过 OpenShift 路由公开。我正在尝试通过将容器端口 (50051) 映射到端口 8080 上的外部世界的服务和路由来使此 pod 可用。
该服务尝试公开的图像在其 Dockerfile 中包含:
EXPOSE 50051
路线如下:
- 服务端口:8080/TCP
- 目标端口:50051
在 DeploymentConfig 中,我指定端口:
ports:
- containerPort: 50051
protocol: TCP
但是,当我尝试通过路由和端口访问应用程序时,我得到(来自 Java)
java.net.NoRouteToHostException: No route to host
当我尝试远程登录服务 IP 时:
telnet 172.30.197.247 8080
我可以连接。
但是,当我尝试通过路由连接时它不起作用:
telnet my.route.com 8080
正在尝试... 远程登录:连接到地址:连接被拒绝
当我使用:
curl -kv my-svc.myproject.svc.cluster.local:8080
我可以连接。
看来服务正常,但路由不正常。
我一直在阅读 https://docs.openshift.org/3.6/admin_guide/sdn_troubleshooting.html#debugging-the-router
上的故障排除指南有很多事情要检查:
你的路由指向你的服务吗?这是一个例子:
apiVersion: v1 kind: Route spec: host: my.route.com to: kind: Service name: yourservice weight: 100
If it's not the case, the route and the service are not connected.
您可以检查路由器配置。使用
oc rsh
连接到您的路由器并检查您是否在/var/lib/haproxy/conf/haproxy.config
中找到您的路由名称(后端名称格式应为后端 be_http_NAMESPACE_ROUTENAME)。后端部分下方的server
部分应包含您的 pod 的 ip(您可以使用oc get pods -o wide
命令获取您的 pod ip)。If it's not the case, the route is not registered in the router config. You can try to restart the router end recheck the haproxy.config file.
你能从路由器容器连接到pod ip吗?
OpenShift 中的路由器设置着重于 HTTP/HTTPS(SNI)/TLS(SNI). However it appears that you can use an externalIP 以公开集群中的非 Web 应用程序端口。因为 gRPC 是一种在线协议,您可能需要走这条路。