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

Kubernetes Ingress与应用URL协作及请求转发技术问询

Kubernetes Ingress 转发Spring Boot服务路径的配置方案

问题背景

我有一个Spring Boot微服务,本地通过http://localhost:8088/reader/info可正常获取响应,服务监听8088端口,接口路径为reader/info。已在Kubernetes中部署该服务的Deployment、ClusterIP Service,以及指向debug.com主机名的Ingress资源。现需明确:如何通过Ingress将reader/info请求转发到服务?是否需要在Ingress中单独定义该URL?多微服务场景下的请求URL格式该怎么设计?

附当前配置:

Ingress资源

apiVersion: networking.k8s.io/v1  
kind: Ingress
metadata:
  name: ingress-rules
  namespace: default
spec:
  ingressClassName: nginx
  rules: 
    - host: debug.com
      http:  
        paths:  
          - path: /  
            pathType: Prefix  
            backend:  
              service: 
                name: reader-service 
                port:
                  number: 80
          
          - path: /search
            pathType: Prefix  
            backend:  
              service: 
                name: reader-service
                port:
                  number: 80

Deployment + Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: reader-deployment
  labels: 
    app: reader
spec:
  replicas: 3
  selector:
    matchLabels:
      app: reader
      version: v1
  template:
    metadata:
      labels:
        app: reader
        version: v1
    spec:
      containers:
      - name: reader
        image: artifactory-iky.com:5654/reader:v1.0.0
        ports:
        - containerPort: 8088       
      imagePullSecrets:
        - name: registrykey
---
apiVersion: v1 
kind: Service 
metadata:
  name: reader-service
spec:
  type: ClusterIP
  selector:
    app: reader
  ports:
    - targetPort:  8088
      port: 80

解决方案

1. 现有配置直接可用的访问方式

你当前的Ingress配置中,path: /的Prefix规则会匹配所有以/开头的请求(包括/reader/info)。直接访问http://debug.com/reader/info即可:

  • Ingress会将该请求转发到reader-service的80端口
  • Service再把请求转发到容器的8088端口
  • 后端Spring Boot应用收到的路径就是/reader/info,和本地测试的路径完全一致,能正常返回响应

2. 多微服务场景下的优化配置

如果后续要接入多个微服务(比如A服务路径前缀是/reader/*,B服务是/writer/*),建议为每个服务配置独立的Ingress路径规则,避免路由混乱。修改后的Ingress配置如下:

apiVersion: networking.k8s.io/v1  
kind: Ingress
metadata:
  name: ingress-rules
  namespace: default
spec:
  ingressClassName: nginx
  rules: 
    - host: debug.com
      http:  
        paths:  
          # 匹配所有/reader开头的请求,转发到reader-service
          - path: /reader
            pathType: Prefix  
            backend:  
              service: 
                name: reader-service 
                port:
                  number: 80
          
          # 示例:新增writer服务的路由规则
          - path: /writer
            pathType: Prefix  
            backend:  
              service: 
                name: writer-service 
                port:
                  number: 80

配置后:

  • 访问http://debug.com/reader/info会被/reader规则匹配,正确转发到目标服务
  • 不同服务的请求通过路径前缀区分,路由逻辑更清晰

3. 关键注意事项

  • 路径匹配优先级:Ingress规则按配置顺序匹配,先定义的规则优先生效。因此要把更具体的路径(比如/reader)放在通用路径(比如/)前面,避免被通用规则抢先匹配。
  • 路径传递规则:Nginx Ingress默认不会修改请求路径,客户端请求的完整路径会直接传给后端服务。你的场景不需要路径重写,因为路径和后端应用期望的完全一致。
  • 本地域名解析:本地测试时,需要在hosts文件中添加127.0.0.1 debug.com,确保debug.com指向Kubernetes集群的Ingress入口(用Minikube的话,要先运行minikube tunnel暴露Ingress)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:55:27