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

K8s Nginx Ingress未在Location响应头添加原始URL前缀如何解决?

解决方案

官方替代方案

已弃用的add-base-url配置的官方替代为nginx.ingress.kubernetes.io/proxy-redirect注解,该注解对应NGINX原生的proxy_redirect指令,用于修改后端服务返回的Location、Refresh响应头的路径内容。

配置实现

由于Ingress注解作用于整个Ingress资源,为避免不同路径前缀的重定向规则冲突,推荐将两个路径的路由拆分为独立的Ingress资源配置:

1. Spark服务Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-spark-namespace-xyz
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  namespace: namespace-xyz
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /analytics/spark/master(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: spark-master-svc
                port:
                  number: 80

2. Jupyter服务Ingress配置(新增重定向规则)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-jupyter-namespace-xyz
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 核心规则:将后端返回的根路径开头的Location重写为带前缀的路径
    nginx.ingress.kubernetes.io/proxy-redirect: / /analytics/jupyter/lab/
  namespace: namespace-xyz
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /analytics/jupyter/lab(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: jupyter-proxy-public
                port:
                  number: 80

规则说明

上述配置中proxy-redirect: / /analytics/jupyter/lab/会自动匹配Jupyter服务返回的所有以/开头的Location响应头,将路径前缀替换为/analytics/jupyter/lab/,例如后端返回的/hub/会被重写为/analytics/jupyter/lab/hub/,符合预期的重定向路径。

备选方案(不拆分Ingress)

如果需要保留同一个Ingress资源,可以通过configuration-snippet注解添加条件匹配的重定向规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-fanout-namespace-xyz
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($request_uri ~* ^/analytics/jupyter/lab(/|$)(.*)) {
        proxy_redirect / /analytics/jupyter/lab/;
      }
  namespace: namespace-xyz
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /analytics/spark/master(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: spark-master-svc
                port:
                  number: 80
          - path: /analytics/jupyter/lab(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: jupyter-proxy-public
                port:
                  number: 80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:08