OpenShift 路由 - 无法连接到远程主机:没有到主机的路由

OpenShift route - Unable to connect to remote host: No route to host

我已经在 OpenShift Origin 上部署了一个 grpc 服务 运行。这由 OpenShift 服务支持。该服务通过 OpenShift 路由公开。我正在尝试通过将容器端口 (50051) 映射到端口 8080 上的外部世界的服务和路由来使此 pod 可用。

该服务尝试公开的图像在其 Dockerfile 中包含:

EXPOSE 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 是一种在线协议,您可能需要走这条路。