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
相关产品推荐
相关产品推荐

