AKS集群配置TLS后通过Nginx Ingress访问Web应用外部IP失败问题
问题产生原因
- 你配置的Ingress规则是基于域名的路由规则,仅当请求的Host头匹配
demo.azure.com时才会命中该规则。直接使用外部IP发起访问时,请求的Host头为IP地址,无法匹配已配置的Ingress规则,Nginx Ingress会返回默认404错误页,对应你截图的HTTP访问报错。 - TLS配置仅绑定了
demo.azure.com域名,你申请的TLS证书的CN/SAN字段仅包含demo.azure.com,用IP发起HTTPS请求时无法通过证书校验,会触发证书不匹配错误,对应你截图的HTTPS访问报错。 - 删除TLS和host字段配置后HTTP可正常访问,是因为去掉域名限制后该Ingress会成为默认路由规则,所有未匹配其他规则的请求都会转发到对应的后端服务,因此访问恢复正常。
排查解决方法
方案1:适配现有域名配置访问
该方案不需要修改集群配置,仅调整本地访问规则即可:
- 找到本地设备的hosts文件:Windows系统路径为
C:\Windows\System32\drivers\etc\hosts,Linux/macOS系统路径为/etc/hosts - 在文件末尾添加记录:
[你的Ingress外部IP] demo.azure.com - 保存后直接通过
https://demo.azure.com访问即可正常加载应用,证书也会校验通过。
方案2:调整Ingress配置支持IP直接访问
如果确实需要通过IP直接访问服务,按需求调整Ingress配置:
- 若仅需HTTP访问IP:删除Ingress配置中的TLS段,同时删除
rules下的host: demo.azure.com字段即可。 - 若需要HTTPS访问IP:先申请包含该Ingress外部IP作为SAN字段的TLS证书,更新
aks-ingress-tls密钥内容,再删除rules下的host: demo.azure.com字段即可。
配置正确性验证
可以通过以下命令确认Ingress本身配置正常:
# 验证HTTPS配置 curl -k --resolve demo.azure.com:443:[替换为你的Ingress外部IP] https://demo.azure.com # 验证HTTP配置 curl --resolve demo.azure.com:80:[替换为你的Ingress外部IP] http://demo.azure.com
如果命令返回应用的正常响应内容,说明Ingress配置没有问题,仅为访问方式和配置不匹配导致的报错。
内容的提问来源于stack exchange,提问作者Franco Tiveron
相关产品推荐
相关产品推荐

