aliyun相关文档
配置URL重定向的路由服务
当使用Nginx Ingress Controller的时候,Nginx会将路径完整转发到后端(如,从Ingress访问的/service1/api路径会直接转发到后端Pod的/service1/api/路径)。如果您后端的服务路径为/api,则会出现路径错误,导致404的情况。该情况下,您可以通过配置rewrite-target的方式,来将路径重写至需要的目录。
部署以下模板,创建Nginx Ingress。
cat <<-EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: foo.bar.comnamespace: defaultannotations:# URL重定向。nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:rules:- host: foo.bar.comhttp:paths:# 在Ingress Controller的版本≥0.22.0之后,path中需要使用正则表达式定义路径,并在rewrite-target中结合捕获组一起使用。- path: /svc(/|$)(.*)backend:service: name: web1-serviceport: number: 80pathType: ImplementationSpecific
EOF
执行以下命令,访问Nginx服务。
替换IP_ADDRESS为Ingress对应的IP,可通过kubectl get ing获取。
curl -k -H "Host: foo.bar.com" http://<IP_ADDRESS>/svc/foo
预期输出:
web1: /foo
Rewrite配置
使用nginx.ingress.kubernetes.io/rewrite-target注解支持基本的Rewrite配置,对于一些复杂高级的Rewrite需求,可以通过如下注解来实现:
nginx.ingress.kubernetes.io/server-snippet:扩展配置到Server章节。
nginx.ingress.kubernetes.io/configuration-snippet:扩展配置到Location章节。
配置示例:
annotations:nginx.ingress.kubernetes.io/server-snippet: |rewrite ^/v4/(.*)/card/query http://foo.bar.com/v5/#!/card/query permanent;nginx.ingress.kubernetes.io/configuration-snippet: |rewrite ^/v6/(.*)/card/query http://foo.bar.com/v7/#!/card/query permanent;
示例配置生成的nginx.conf如下所示。
# start server foo.bar.comserver {server_name foo.bar.com ;listen 80;listen [::]:80;set $proxy_upstream_name "-";# server-snippet配置。rewrite ^/v4/(.*)/card/query http://foo.bar.com/v5/#!/card/query permanent;...# configuration-snippet配置。rewrite ^/v6/(.*)/card/query http://foo.bar.com/v7/#!/card/query permanent;...}# end server foo.bar.com