在OpenShift环境中部署Flask应用后,Pod默认仅具备集群内访问能力,外部用户无法直接访问应用提供的服务,需要通过配置服务和路由实现流量从集群外部到Pod内Flask应用的转发。本文将以一个基础的Flask应用为例,完整讲解暴露应用的全部流程。

前置准备
首先需要准备一个可正常运行的Flask应用,以及对应的容器镜像,确保应用已经在OpenShift集群中创建对应的部署资源,Pod处于运行状态。以下是本次使用的Flask应用示例代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Flask in OpenShift"
if __name__ == '__main__':
# 注意监听0.0.0.0,否则只能本地访问
app.run(host='0.0.0.0', port=8080)
该应用监听8080端口,返回简单的响应内容,后续所有配置都将围绕这个端口展开。
第一步:创建Service资源
Service是OpenShift中用于暴露一组Pod的网络访问入口的资源,它会通过标签选择器关联对应的Pod,将请求转发到Pod的指定端口。首先我们需要为运行Flask应用的Pod添加对应的标签,假设Pod的标签为app=flask-demo,接下来创建Service配置文件:
apiVersion: v1
kind: Service
metadata:
name: flask-service
namespace: default
spec:
selector:
app: flask-demo
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
配置说明:
selector:指定要关联的Pod标签,需要和Flask应用Pod的标签一致port:Service对外暴露的端口,集群内其他资源访问Service时使用该端口targetPort:Pod内Flask应用实际监听的端口,这里对应应用的8080端口type:默认使用ClusterIP,仅集群内可访问,后续通过路由暴露到外部
使用以下命令创建Service:
oc create -f flask-service.yaml
创建完成后可以通过以下命令查看Service状态:
oc get svc flask-service
第二步:创建Route资源
Route是OpenShift特有的资源,用于将集群外部的HTTP/HTTPS流量路由到集群内部的Service,从而实现应用对外暴露。创建Route的配置文件如下:
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: flask-route
namespace: default
spec:
host: flask-demo.ipipp.com
to:
kind: Service
name: flask-service
port:
targetPort: 8080
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect
配置说明:
host:外部访问应用的域名,需要提前做好域名解析,将域名指向OpenShift集群的路由层入口to.name:指定要转发的Service名称,对应上一步创建的flask-servicetls:配置TLS终止,实现HTTPS访问,同时将所有HTTP请求重定向到HTTPS
使用以下命令创建Route:
oc create -f flask-route.yaml
创建完成后查看Route状态:
oc get route flask-route
验证访问
Route创建成功后,在浏览器中访问配置的host域名,或者使用curl命令测试:
curl https://flask-demo.ipipp.com
如果返回Hello from Flask in OpenShift则说明应用已经成功暴露,外部可以正常访问。
常见问题排查
访问返回503错误
首先检查Service是否正确关联了Pod,执行以下命令查看Service的端点:
oc get endpoints flask-service
如果没有端点,说明Service的标签选择器和Pod标签不匹配,需要修改Service或者Pod的标签保持一致。
域名无法访问
检查Route的状态是否为Admitted,如果状态异常,查看Route的事件信息:
oc describe route flask-route
同时确认域名解析是否正确指向OpenShift集群的路由器IP。
配置总结
暴露OpenShift中Pod内的Flask应用核心分为两步,先通过Service关联Pod实现集群内访问,再通过Route将Service暴露到集群外部。整个流程中端口配置和标签匹配是最容易出问题的环节,需要仔细核对配置内容。如果是非HTTP协议的应用,还可以使用NodePort或者LoadBalancer类型的Service实现暴露,不过Route更适合HTTP/HTTPS类应用的对外访问场景。
OpenShiftFlaskservicerouteKubernetes修改时间:2026-07-06 05:06:25