如何让Nginx Ingress在路由前剥离主机名的-blue/-green后缀?
可行:通过Nginx Ingress实现-blue后缀主机名的透明重写
完全可以实现需求,无需修改各服务团队的Ingress规则,只需通过Nginx Ingress的全局配置添加主机名重写逻辑即可,具体步骤如下:
1. 全局配置主机名头重写规则
利用Nginx Ingress的server-snippet参数,在全局配置中添加对-blue后缀主机名的处理逻辑,自动修改请求的Host头:
通过Helm Values配置(推荐)
如果是通过Helm安装的Nginx Ingress,修改values.yaml文件,添加以下配置:
controller: config: server-snippet: | if ($host ~* "^(.*)-blue\.acme\.com$") { set $new_host $1.acme.com; proxy_set_header Host $new_host; }
执行Helm升级命令应用配置:
helm upgrade <your-ingress-release-name> ingress-nginx/ingress-nginx -f values.yaml -n <ingress-namespace>
直接修改ConfigMap(如果未用Helm管理配置)
找到Nginx Ingress对应的ConfigMap(通常名为<release-name>-ingress-nginx-controller),添加server-snippet字段:
apiVersion: v1 kind: ConfigMap metadata: name: <release-name>-ingress-nginx-controller namespace: <ingress-namespace> data: server-snippet: | if ($host ~* "^(.*)-blue\.acme\.com$") { set $new_host $1.acme.com; proxy_set_header Host $new_host; }
修改后执行kubectl apply生效。
2. 验证配置效果
使用curl测试请求,模拟带有-blue后缀的主机名:
curl -v -H "Host: xyz-blue.acme.com" https://<your-ingress-ip>
查看响应是否与访问https://xyz.acme.com一致,确认路由已正确匹配到目标服务。
额外注意事项
- 确保
xyz-blue.acme.com的DNS记录指向与xyz.acme.com相同的Ingress Controller外部IP; - AKS 1.25版本与官方Nginx Ingress Helm Chart(>=4.0版本)完全兼容,无需担心版本适配问题;
- 该规则是全局生效的,所有符合
*-blue.acme.com格式的主机名都会被自动处理,无需各服务团队单独配置Ingress规则。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

