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

时间:2017-10-03 12:30:34

标签: kubernetes openshift openshift-origin

我已经部署了一个在OpenShift Origin上运行的grpc服务。这得到了OpenShift服务的支持。该服务以OpenShift路由暴露。我试图通过一个服务和路线使这个pod可用,它将容器端口(50051)映射到8080端口的外部世界。

服务尝试公开的映像在其Dockerfile中具有:

EXPOSE 50051

该路线具有以下内容:

  • 服务端口:8080 / TCP
  • 目标端口:50051

在DeploymentConfig中,我使用以下命令指定端口:

ports:
 - containerPort: 50051
   protocol: TCP

但是,当我尝试通过路由和端口访问应用程序时,我得到(来自Java)

java.net.NoRouteToHostException: No route to host

当我尝试telnet服务IP:

telnet 172.30.197.247 8080

我能够连接。

然而,当我尝试通过路线连接时,它不起作用:

telnet my.route.com 8080

尝试...... telnet:连接到地址:拒绝连接

当我使用时:

curl -kv my-svc.myproject.svc.cluster.local:8080

我可以连接。

所以似乎服务正在运行,但路线不是。

我一直在浏览https://docs.openshift.org/3.6/admin_guide/sdn_troubleshooting.html#debugging-the-router

上的问题排查指南

2 个答案:

答案 0 :(得分:1)

OpenShift中的路由器设置侧重于HTTP/HTTPS(SNI)/TLS(SNI)。但是,您似乎可以使用externalIP从群集中公开非Web应用程序端口。因为gRPC是一种有线协议,所以你可能需要走这条路。

答案 1 :(得分:0)

有很多事情需要检查:

  • 您是否指向您的服务?这是一个例子:

    apiVersion: v1
    kind: Route
    spec:
      host: my.route.com
      to:
        kind: Service
        name: yourservice
        weight: 100
    
      

    如果不是这样,则路线和服务未连接。

  • 您可以检查路由器配置。使用oc rsh连接到您的路由器,并检查您是否在/var/lib/haproxy/conf/haproxy.config中找到您的路由名称(后端名称格式应该是后端be_http_NAMESPACE_ROUTENAME)。后端部分下方的server部分应包含您的pod的ip(您可以使用oc get pods -o wide命令获取pod ip。)

      

    如果不是这样,则路由未在路由器配置中注册。您可以尝试重新启动路由器端,重新检查haproxy.config文件。

  • 您可以从路由器容器连接到pod ip吗?