如何在OpenShift 3 Online中开放内部端口?含双端口转发场景
在OpenShift 3 Online中配置端口的解决方案
嗨,针对你这个同时需要公网端口和内部转发端口的场景,我来一步步给你讲清楚怎么配置:
核心概念先理清楚
在OpenShift里,端口配置主要涉及三个部分:
- 容器端口:告诉OpenShift你的容器里正在监听哪些端口
- 服务(Service):内部集群的访问入口,用来映射容器端口
- 路由(Route):把服务端口暴露给公网的入口
你的场景里,8080需要公网访问,9999是容器内部转发用的(不需要对外暴露),所以配置重点是正确声明容器端口,再把8080通过Route暴露出去。
步骤1:声明容器监听的端口
首先要让OpenShift知道你的容器里在监听8080和9999这两个端口。你可以通过编辑DeploymentConfig来添加:
- 执行命令打开DeploymentConfig的编辑界面:
oc edit dc <你的应用名称> - 在
spec.template.spec.containers下找到ports字段(如果没有就新建),添加两个端口的声明:ports: - containerPort: 8080 name: public-port # 给端口起个好记的名字,方便后续映射 - containerPort: 9999 name: private-port
保存退出后,OpenShift会自动重新部署应用,应用启动后就能正确识别这两个端口了。
步骤2:配置服务(Service)
服务是内部集群的访问入口,不过因为你的两个服务都在同一个容器里,内部转发用localhost:9999完全没问题,不需要通过服务访问。但为了规范,还是建议把服务配置好:
- 先创建对应8080端口的服务(如果还没创建):
oc expose dc <你的应用名称> --port=8080 --target-port=public-port - 如果需要让集群内其他Pod也能访问9999端口,可以编辑服务添加这个端口:
在oc edit svc <你的应用名称>spec.ports里添加:
保存即可。如果不需要其他Pod访问9999,这一步可以跳过。- name: private-port port: 9999 targetPort: private-port
步骤3:暴露8080到公网
最后一步就是把8080端口通过Route暴露给公网:
执行命令创建Route:
oc expose svc <你的应用名称>
执行完后,你可以用oc get route命令查看生成的公网域名,通过这个域名就能访问你的8080服务了。
关于你的代码的说明
你代码里用net.connect('9999', '127.0.0.1')是完全正确的!因为两个HTTP服务都运行在同一个容器实例里,本地回环地址就能直接访问到9999端口,不需要修改成服务名或者其他地址。
内容的提问来源于stack exchange,提问作者Aero Wang
相关产品推荐
相关产品推荐

