Kubernetes Nginx Ingress路径重写配置问题:后端收到请求包含路径前缀
问题排查与解决方案
重写规则效果说明
你使用的nginx.ingress.kubernetes.io/rewrite-target: /$2规则本身完全符合需求:该规则属于Nginx Ingress的内部转发重写逻辑,仅修改集群内部Ingress转发到后端服务的请求路径,不会触发用户侧浏览器跳转,用户地址栏的可见地址会完全保持不变。
现有配置的问题
你的路径匹配规则、重写参数配置均正确,唯一问题是Ingress规则的host配置和实际对外的服务域名不匹配:
- 你需要承接的请求域名是
myapi.develop.mydomain.com - 但当前配置的
rules.host字段值为myapi.mynamespace.mydomain.com
域名不一致会导致目标请求无法匹配到该Ingress规则,自然不会触发重写逻辑。
修正后的完整配置
仅需要修改rules.host字段为你实际使用的域名即可,其余配置保持不变(运行时自动生成的uid、managedFields等字段无需手动配置):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapi-ingress namespace: mynamespace annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: # 修正为实际对外的服务域名 - host: myapi.develop.mydomain.com http: paths: - path: /data-service(/|$)(.*) pathType: Prefix backend: service: name: data-service port: number: 3000 - path: /model-service(/|$)(.*) pathType: Prefix backend: service: name: model-service port: number: 3000
配置更新后,访问http://myapi.develop.mydomain.com/data-service/request时,后端data-service收到的请求路径会自动变为/request,用户侧地址保持不变。
内容的提问来源于stack exchange,提问作者John Fox
相关产品推荐
相关产品推荐

