0

0

在OpenShift中正确暴露Flask应用:理解路由与Ingress服务

聖光之護

聖光之護

发布时间:2025-12-13 23:55:38

|

704人浏览过

|

来源于php中文网

原创

在OpenShift中正确暴露Flask应用:理解路由与Ingress服务

本教程详细阐述了在openshift环境中,如何通过service和route将运行在pod中的flask应用暴露给外部访问。核心在于理解openshift的ingress服务默认监听80和443端口,外部用户应通过这些标准端口访问路由,而非应用内部端口。文章将提供创建service和route的配置示例,并强调关键注意事项。

在OpenShift容器平台中部署Web应用时,确保其能够被外部访问是核心需求。对于运行在Pod内的Flask应用,这通常涉及Service和Route的配置。本文将指导您如何在OpenShift中正确地暴露一个Flask应用,重点解释Ingress路由的工作机制及其对外部访问端口的影响。

核心概念:OpenShift路由与Ingress服务

OpenShift的路由(Route)机制是其网络层的重要组成部分,它负责将外部流量引导至集群内部的服务。当您创建一个Route时,它实际上是由OpenShift的Ingress服务(也称为Ingress Router)来处理的。Ingress服务作为集群的入口点,默认监听标准的HTTP(80)和HTTPS(443)端口。

这意味着,无论您的Flask应用在Pod内部监听哪个端口(例如5000),或者Service的targetPort配置为何,外部用户访问您的应用时,都将通过Ingress服务的80或443端口。Ingress服务随后会将这些请求代理到您Service定义的targetPort上,最终转发到您的Pod。因此,尝试通过http://:5000这样的方式访问Route是无效的,因为Ingress服务不在此端口监听外部请求。

步骤详解:暴露Flask应用

以下是暴露运行在OpenShift Pod中的Flask应用的具体步骤。

1. 确保Flask应用监听正确地址

您的Flask应用必须配置为监听所有网络接口,以便Pod内部的服务可以访问它。通常,这意味着将Flask应用绑定到0.0.0.0地址。

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello from Flask in OpenShift!'

if __name__ == '__main__':
    # 确保监听所有网络接口
    app.run(host='0.0.0.0', port=5000)

2. 创建Service

Service是OpenShift中用于抽象一组Pod并提供稳定网络访问的方式。它将请求从Route转发到后端Pod。创建一个ClusterIP类型的Service,其targetPort应与Flask应用在Pod内部监听的端口一致(本例中为5000)。

apiVersion: v1
kind: Service
metadata:
  name: flask-service
spec:
  selector:
    # 确保这里的标签与您的Pod标签匹配
    app: flask-app
  ports:
    - protocol: TCP
      port: 5000 # Service暴露的端口
      targetPort: 5000 # Pod内部Flask应用监听的端口
  type: ClusterIP # 默认类型,Service仅在集群内部可访问

请确保selector字段与您的Pod的标签匹配,这样Service才能正确地将流量路由到您的Flask Pod。您可以使用oc apply -f 命令创建此Service。

抖云猫AI论文助手
抖云猫AI论文助手

一款AI论文写作工具,最快 2 分钟,生成 3.5 万字论文。论文可插入表格、代码、公式、图表,依托自研学术抖云猫大模型,生成论文具备严谨的学术专业性。

下载

3. 创建Route

Route是OpenShift中将Service暴露给外部世界的机制。它将外部流量(通过Ingress服务)路由到您的Service。

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: flask-route
spec:
  host: my-flask-app.apps.your-cluster.com # 替换为您的实际域名或OpenShift提供的默认域名
  to:
    kind: Service
    name: flask-service # 引用上面创建的Service
    weight: 100
  port:
    targetPort: 5000 # 这里的targetPort应与Service的port字段匹配
  # termination: edge # 可选:配置TLS加密,例如edge, passthrough, reencrypt
  wildcardPolicy: None

请注意,spec.port.targetPort在这里指的是Service的端口(即Service定义中的port: 5000),而不是外部访问的端口。Ingress服务会监听80/443端口,并将请求转发到flask-service的5000端口。您可以使用oc apply -f 命令创建此Route。

访问方式

创建Route后,您可以通过Route的host字段定义的URL来访问您的Flask应用。由于Ingress服务监听80和443端口,您应该直接使用HTTP或HTTPS协议访问,而无需指定端口号:

  • 对于HTTP访问:http://my-flask-app.apps.your-cluster.com
  • 对于HTTPS访问(如果配置了TLS终止):https://my-flask-app.apps.your-cluster.com

例如,如果您的Route主机是my-flask-app.apps.your-cluster.com,那么您只需在浏览器中输入或使用curl命令访问http://my-flask-app.apps.your-cluster.com即可。

注意事项

  • Flask监听地址: 务必确保Flask应用在Pod内部监听0.0.0.0,而不是127.0.0.1,以便Service可以访问到它。
  • 端口匹配: Service的targetPort必须与Flask应用实际监听的端口一致。Route的port.targetPort则应与Service暴露的端口一致。
  • 外部访问端口: 外部访问始终通过Ingress服务的80(HTTP)或443(HTTPS)端口,无需在URL中指定应用内部端口。
  • TLS配置: 如果需要HTTPS访问,可以在Route中配置termination字段,例如edge、passthrough或reencrypt,由OpenShift Ingress服务处理TLS证书和加密。
  • Route Host: Route的host字段可以是OpenShift集群提供的默认域名,也可以是您自定义的域名,但后者需要相应的DNS配置。

总结

在OpenShift中暴露Flask应用的关键在于理解Ingress服务作为流量入口的工作方式。通过正确配置Service将内部Pod端口映射到集群内端口,并创建Route将该Service暴露到外部,同时记住外部访问将通过标准的80/443端口,您就可以成功地让您的Flask应用对外提供服务。遵循这些步骤和注意事项,将有助于您避免常见的网络配置问题。

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

85

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

72

2025.12.15

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1371

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

378

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

909

2025.04.24

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

438

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

175

2023.10.30

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1051

2023.10.19

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号