You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将流量路由到Azure Firewall后无法访问AKS集群中的Web应用

AKS关联Azure Firewall后无法通过Ingress主机名访问服务的问题排查

场景概述

原AKS集群使用Nginx Ingress Controller+公网负载均衡器,改为内部负载均衡器后,配置Azure Firewall做DNAT转发并更新公网DNS指向Firewall公网IP,但无法访问ArgoCD UI。

已完成配置

  • 网络基础配置:在AKS所属VNet创建AzureFirewallSubnet子网,部署Firewall、公网IP及路由表;路由表配置0.0.0.0/0下一跳为Firewall私有IP,并关联至AKS节点子网。
  • Firewall策略:
    • 启用DNS代理,使用默认Azure DNS服务器
    • 应用规则(优先级500):允许所有源的http/https请求访问任意目标
    • 网络规则(优先级400):允许所有源的任意协议访问所有IP,以及AzureAD/ACR/MCR服务标签
    • DNAT规则(优先级100):将Firewall公网IP的443端口转发至内部LB私有IP的80端口
  • Ingress Controller配置:通过values.yaml改为内部LB,服务spec已获取私有IPLB_PRIVATE_IP,同时监听80和443端口
  • ArgoCD Ingress配置:配置TLS证书,规则指向argocd.my.dns.zone.net,后端关联argocd-server:80

可能遗漏或错误的配置点

1. DNAT规则端口映射不匹配

当前DNAT将Firewall的443端口转发至内部LB的80端口,但ArgoCD Ingress配置了TLS(依赖443端口),而内部LB的Ingress Controller 80端口未配置TLS终止逻辑,导致HTTPS请求转发到HTTP端口后无法正常处理。

  • 修正方案:将DNAT规则改为Firewall 443端口转发至内部LB的443端口;或调整Ingress规则,确保80端口能处理对应请求(不推荐)

2. 内部LB的NSG访问控制缺失

检查AKS子网或内部LB关联的网络安全组(NSG),是否允许AzureFirewallSubnet子网的流量访问内部LB的80/443端口。默认NSG可能未开放该规则,需添加:

  • 源:AzureFirewallSubnet的IP段
  • 目标:内部LB私有IP
  • 端口:80、443
  • 协议:TCP
  • 动作:允许

3. DNS解析及代理验证

  • 确认公网DNS的A记录已生效:执行nslookup argocd.my.dns.zone.net,检查返回IP是否为Firewall公网IP
  • 检查Firewall是否允许内部DNS流量:AKS依赖kube-dns做内部服务解析,需确保Firewall未阻止AKS子网到kube-dns IP的UDP 53端口流量

4. Ingress TLS配置验证

  • 确认ArgoCD所在命名空间中存在letsencrypt-prod-new-tls证书Secret,且证书未过期、域名与argocd.my.dns.zone.net匹配
  • 查看Ingress Controller Pod日志,确认无TLS证书加载失败的报错信息

5. 路由表与AKS系统路由冲突

确认AKS子网关联的用户定义路由(UDR)未覆盖AKS内部服务的系统路由,比如集群内部IP段的访问路由,避免导致Ingress Controller无法解析ArgoCD服务

6. Firewall规则有效性验证

  • 确认DNAT规则的目标IP为内部LB的正确私有IP,可通过kubectl get svc <ingress-controller-svc-name>核对
  • 检查Firewall是否有其他高优先级规则拦截了DNAT后的流量,确保DNAT规则(优先级100)能正常触发

内容的提问来源于stack exchange,提问作者Roy Zohar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:08:14