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

如何通过Nginx Ingress Controller暴露EKS微服务并解决路径匹配异常

问题根因

你当前的Ingress配置中两个路由条目都使用path: /前缀规则,Nginx Ingress的匹配逻辑为前缀优先匹配,相同前缀的规则仅会按配置顺序生效第一个,因此永远只会将请求转发到排在前面的Service,这就是调整规则顺序后仅有一个服务可用的核心原因。
同时你配置的nginx.ingress.kubernetes.io/rewrite-target: /注解会将所有匹配到的请求路径强制重写为根路径,若后续配置分路径匹配规则需注意该注解的影响。

解决方案

按照两个服务的接口路径前缀拆分Ingress路由规则即可,具体配置参考如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    # 移除rewrite-target注解,保证原请求路径完整传递到后端服务
spec:  
  rules:  
  - http:
      paths:
          # 所有/camps前缀的请求转发到integrations-api
          - path: /camps
            backend:
              serviceName: integrations-api
              servicePort: 80
          # 所有/users前缀的请求转发到user-api
          - path: /users
            backend:
              serviceName: user-api
              servicePort: 80

如果后续你需要为服务添加统一的访问前缀(如/api/integrations/前缀对应integrations-api的根路径),可配合rewrite规则的捕获组实现,示例如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:  
  rules:  
  - http:
      paths:
          - path: /api/integrations(/|$)(.*)
            backend:
              serviceName: integrations-api
              servicePort: 80
          - path: /api/user(/|$)(.*)
            backend:
              serviceName: user-api
              servicePort: 80

此配置下访问/api/integrations/camps会自动重写为/camps转发到后端integrations-api服务。

额外优化建议

你当前的后端服务配置了LoadBalancer类型的Service,由于请求已经通过Ingress Controller的NLB转发,后端服务直接使用ClusterIP类型即可,无需额外创建LB,可减少资源损耗。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:45:01