如何通过K8s Ingress将域名转发至带指定URI的后端服务?
实现域名根路径转发到后端指定URI的方案
Kubernetes原生Ingress资源本身不支持直接在Service级别配置路径重写,你需要借助所用Ingress Controller提供的注解来实现。以最常用的Nginx Ingress Controller为例,可通过nginx.ingress.kubernetes.io/rewrite-target注解完成类似Nginx中proxy_pass的URI重写效果。
正确的Ingress YAML配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: foo-example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /foo/bar$1 spec: rules: - host: foo.example http: paths: - path: /(.*) pathType: Prefix backend: service: name: serviceA port: number: 8999
配置说明
nginx.ingress.kubernetes.io/rewrite-target: /foo/bar$1:该注解会将请求的URI重写为/foo/bar加上路径捕获部分。当访问foo.example/时,请求会被转发到serviceA:8999/foo/bar;若访问foo.example/test,则转发到serviceA:8999/foo/bar/test,完全匹配你需要的Nginx配置逻辑。path: /(.*):用正则表达式捕获根路径下的所有请求,确保所有发往foo.example的请求都被该规则匹配。
注意事项
- 需确保集群已正确部署并配置Nginx Ingress Controller,否则上述注解不会生效。
- 若使用其他类型的Ingress Controller(如Traefik、ALB等),需参考对应控制器的文档调整重写配置,不同控制器的注解规则存在差异。
内容的提问来源于stack exchange,提问作者zzm
相关产品推荐
相关产品推荐

