Mongo Replicaset监控将主机名替换为IP,并导致主机名验证失败



我们在mongojava驱动程序和监控线程方面遇到了问题。

我们正在运行一个3服务器复制集,并使用主机名连接我们的spring-boot微服务。mongodb://<username>:<password>@A:27017,B:27017,C:27017/?tls=true

到目前为止,我们一直使用无反应的mongo驱动程序,一切都很好。然而,我现在想使用reactive/nety版本,我们得到了java.security.cert.CertificateException,因为它试图通过IP而不是主机名来验证备选名称。

我通过库进行了调试,发现当Replicaset线程的Monitoring线程启动时,它们接收到的是带有IP而不是主机名的{hello: 1}

  1. 监视线程通过主机名连接-->一切正常
  2. 通过监视线程的第一个状态请求,它们将主机作为IP接收
  3. Mongo驱动程序用IP地址更新监控集群的replicaset并删除主机名
  4. IP的新监视线程已启动,并尝试hello命令
  5. 由于IP验证主机名,命令失败

这似乎适用于非响应式,因为IP由Inet4Address解析,因此再次获得正确的主机名。

有人能解决这个问题吗?除了

  • 添加IP作为证书的替代名称(IP可能会更改(
  • 允许使用无效主机名(sslInvalidHostNameAllowed选项(

是否有我们在服务器端配置的东西,让mongo返回主机名而不是IP?

提前感谢你。

显然,我们的复制集在我们的一个环境中配置错误。bindIp被设置为ip地址,而不是主机名(这可能没有什么区别(,但replicaset也被初始化为ip地址而不是主机名称。

将所有成员主机的属性更新为主机名后,它的工作方式与预期的一样。

最新更新