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 而不是主机名。
- 监控线程通过主机名连接 --> 一切正常
- 随着监视线程的第一个状态请求,它们接收主机作为 IP
- Mongo 驱动程序使用 IP 地址更新监控集群的副本集并删除主机名
- IP 的新监控线程已启动并尝试 hello 命令
- 由于通过 IP
验证主机名,命令失败
似乎这适用于非反应性,因为 IP 由 Inet4Address
解析,因此再次获得正确的主机名。
有人对此有解决方案吗?
除了
- 将 IP 作为备用名称添加到证书(IP 可能会更改)
- 允许无效主机名(sslInvalidHostNameAllowed 选项)
我们是否可能在服务器端配置了一些东西,所以 mongo return 主机名而不是 IP?
提前致谢。
显然我们的副本集在我们的一个环境中配置错误。
bindIp 被设置为 ip 地址而不是主机名(这可能没有什么区别),但是副本集也被初始化为 ip 地址而不是主机名。
将所有成员主机的 属性 更新为主机名后,它按预期工作。
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 而不是主机名。
- 监控线程通过主机名连接 --> 一切正常
- 随着监视线程的第一个状态请求,它们接收主机作为 IP
- Mongo 驱动程序使用 IP 地址更新监控集群的副本集并删除主机名
- IP 的新监控线程已启动并尝试 hello 命令
- 由于通过 IP 验证主机名,命令失败
似乎这适用于非反应性,因为 IP 由 Inet4Address
解析,因此再次获得正确的主机名。
有人对此有解决方案吗? 除了
- 将 IP 作为备用名称添加到证书(IP 可能会更改)
- 允许无效主机名(sslInvalidHostNameAllowed 选项)
我们是否可能在服务器端配置了一些东西,所以 mongo return 主机名而不是 IP?
提前致谢。
显然我们的副本集在我们的一个环境中配置错误。 bindIp 被设置为 ip 地址而不是主机名(这可能没有什么区别),但是副本集也被初始化为 ip 地址而不是主机名。
将所有成员主机的 属性 更新为主机名后,它按预期工作。