Mongo 复制集监控将主机名替换为 IP 并导致主机名验证失败

Mongo Replicaset monitoring replaces hostnames with IP and leads to failed hostname verification

mongo java 驱动程序和监控线程有问题。

我们是 运行 一个 3 服务器副本集,并使用主机名连接我们的 spring 引导微服务。 mongodb://<username>:<password>@A:27017,B:27017,C:27017/?tls=true

到目前为止,我们一直使用非反应性 mongo 驱动程序,一切正常。但是我现在想使用 reactive/netty 版本,我们得到了 java.security.cert.CertificateException 因为它试图通过 IP 而不是主机名来验证替代名称。

我通过库进行了调试,并且能够看到当 Replicaset 线程的监视线程启动时,它们正在接收 {hello: 1} 使用 IP 而不是主机名。

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

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

有人对此有解决方案吗? 除了

我们是否可能在服务器端配置了一些东西,所以 mongo return 主机名而不是 IP?

提前致谢。

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

将所有成员主机的 属性 更新为主机名后,它按预期工作。