【问题标题】:NodePort doesn't work in OpenShift CodeReady ContainerNodePort 在 OpenShift CodeReady 容器中不起作用
【发布时间】:2019-12-19 10:14:12
【问题描述】:

在 CentOS VM 上安装最新的 OpenShift CodeReady Container,然后在 OpenShift 上运行由 Java 编写的 TCP 服务器应用程序。 TCP 服务器正在侦听端口 7777。

运行应用程序并使用 NodePort 将其作为服务公开,似乎一切运行良好。 pod端口为7777,服务端口为31777。

$ oc get pods -o wide
NAME READY   STATUS    RESTARTS   AGE     IP   NODE         NOMINATED NODE   READINESS GATES
tcpserver-57c9b44748-k9dxg 1/1 Running 0  113m 10.128.0.229  crc-2n9vw-master-0 <none>  <none>

$ oc get svc
NAME               TYPE     CLUSTER-IP      EXTERNAL-IP   PORT(S)                   AGE
tcpserver-ingres  NodePort    172.30.149.98   <none>      7777:31777/TCP            18m

然后获取节点IP,命令显示为192.168.130.11,我可以在我的虚拟机上ping这个ip成功。

$ oc get nodes -o wide
NAME                 STATUS   ROLES           AGE   VERSION             INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                                                   KERNEL-VERSION                CONTAINER-RUNTIME
crc-2n9vw-master-0   Ready    master,worker   26d   v1.14.6+6ac6aa4b0   192.168.130.11   <none>        Red Hat Enterprise Linux CoreOS 42.81.20191119.1 (Ootpa)   4.18.0-147.0.3.el8_1.x86_64   cri-o://1.14.11-0.24.dev.rhaos4.2.gitc41de67.el8

现在,运行位于我的 VM 中的客户端应用程序,因为我可以 ping OpenShift 节点 IP,所以我认为我可以成功运行客户端应用程序。结果是连接超时,我的客户端无法连接在 OpenShift 上运行的服务器。

请提供您的建议如何解决问题,或对问题的任何想法。

【问题讨论】:

  • 能否请您格式化您的问题并使其可读,很难从您复制粘贴的内容中获取您的 svc 的外部 ip 和内部 ip。

标签: kubernetes openshift


【解决方案1】:

我了解您的问题。根据您的描述,我可以看到您的节点端口是31777

调试此问题的最佳方法是逐步进行。

第 1 步: 检查您是否能够使用您的 pod IP 和端口(即curl 10.128.0.229:7777/endpoint)从集群中的一个节点访问您的应用服务器。这可以帮助您检查 pod 是否正常工作。尽管kubectl describe pod 给了你一切。

第 2 步: 之后,在部署 pod 的节点上,即 192.168.130.11 在此尝试使用 curl localhost:31777/endpoint 访问您的应用服务器。如果可行,则可以访问 Nodeport,即您的服务运行良好,没有任何问题。

第 3 步: 之后,尝试使用运行客户端服务器的 vm 中的 curl 192.168.130.11:31777/endpoint 连接到您的节点。只是让您知道,192. 是 A 类私有 ip,所以我假设您的客户端在同一个网络中并且能够与 192.169.130.11:31777 通信,或者确保您打开 192.169.130.11 的相应 31777 端口到具有客户端服务器的 vm ip。

这是一个调试 service 和 pod 问题的小过程。但最好的方法是使用入口和入口控制器,这将帮助您使用 url 而不是 IP 地址和端口号与您的应用服务器通信。然而,即使使用 ingress 和 ingress 控制器,调试所有部分的最佳方法也能按预期工作。

如有任何问题,请随时告诉我。

【讨论】:

    【解决方案2】:

    感谢及时答复。

    关于第 1 步, 我不知道在哪里可以在集群内运行“curl 10.128.0.229:7777/endpoint”,但我通过进入 pod 内部检查了 pod 的状态,端口 777 正在按预期监听。

    $ oc rsh tcpserver-57c9b44748-k9dxg
    sh-4.2$ netstat -nap | grep 7777
    tcp6       0      0 127.0.0.1:7777      :::*     LISTEN      1/java   
    

    关于第 2 步, 在部署 pod 的 Node 上运行命令“curl localhost:31777/endpoint”,失败。

    $ curl localhost:31777/endpoint
    curl: (7) Failed to connect to localhost port 31777: Connection refused
    

    也就是说,31777似乎没有被OpenShift打开。

    您有什么想法如何检查 OpenShift 未打开 31777 的原因吗?

    关于服务定义的更多信息:

    apiVersion: v1
    kind: Service
    metadata:
      name: tcpserver-ingress
      labels:
        app: tcpserver
    spec:
      selector:
        app: tcpserver
      type: NodePort
      ports:
        - protocol: TCP
          port: 7777
          targetPort: 7777
          nodePort: 31777
    

    服务状态:

    $ oc describe svc tcpserver-ingress
    Name:                     tcpserver-ingress
    Namespace:                myproject
    Labels:                   app=tcpserver
    Annotations:              <none>
    Selector:                 app=tcpserver
    Type:                     NodePort
    IP:                       172.30.149.98
    Port:                     <unset>  7777/TCP
    TargetPort:               7777/TCP
    NodePort:                 <unset>  31777/TCP
    Endpoints:                10.128.0.229:7777
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>
    

    【讨论】:

    • 好的,你能检查一下节点的netstat,看看31777是否出现。关于第 1 步,您可以直接在节点上使用 podIp 和端口运行它,它应该可以让您与 curl 10.128.0.229:7777/{myendpoint} 进行通信
    • @Joe 请编辑您的问题并将此信息添加到其中。不要将其作为答案发布。
    • 嗨 BinaryBullet,用 netstat 命令检查端口 31777,它没有打开。我认为一旦创建了服务,OpenShift 应该会自动打开端口 31777。我错过了哪一步?
    猜你喜欢
    • 2021-12-20
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多