Springboot Gateway 报错Failed to resolve “bogon”的原因及解决办法

一、问题出现原因及初步分析

今天遇到一个奇怪的错误,一个一直正确运行的微服务后台,突然无法访问,如何重启都会报错。

想到近期有人在服务器上安装过其它服务,因此,考虑可能是配置问题,可配置问题修复后,绐终无法调用到这台机器的服务,测试发现报500错误码。

逐个服务排查,发现调用不到服务,因此考虑是gateway的问题。果然在Gateway中看到如下报错信息。

报错内容截取了主要部分,如下:

java.net.UnknownHostException: Failed to resolve 'bogon' after 2 queries
	at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1047) ~[netty-resolver-dns-4.1.82.Final.jar!/:4.1.82.Final]
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
	*__checkpoint ⇢ com.armi.gateway.configuration.CorsConfiguration$$Lambda$463/511707818 [DefaultWebFilterChain]
	*__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
	*__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
	*__checkpoint ⇢ HTTP POST "/sso/api/auth/signin" [ExceptionHandlingWebHandler]

可以看到,报错内容与两个内容有关,1、‘bogon’;2、DnsResolveContext;3、CorsConfiguration(可能性不大,但暂不排除)

二、问题原因排查

1、分析bogon

找到报错,就有了方向。先查了查bogon,得到如下结果:

这个错误表明Spring Gateway在尝试解析一个名为bogon的主机名时失败了。bogon通常不是一个真实的主机名,它可能是配置错误或者临时测试时使用的一个占位符。

意思是不是很明白,大概是说找名为“bogon”的主机,但没找到。“bogon”也不是真实的主机名,可能只是一个占位符。

看报错信息,DnsResolveContext应该是与bogon的报错直接关联,先跳过,分析CorsConfiguration,这个是自己写的,方便排查。也可以看一看是否能进一步了解这个错误的原因。

2、分析CorsConfiguration

先进行远程调试,停止gateway服务,使用如下命令启动gateway服务,命令中:10.11.12.102为我的服务器的IP,5005为调试端口,后面在Intellij idea中配置时使用。

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=10.11.12.102:5005 -jar gateway.jar

在Intellij idea中添加一个Gateway的远程调试,其中Host为服务器的IP,5005为上面设置的调试端口。

经过测试,发现Cors没有问题,但错误依然在。而且在调试的代码中全部正常。

结论,与CorsConfiguragion文件无关。只与这个bogon有关

三、错误原因分析及总结

结合前面的分析结果,可以断定,问题就是出现在bogon上,三个可能性:1、代码中配置了“bogon”;2、Consul配置有问题,有“bogon”相关内容;3、服务器配置异常。

先在代码中搜索了“bogon”,什么也没找到;替换了Consul,错误依然在,那就只剩下一种可能性,服务器配置异常。

那么,既然是要找bogon,那么就检查一下consul服务器和应用服务器的名称,使用如下命令:

hostname

惊奇的发现,两台服务器的名称都是bogon。

于是,深入调研了一下bogon这个词。

服务器名称为bogon,用于表示一个不存在或不可达的IP地址。
在实际应用中,这可能是因为某种特定的网络环境或配置错误导致IP地址无法解析,从而显示为bogon。

也就是说,服务器的名称异常,于是,修改计算名称

hostnamectl set-hostname <host-name>

而后重启所有服务,一切恢复正常。顺利解决。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值