使用HELM部署AGIC共享Azure App Gateway时配置被覆盖问题求助
问题分析与解决方案
核心问题
- Ingress配置格式错误:你的Ingress规则中,
host与http被拆分为两个独立的rules条目,导致AGIC无法正确关联域名与路径规则,进而引发配置覆盖问题。 - 共享模式下资源命名冲突:两个集群的AGIC默认使用相同逻辑创建应用网关资源(如后端池、路由规则),即使域名不同,相同路径也会触发覆盖。
具体修复步骤
1. 修正Ingress规则格式
将http嵌套在对应host的规则下,确保每个域名与路径规则正确绑定。
Dev集群修正后的Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-api namespace: default annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/backend-path-prefix: "/" appgw.ingress.kubernetes.io/appgw-ssl-certificate: "wildcard-certificate" appgw.ingress.kubernetes.io/ssl-redirect: "true" spec: rules: - host: dev-api.example.com http: paths: - path: /manager/* pathType: Prefix backend: service: name: manager-api port: number: 80
QA集群修正后的Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-api namespace: default annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/backend-path-prefix: "/" appgw.ingress.kubernetes.io/appgw-ssl-certificate: "wildcard-certificate" appgw.ingress.kubernetes.io/ssl-redirect: "true" spec: rules: - host: test-api.example.com http: paths: - path: /manager/* pathType: Prefix backend: service: name: manager-api port: number: 80
2. 为每个集群AGIC配置唯一资源前缀
通过Helm部署AGIC时,设置appgw.resourcePrefix参数为每个集群指定独立前缀,避免应用网关资源重名覆盖。
- Dev集群Helm部署命令示例:
helm upgrade --install ingress-azure ingress-azure/ingress-azure \ --namespace kube-system \ --set appgw.shared=true \ --set appgw.resourcePrefix=dev- \ --set appgw.appgwName=<你的应用网关名称> \ --set appgw.resourceGroupName=<你的资源组名称> \ --set appgw.subscriptionId=<你的订阅ID>
- QA集群Helm部署命令示例:
helm upgrade --install ingress-azure ingress-azure/ingress-azure \ --namespace kube-system \ --set appgw.shared=true \ --set appgw.resourcePrefix=qa- \ --set appgw.appgwName=<你的应用网关名称> \ --set appgw.resourceGroupName=<你的资源组名称> \ --set appgw.subscriptionId=<你的订阅ID>
3. 配置AzureIngressProhibitedTargets隔离集群配置
在每个集群创建AzureIngressProhibitedTargets资源,阻止AGIC修改对方集群的域名配置。
- Dev集群配置:
apiVersion: extensions/v1beta1 kind: AzureIngressProhibitedTargets metadata: name: prohibit-qa-host namespace: kube-system spec: prohibitedTargets: - host: test-api.example.com
- QA集群配置:
apiVersion: extensions/v1beta1 kind: AzureIngressProhibitedTargets metadata: name: prohibit-dev-host namespace: kube-system spec: prohibitedTargets: - host: dev-api.example.com
4. 验证配置生效
- 重新部署修正后的Ingress资源到对应集群
- 检查应用网关的监听器、路由规则和后端池,确认两个集群的资源已独立创建且无覆盖
- 分别访问
dev-api.example.com/manager/*和test-api.example.com/manager/*,验证服务正常响应
内容的提问来源于stack exchange,提问作者arctech7
相关产品推荐
相关产品推荐

