K8s官方Helm Chart部署Airflow Webserver HTTPS重定向失效问题
这个302跳HTTP的问题和Ingress的SSL重定向规则无关,是Airflow Webserver没识别到前置HTTPS代理,自己生成跳转地址的时候用了HTTP协议。从你贴的curl响应头能直接确认:Location: http://airflow.example.com/home 这条响应是Airflow应用返回的,不是Nginx Ingress返回的。
你部署的其他前端应用大多返回相对路径跳转,不会硬编码协议前缀,所以不会触发这个问题;Airflow基于Flask框架,默认不信任反向代理的转发头,才会出现协议识别错误。
1. 调整Airflow Helm配置,开启反向代理信任
你使用的是1.6.0版本的官方Airflow Helm Chart,直接在自定义values文件中添加以下配置,让Webserver正确识别前置代理传递的协议信息:
webserver: # 开启反向代理适配 enableProxyFix: true # 配置Airflow对外服务的基础地址为HTTPS baseUrl: "https://airflow.example.com" # 配置信任代理传递的转发头 proxyFix: xFor: 1 xProto: 1 xHost: 1 xPort: 1
配置完成后执行Helm升级命令让配置生效:
helm upgrade airflow apache-airflow/airflow -n airflow -f your-custom-values.yaml
2. 修正Ingress配置问题
你当前的Ingress配置存在三处需要调整的点:
- 不要再使用已废弃的
extensions/v1beta1API版本,替换为稳定的networking.k8s.io/v1 - 补充代理头配置,确保Ingress向后端服务传递正确的HTTPS协议标识
- 显式开启SSL重定向,保证HTTP请求自动跳转到HTTPS
修正后的参考配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/proxy-set-headers: | X-Forwarded-Proto https X-Forwarded-Ssl on name: airflow-webser namespace: airflow spec: rules: - host: airflow.example.com http: paths: - path: / pathType: Prefix backend: service: name: airflow-webserver port: name: airflow-ui
如果你是通过AWS Load Balancer Controller搭配ACM在负载均衡层终结SSL,不需要在Ingress上配置本地TLS证书,只要确保负载均衡到Ingress Controller的流量、头传递规则正常即可。
3. 校验Service端口配置一致性
你贴出的Service配置存在端口不一致问题:历史配置中Service端口为80、对应容器targetPort为8080,当前配置中Service端口被改为443,targetPort指向命名端口airflow-ui,需要确认该命名端口和Webserver容器实际监听的端口(默认8080)一致,避免流量转发异常。
所有配置生效后重新执行curl测试,符合预期的表现为:
- 访问80端口HTTP地址时,由Ingress返回301响应,自动跳转到HTTPS地址
- 访问443端口HTTPS根路径时,Airflow返回的302响应中
Location头为https://airflow.example.com/home,不会再跳回HTTP地址
内容的提问来源于stack exchange,提问作者Felix G.

