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

Kubernetes Ingress:如何仅暴露REST API的指定路径?

实现仅暴露指定Service路径的规范方案

你的需求完全可行,通过配置Kubernetes Ingress可以精准控制仅暴露/api/Public1和/api/Public2两个路径,同时查询参数会自动传递到后端服务,无需额外处理。

当前配置的问题

你现有的Ingress配置把rewrite-target写死为/api/Public1,只能匹配单一路径;而且path设置为/gateway/api/Public1和你实际访问的/api/Public1不对应,这会导致其他路径无法正常路由。

推荐的规范配置

根据你的场景,有两种常用的配置方式:

方式1:分开配置单个路径(直观易维护)

适合路径数量少的场景,每个路径单独定义规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: dev
  name: txc-dev-public-exposition
spec:
  ingressClassName: nginx
  rules:
  - host: messaging-dev.myapp.com
    http:
      paths:
      - path: /api/Public1
        pathType: Prefix
        backend:
          service:
            name: gatewayapi-svc
            port:
              number: 80
      - path: /api/Public2
        pathType: Prefix
        backend:
          service:
            name: gatewayapi-svc
            port:
              number: 80

方式2:正则匹配批量路径(适合有规律的路径)

如果后续还有类似/api/PublicN的路径需要暴露,可以用正则匹配简化配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: dev
  name: txc-dev-public-exposition
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /api/$1$2
spec:
  ingressClassName: nginx
  rules:
  - host: messaging-dev.myapp.com
    http:
      paths:
      - path: /api/(Public1|Public2)(/?.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: gatewayapi-svc
            port:
              number: 80

查询参数的处理

不管用哪种配置,当你访问https://messaging-dev.myapp.com/api/Public1?id=123&name=test这类带查询参数的URL时,Ingress Nginx会自动将完整的查询参数转发到后端服务的对应路径,不需要额外配置——Nginx Ingress默认会保留请求的查询字符串。

验证效果

配置完成后,你可以:

  • 访问/api/Public1和/api/Public2:正常路由到后端Service
  • 访问/api/Private1/2/3:会返回404,因为Ingress没有配置对应的路由规则,实现了仅暴露指定路径的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:45:47