You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在OpenShift 4.7中为Python Flask应用配置HTTPS模式访问的问题求助

问题根因

你的问题核心是协议不匹配:当前Flask应用默认只监听HTTP请求,你直接将Service的HTTPS 443端口转发到Pod的8080 HTTP端口,请求到达Pod时协议不兼容,导致服务无法响应报错。

以下是两种可行的配置方案:

方案一:使用OpenShift Route做TLS终止(官方推荐,无需修改应用代码)

这是OpenShift上对外暴露HTTPS服务的标准方案,TLS加密/解密由集群的Route组件处理,应用本身仍运行HTTP服务即可:

  • 先修正Service配置:删除之前配置的443端口映射,保留普通HTTP端口映射即可,将Service的80端口指向Pod的8080端口。
  • 进入OpenShift控制台对应项目,依次点击路由 > 创建路由,按如下配置:
    • 名称自定义,服务选择你的Flask应用对应的Service,目标端口选择8080
    • 勾选安全路由选项,TLS终止类型选择边缘(常规场景足够,若需要Route到Pod之间也走HTTPS可选择重加密/直通模式),不安全流量策略选择重定向到HTTPS,实现HTTP请求自动跳转HTTPS
    • 按需上传自定义SSL证书,无需上传则默认使用OpenShift集群自签证书
  • 路由创建完成后,直接用控制台给出的路由域名通过HTTPS访问即可。

方案二:Flask应用本身启用HTTPS服务

如果需要Pod直接对外提供HTTPS服务,可按如下步骤修改:

  • 先生成SSL证书(测试场景可使用openssl生成自签证书,生产环境替换为正规CA签发证书),执行命令:
    openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
    
    将生成的cert.pem和key.pem文件放入应用的src目录下。
  • 修改app.py启动配置,将启动代码替换为:
    if __name__ == "__main__":
        app.run(host='0.0.0.0', port=8080, debug = True, ssl_context=('cert.pem', 'key.pem'))
    
  • 重新构建镜像部署后,配置Service将HTTPS 443端口映射到Pod的8080端口即可正常访问。

额外注意事项

你的Dockerfile中依赖安装命令存在语法错误,两个pip命令之间缺少&&,会导致镜像构建失败,修正为:

RUN pip install -U pip && \
    pip install -r requirements.txt

内容的提问来源于stack exchange,提问作者akarahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:18:02