Azure Traffic Manager监控降级及访问404问题求助
问题解决方案
一、curl返回302的问题处理
你的curl命令存在格式错误,且curl默认不会自动跟随HTTP重定向,这是返回302的核心原因:
- 修正命令格式:原命令
curl -H -K my-test-url.com中,-H参数需要指定具体请求头内容,-K是加载配置文件的参数,此处完全误用。 - 添加重定向跟随参数:浏览器会自动处理302跳转,但curl默认不执行该操作,需加上
-L参数实现自动跟随。
正确命令如下:
curl -L -H "Host: my-test-url.com" https://my-test-url.com
二、Azure Traffic Manager状态Degraded及访问返回404的问题
核心原因是Traffic Manager访问端点时的Host头不匹配Kubernetes Ingress的路由规则:
问题分析
你的NGINX Ingress依赖Host: my-test-url.com来路由到目标服务,但Traffic Manager做健康检查、用户直接访问my-test-tm.trafficmanager.net时,默认会将Host头设为自身域名my-test-tm.trafficmanager.net。NGINX找不到匹配该Host的Ingress规则,返回404,导致Traffic Manager判定端点状态为Degraded。
解决方案
1. 修复Traffic Manager健康检查配置
在Traffic Manager的端点健康检查设置中,添加自定义请求头host: my-test-url.com:
- 配置后,TM的健康检查请求会携带正确的Host头,NGINX能匹配到Ingress规则并返回200状态码,端点状态会恢复正常。
- 你的健康检查路径已设为
/swagger-ui/index.html,加上Host头后即可正常获取200响应。
2. 解决直接访问TM域名返回404的问题
有两种可选方式:
- 方式一:访问时手动指定Host头
使用curl或其他工具访问时,携带正确Host头即可:curl -H "Host: my-test-url.com" http://my-test-tm.trafficmanager.net - 方式二:修改Kubernetes Ingress规则
在对应Ingress资源中,添加my-test-tm.trafficmanager.net作为额外Host,示例如下:
配置后,用户直接访问apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-ingress-name spec: rules: - host: my-test-url.com http: paths: - path: / pathType: Prefix backend: service: name: your-service-name port: number: 80 - host: my-test-tm.trafficmanager.net # 添加TM域名作为Host http: paths: - path: / pathType: Prefix backend: service: name: your-service-name port: number: 80my-test-tm.trafficmanager.net时,NGINX能匹配到Ingress规则并返回正常内容。
三、NSG规则验证
当前NSG入站规则已允许80、443端口从任意源访问,出站规则也允许80、443端口对外请求,NSG配置不会导致当前问题,无需调整。
内容的提问来源于stack exchange,提问作者Container-Man
相关产品推荐
相关产品推荐

