如何使用Nginx Ingress Controller重定向至指定路径
实现多租户根路径定向到/app(Nginx Ingress + AWS L4 NLB)
方案一:通过server-snippet实现
完全可以用server-snippet实现精确的根路径重定向,不会影响其他子路径。直接在Ingress资源的注解中插入Nginx规则,针对请求URI精确匹配/时触发重定向:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: multi-tenant-ingress annotations: nginx.ingress.kubernetes.io/server-snippet: | if ($request_uri = '/') { return 302 /app; } # 保留你已配置的AWS L4 NLB相关注解(如SSL终止配置) spec: ingressClassName: nginx tls: - hosts: - subdomain.domain.com secretName: your-ssl-secret rules: - host: subdomain.domain.com http: paths: - path: /app pathType: Prefix backend: service: name: app-service port: number: 80 - path: /api/v1 pathType: Prefix backend: service: name: api-service port: number: 80
说明
- 该规则仅对**精确匹配
/**的请求生效,subdomain.domain.com/api/v1等子路径会正常转发到对应后端服务。 - 由于AWS L4 NLB仅做四层转发,SSL终止在Nginx Ingress Controller层面,重定向逻辑完全由Nginx处理,不受LB影响。
方案二:单独配置根路径Ingress规则
如果不想使用Nginx原生snippet,可以通过声明式的Ingress规则实现根路径重定向,更符合K8s资源管理风格:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: root-redirect-ingress annotations: nginx.ingress.kubernetes.io/temporary-redirect: /app # 如需永久重定向,替换为:nginx.ingress.kubernetes.io/permanent-redirect: /app spec: ingressClassName: nginx tls: - hosts: - subdomain.domain.com secretName: your-ssl-secret rules: - host: subdomain.domain.com http: paths: - path: / pathType: Exact backend: service: name: dummy-service # 指向集群内任意存在的服务即可,重定向在Ingress层触发 port: number: 80 --- # 处理其他业务路径的Ingress apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: multi-tenant-service-ingress spec: ingressClassName: nginx tls: - hosts: - subdomain.domain.com secretName: your-ssl-secret rules: - host: subdomain.domain.com http: paths: - path: /app pathType: Prefix backend: service: name: app-service port: number: 80 - path: /api/v1 pathType: Prefix backend: service: name: api-service port: number: 80
说明
- 单独创建Ingress匹配精确的
/路径,通过重定向注解直接返回跳转响应,无需请求到达后端。 dummy-service只需是集群中存在的任意服务(比如最小的echo服务),因为重定向逻辑在Ingress层完成,不会实际转发请求到该服务。
不推荐的方案:后端服务处理重定向
如果将重定向逻辑放在后端服务的根路径接口中,虽然能实现需求,但会增加请求链路开销(请求需到达后端再返回重定向),且多租户场景下需要在每个租户服务中重复配置,维护成本更高,因此优先选择Ingress层的处理方案。
内容的提问来源于stack exchange,提问作者SimonSK
相关产品推荐
相关产品推荐

