在 CentOS VM 上安装最新的 OpenShift CodeReady 容器,然后在 OpenShift 上运行由 Java 编写的 TCP 服务器应用程序。TCP 服务器正在侦听端口 7777。
运行app,用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
现在,运行位于我的虚拟机中的客户端应用程序,因为我可以ping通OpenShift节点IP,所以我认为我可以成功运行客户端应用程序。结果是连接超时,我的客户端无法连接运行在OpenShift上的服务器。
请给出如何解决问题的建议,或对问题的任何想法。
谢谢及时回复。
关于步骤 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的节点上运行命令“curllocalhost:31777/endpoint”,它失败了。
$ curl localhost:31777/endpoint
curl: (7) Failed to connect to localhost port 31777: Connection refused
那就是说,31777好像不是OpenShift打开的。
您是否有任何想法如何检查为什么31777未被OpenShift打开。
有关服务定义的更多信息:
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>
我理解你的问题。根据您的描述,我可以看到您的节点端口是3177
。
调试此问题的最佳方法是循序渐进。
步骤1:检查您是否能够使用pod IP和端口访问应用服务器,即curl 10.128.0.229:7777/endpoint
从集群中的一个节点访问应用服务器。这有助于检查pod是否工作。尽管kubectl描述pod
为您提供了一切。
步骤2:之后,在部署pod的节点上,即1192.168.130.11
,尝试使用curl localhost:31777/endpoint
访问应用服务器。如果这样做有效,Nodeport是可访问的,即您的服务工作正常,没有任何问题。
步骤3:之后,尝试从运行客户端服务器的虚拟机使用< code > curl 192 . 168 . 130 . 11:31777/endpoint 连接到您的节点。只是想让你知道,192。是A类私有ip,所以我假设您的客户端在同一个网络中,并且能够与192.169.130.11:31777通信,或者确保您将各自的192.169.130.11 31777端口开放给拥有客户端服务器的虚拟机ip。
这是一个调试服务和pod问题的小过程。但最好的方法是使用入口和入口控制器,这将帮助您使用url而不是ip地址和端口号与应用服务器进行通信。然而,即使使用入口和入口控制器,调试所有部件是否按预期工作的最佳方法是遵循以下步骤。
请随时让我知道任何问题。
问题内容: 我想在页脚元素的右边放置文本(foo链接)。 我需要保留页脚显示。 但是当我将其设置为时,span不再起作用。 问题答案: 该属性在flex容器中被忽略。 根据flexbox规范: 3. Flex容器:和显示值 一个伸缩容器为其内容建立一个新的_伸缩格式上下文_。这与建立块格式化上下文相同,除了使用Flex布局而不是块布局。 例如,浮点数不会侵入flex容器,并且flex容器的边距不会
问题内容: 我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。 之后,我可以使用SSH在容器内进行SSH 。可以正常工作,但似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问(我将端口4200映射到80),则不会加载任何内容。 我想念什么吗? 问题答案: 在您的Dockerfile中,您缺少Expose行,例如: 尝试将其放在d
我正在尝试用flex创建一个布局(将是一个音乐播放器)。 我有3个按钮(上一个、播放和下一个,用红色方块表示),我总是希望它们在同一条线上。 然后,我想在按钮右侧显示一些歌曲信息(当前时间、歌曲标题和总时间)。 我几乎总是希望总时间在最右边,歌曲标题填满剩余的宽度(使用),但随着窗口变小,用省略号截断。 有人知道如何调整它以使其正常工作吗? https://jsfiddle.net/13ohs7j
我想在从Debian官方Docker中心仓库派生的docker容器中执行ps命令:
但我也想在集群外访问它。Description输出表示它使用端口30177上的NodePort公开。 但我无法在上访问它
解决方案:docker检查|grep IP获取运行容器ip的postgres,并分别用容器的ip和port更新您的envDB_HOST和DB_PORT。 更新:由于ip地址可能会更改,因此将postgres写入DB_主机是最佳做法。 我一直在寻找一天的时间将数据库从docker容器连接到我的Laravel应用程序,但无论我做了什么尝试,即使我可以通过Postco连接,我也无法迁移我的数据库。我得到