Kubernetes 节点端口不';t在OpenShift CodeReady容器中工作

Kubernetes 节点端口不';t在OpenShift CodeReady容器中工作,kubernetes,openshift,Kubernetes,Openshift,在CentOS VM上安装最新的OpenShift CodeReady容器,然后在OpenShift上运行Java编写的TCP服务器应用程序。TCP服务器正在侦听端口7777 运行应用程序并将其作为一项服务与NodePort一起公开,似乎一切都运行良好。pod端口为7777,服务端口为31777 $ oc get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE RE

在CentOS VM上安装最新的OpenShift CodeReady容器,然后在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
$oc获取吊舱-o宽
名称就绪状态重新启动老化IP节点指定节点就绪门
tcpserver-57c9b44748-k9dxg 1/1运行0 113m 10.128.0.229 crc-2n9vw-master-0
$oc获取svc
名称类型CLUSTER-IP外部IP端口年龄
TCP服务器入口节点端口172.30.149.98 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
$oc获取节点-o宽
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 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上运行的服务器


请给出如何解决问题的建议,或对此问题的任何想法。

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

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

步骤1: 检查您是否能够使用pod IP和端口(即
curl 10.128.0.229:7777/endpoint
从集群中的一个节点访问应用服务器。这有助于检查吊舱是否工作。尽管kubectl description 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

这是一个调试服务和pod问题的小过程。但最好是使用入口和入口控制器,这将帮助您使用url而不是ip地址和端口号与应用程序服务器交谈。然而,即使使用ingress和ingress controller,调试所有部件正常工作的最佳方法是遵循以下步骤

如有任何问题,请随时通知我。

谢谢及时回复

关于第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的节点上运行命令“curl localhost:31777/endpoint”,失败

$ curl localhost:31777/endpoint
curl: (7) Failed to connect to localhost port 31777: Connection refused
这意味着,OpenShift似乎没有打开31777

您是否知道如何检查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>
$oc描述svc tcpserver入口
名称:tcpserver入口
名称空间:myproject
标签:app=tcpserver
注释:
选择器:app=tcpserver
类型:节点端口
IP:172.30.149.98
端口:7777/TCP
目标端口:7777/TCP
节点端口:31777/TCP
端点:10.128.0.229:7777
会话关联:无
外部流量策略:群集
活动:

请格式化您的问题并使其可读,很难从您复制粘贴的内容中获取svc的外部ip和内部ip。好的,您可以检查节点的netstat并查看31777是否出现。关于第1步,您可以直接在节点上使用podIp和端口运行它,它应该允许您与curl 10.128.0.229:7777/{myendpoint}@Joe通信。请编辑您的问题并将此信息添加到其中。不要将其作为答案发布。Hi BinaryBullet,请使用netstat命令检查端口31777,它未打开。我认为一旦创建了服务,OpenShift应该自动打开端口31777。我错过了哪一步?