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

如何在AKS中配置支持多API端点的Ingress Controller

解决AKS Nginx Ingress多API路由重写问题

你遇到的核心问题是全局rewrite-target注解只能生效最后一个,要实现多路径对应不同后端API,需要给每个路由单独配置正则匹配和重写规则,利用Nginx Ingress的正则捕获组来完整保留查询参数。

修正后的Ingress配置

kind: Ingress
metadata:
  name: test-ingress
  namespace: containerpoc
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 移除全局rewrite-target,改为给每个路径单独配置重写规则
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      # 匹配 /Account?xxx,重写到后端的 /api/AccountBalance?xxx
      - path: /Account(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: accountbalance-service
            port:
              number: 80
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /api/AccountBalance?$2
      # 匹配 /account/balanceref?xxx,重写到后端的 /api/RefiningDetail?xxx
      - path: /account/balanceref(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: accountbalance-service
            port:
              number: 80
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /api/RefiningDetail?$2
      # 匹配 /Transaction?xxx,重写到后端的 /api/Transactions?xxx
      - path: /Transaction(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: transactions-service
            port:
              number: 80
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /api/Transactions?$2
      # 匹配 /refining?xxx,重写到后端的 /api/Refining?xxx
      - path: /refining(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: refining-service # 替换为你的refining服务实际名称
            port:
              number: 80
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /api/Refining?$2

关键配置说明

  1. 正则路径匹配:

    • 用/Account(/|$)(.*)这类正则表达式,(/|$)确保匹配/Account或/Account/开头的路径,(.*)捕获所有后续内容(包括查询参数?xxx部分)。
    • 必须设置pathType: ImplementationSpecific:因为使用了正则表达式,不能用Prefix或Exact类型。
  2. 单路径独立重写:

    • 给每个paths条目单独添加rewrite-target注解,用$2引用正则捕获的第二个分组(即查询参数部分),确保浏览器传入的查询参数完整传递到后端API。
  3. 查询参数传递逻辑:

    • 重写规则里的?$2会把捕获到的查询参数直接追加到后端API路径后,比如访问IP/Account?account=1,后端会收到/api/AccountBalance?account=1,完全符合你的需求。

验证步骤

  1. 应用修正后的Ingress配置:
    kubectl apply -f your-ingress-file.yaml -n containerpoc
    
  2. 检查Ingress状态:
    kubectl get ingress test-ingress -n containerpoc
    
  3. 测试各路由:
    • 访问http://<AKS-IP>/Account?account=1,验证accountbalance-service的/api/AccountBalance接口是否正常响应。
    • 访问http://<AKS-IP>/refining?CustomRefnum=&Ref=2323-oo&DateReceived=03-May-2023&account=0000,验证对应后端服务的/api/Refining接口是否正常接收参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:12:51