如何通过Kubernetes Ingress将请求重定向至Nginx的/dev路径?
解决方案
要实现将dev.fancy_domain.com的根路径请求转发到Nginx服务的/dev路径,只需在Ingress配置中添加路径重写注解,并保持原有路径匹配顺序即可,修改后的完整配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: fanout-ingress annotations: nginx.ingress.kubernetes.io/force-ssl-redirect: 'true' cert-manager.io/issuer: letsencrypt-issuer nginx.ingress.kubernetes.io/rewrite-target: /dev nginx.ingress.kubernetes.io/use-regex: "false" spec: ingressClassName: nginx rules: - host: dev.fancy_domain.com http: paths: - path: / pathType: Exact backend: service: name: nginx port: number: 80 - path: / pathType: Prefix backend: service: name: api port: number: 8080
关键修改说明
- 添加重写注解:
nginx.ingress.kubernetes.io/rewrite-target: /dev会把匹配到的根路径请求(/)重写为/dev,再转发到Nginx服务,正好命中你Nginx配置中location /dev的规则,返回对应的静态文件。 - 禁用正则匹配:
nginx.ingress.kubernetes.io/use-regex: "false"确保仅精确匹配根路径时触发重写,避免正则解析带来的不必要问题。 - 保持路径顺序:由于
Exact类型的路径匹配优先级高于Prefix,根路径请求会优先被Nginx服务处理,其他所有路径请求会自动匹配Prefix: /转发到api服务,完全符合你原有的分流逻辑。
如果你的需求是将dev.fancy_domain.com下所有子路径(比如/xxx)都转发到Nginx的/dev/xxx,可以改用带正则捕获组的配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: fanout-ingress annotations: nginx.ingress.kubernetes.io/force-ssl-redirect: 'true' cert-manager.io/issuer: letsencrypt-issuer nginx.ingress.kubernetes.io/rewrite-target: /dev/$1 nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx rules: - host: dev.fancy_domain.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: nginx port: number: 80 - path: /api/(.*) pathType: Prefix backend: service: name: api port: number: 8080
这种配置会把所有非/api开头的请求转发到Nginx的/dev/xxx路径,/api开头的请求则转发到api服务。
内容的提问来源于stack exchange,提问作者JPFrancoia
相关产品推荐
相关产品推荐

