在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 365cert.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
相关产品推荐
相关产品推荐

