当前位置: 首页 > 知识库问答 >
问题:

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

叶鸿煊
2023-03-14

我已经部署了一个运行在OpenShift Origin上的grpc服务。这是由OpenShift服务支持的。该服务通过OpenShift路由公开。我正在尝试通过一个服务和路线将集装箱港口(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个答案

殷德本
2023-03-14

有多种事项需要检查:

>

  • 您是否路由指向您的服务?以下是一个示例:

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

    如果不是这种情况,则路由和服务未连接。

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

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

    你能从路由器容器连接到pod ip吗?

  • 楚钊
    2023-03-14

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

     类似资料:
    • 使用VisualVM,我可以看到两种类型来连接远程主机。 > jstatd 所以我正在尝试使用JMX,我学习了很多教程,但到目前为止还没有成功。 目前,有我的桌面和一个运行java服务器应用程序的linux盒子。我正在尝试在桌面上设置VisualVM客户端,以查看在linux Box上运行的java应用程序。 我为Linux上的java应用程序在start.sh脚本上添加了以下JAVA_OPTS脚

    • 问题内容: 我有以下骆驼对Redis进行投票: 而且效果很好。但是,当我将redisUri从 至 我收到以下错误: 我检查了通过telnet到并使用redis-cli可以访问elasticache。 连接到远程主机时出现此错误是什么? 我的本地redis和elasticache redis都运行2.8.24。运行骆驼2.17.1。 问题答案: 这是我的工作方式: 属性文件: 骆驼路线与以前相同。

    • 我目前正在尝试了解更多关于OpenShift Origin的信息,并在VMWare Fusion上部署一个CentOS VM。我按照 OpenShift 快速入门指南安装并运行了 OpenShift Origin 服务器。但是,当我尝试部署测试应用程序时,在部署过程中出现以下错误。 添加新应用程序时,我还收到以下消息 需要做些什么才能在我的VM上成功部署它?我不确定上述警告消息是否与问题有关。

    • 我有一个问题,基本上是关于OpenShift Origin路线的澄清。 我设法在本地VMWare安装的CentOS上设置OpenShift Origin版本1.4.0-rc1。我还能够为 nginx 拉取和设置映像,pod 状态显示正在运行。也能够在服务endpoint上访问nginx。现在,根据文档,如果我想在托管系统之外访问此nginx实例,我需要创建一个路由,我也这样做了。 混乱出现在Ope

    • 我尝试使用 JMeter 运行分布式测试,我有 2 个 EC2 实例 主公共 IP: 54.xxx.xx.xx 从属公共 IP: 204.xxx.xxx.xxx 我已经打开了配置中使用的所有必要端口。 我可以从另一个 EC2 对每个 EC2 执行 ping 操作,并且 ping 成功。 但当我尝试启动测试时,服务器失败并返回[No route to host(host unreachable)]。

    • 当我尝试从我的容器内连接到另一个容器的端口时,我不成功并得到, 从docker主持人那里我成功了, 如果我检查iptables,我可以看到问题, 所以我添加了以下内容,一切都很好, 我错过什么了吗? 谢谢