部署在AWS EKS+Istio的Streamlit应用出现301重定向循环问题
问题描述
我通过容器化方案在AWS EKS集群部署了Streamlit应用,通过带VPC Link的API Gateway暴露,代理请求至EKS集群。
我的Streamlit配置文件(~/.streamlit/config.toml)内容如下:
toolbarMode = "auto" [theme] base="light" primaryColor="#277A27" secondaryBackgroundColor="#F8FAFA" backgroundColor="#EAF1F2" textColor="#11203E" font="sans serif" [server] enableCORS = false enableXsrfProtection = false headless = true baseUrlPath = "streamlit"
应用托管在[Redacted].api.myurl.com域名下:
- 访问
[Redacted].api.myurl.com/streamlit/healthz可正常返回200 'ok' - 访问
[Redacted].api.myurl.com/streamlit/时陷入重定向循环,持续加载同一URL
已尝试配置browser.serverAddress等参数,均无效果。EKS集群的Gateway、VirtualService和Service配置可将流量转发至Streamlit的8501端口,健康检查正常,推测AWS组件配置无问题。
解决方案建议
1. 补充Streamlit反向代理适配配置
修改config.toml的[server]区块并新增[browser]配置,明确告知Streamlit代理后的外部访问地址与路径:
[server] enableCORS = false enableXsrfProtection = false headless = true baseUrlPath = "streamlit" # 允许反向代理传递WebSocket流量(Streamlit依赖WebSocket实现交互) enableWebsocket = true # 信任反向代理传递的X-Forwarded系列头 trustXForwardedHeaders = true [browser] # 设置外部访问的完整域名 serverAddress = "[Redacted].api.myurl.com" # HTTPS环境下端口设为443,HTTP则设为80 serverPort = 443 # 同步外部访问的基础路径 baseUrlPath = "streamlit"
2. 修正API Gateway路径转发规则
- 确保API Gateway的资源路径配置为
/streamlit/{proxy+},并将请求转发至EKS服务的/streamlit/{proxy}(避免末尾斜杠导致的路径不匹配) - 开启API Gateway的「传递所有请求头」选项,确保
X-Forwarded-Proto、X-Forwarded-Host等关键头能正确传递给Streamlit
3. 调整Streamlit基础路径格式
尝试将baseUrlPath改为带开头斜杠的格式,避免内部路径拼接错误:
[server] baseUrlPath = "/streamlit"
4. 验证Istio VirtualService路径匹配
检查VirtualService的路径重写规则,确保与API Gateway的转发逻辑一致:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: streamlit-vs spec: hosts: - "[Redacted].api.myurl.com" gateways: - streamlit-gateway http: - match: - uri: prefix: "/streamlit/" route: - destination: host: streamlit-service port: number: 8501 rewrite: uri: "/streamlit/"
内容的提问来源于stack exchange,提问作者Carlton Sandhu
相关产品推荐
相关产品推荐

