AWS EKS部署Superset在NLB终止HTTPS后登录等页面重定向卡住问题
问题根因分析
你遇到的login/welcome页面卡住的问题核心是HTTPS卸载后请求协议头传递异常,导致Superset生成的重定向地址、资源引用地址不符合预期,具体可能的原因如下:
- X-Forwarded-Proto请求头未正确传递
NLB完成HTTPS终止后,向后端Nginx Ingress转发的是明文HTTP请求,此时需要通过X-Forwarded-Proto头告知后端服务用户实际访问的协议是HTTPS。如果该头缺失或者值为http,Superset会默认生成http开头的重定向地址,要么被浏览器的混合内容策略拦截,要么跳转到无法访问的HTTP地址导致请求卡住。 - Superset未开启代理头识别配置
Superset基于Flask框架开发,默认不会信任X-Forwarded-*类的代理头,需要手动开启代理修复配置,才能正确识别前端传递的协议、域名等信息,否则依然会用本地收到的HTTP协议生成链接。 - Nginx Ingress配置了不必要的SSL强制跳转
如果你的Ingress规则开启了ssl-redirect: true(Nginx Ingress默认对HTTPS入口开启该配置),会强制将收到的HTTP请求跳转到HTTPS地址,而因为你在NLB层已经完成了TLS卸载,Ingress收到的所有请求都是HTTP,就会导致无限重定向循环,最终请求超时卡住。
解决步骤
- 调整Nginx Ingress配置
在你的Superset对应的Ingress资源上添加如下注解:
annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" # 关闭Ingress层的强制HTTPS跳转,避免循环 nginx.ingress.kubernetes.io/use-forwarded-headers: "true" # 启用X-Forwarded-*头传递
如果需要全局生效,可以在Nginx Ingress Controller的ConfigMap中添加上述配置。
2. 修改Superset配置
在superset_config.py中添加如下配置,开启代理头支持:
# 开启Flask代理头修复 ENABLE_PROXY_FIX = True # 配置代理头的信任层数,根据你的链路层数调整,通常1即可 PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 1, "x_prefix": 1} # 强制Superset生成HTTPS前缀的链接 PREFERRED_URL_SCHEME = 'https'
修改后重启Superset Pod生效。
3. 验证配置有效性
执行curl -v https://superset-xx.com/login查看响应头中的Location字段,如果返回的是https开头的地址则配置正常,如果依然是http开头可以再检查链路中头的传递情况。
内容的提问来源于stack exchange,提问作者CSUNNY
相关产品推荐
相关产品推荐

