Azure应用网关Ingress混合FQDN与通配符致应用不可用是否为预期行为?
问题描述
我有一个包含多个微服务和多条Ingress规则的应用,部署到Azure后出现异常:只要某一条Ingress规则存在问题,整个应用就无法访问。我的Ingress配置结构如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app1-ingress annotations: kubernetes.io/ingress.class: azure/application-gateway appgw.ingress.kubernetes.io/ssl-redirect: "true" appgw.ingress.kubernetes.io/request-timeout: "86400" spec: tls: - hosts: - abc.myhost.com secretName: app-tls-secrets rules: - host: abc.myhost.com http: paths: - path: /somepath backend: service: name: app1 port: number: 8080 pathType: Prefix
经观察发现,仅当所有Ingress的主机名统一为FQDN(完全限定域名)或统一为通配符(如*.myhost.com)时,应用才可通过Azure网关正常访问;若部分Ingress使用FQDN、部分使用通配符,则应用无法访问。请问这是Azure的预期行为吗?
回答
这是Azure应用网关Ingress Controller(AGIC)的预期行为,具体原因如下:
- AGIC在同步Ingress规则到Azure应用网关时,会按主机名维度管理路由规则。当同一根域名下同时存在FQDN(如
abc.myhost.com)和通配符(如*.myhost.com)的Ingress规则时,会触发路由规则冲突逻辑,导致AGIC无法正确生成网关配置,进而使整个应用的路由失效。 - AGIC默认采用全量同步模式:只要有一条Ingress规则配置无效或存在冲突,整个网关配置的同步就会失败,所有已有的路由规则也无法正常生效,这就解释了单条Ingress出问题会导致整个应用无法访问的现象。
若需混合使用FQDN和通配符规则,可参考以下方案:
- 将同一根域名下的FQDN和通配符规则合并到同一个Ingress资源中,避免分散在多个Ingress实例里。
- 确保TLS证书覆盖所有涉及的主机名(包括通配符和具体FQDN),避免因证书不匹配导致同步失败。
内容的提问来源于stack exchange,提问作者Vineel Pellella
相关产品推荐
相关产品推荐

