多区域部署必须为每个区域单独配置LDAP参数,通过Kubernetes Operator的spec.security.authentication.ldap分区域声明,禁用全局复用;需确保各区域ldap.host、端口、bindDN、TLS证书路径及DNS解析均独立且正确,TLS为强制前提。

多区域部署中直接复用单集群 LDAP 配置会失败,因为 saslauthd 或系统 LDAP 库无法跨区域低延迟稳定通信,且证书、绑定 DN、TLS 路径在各区域不一致。必须为每个区域单独配置 LDAP 连接参数,并通过 Kubernetes Operator 的 spec.security.authentication.ldap 分区域声明。
LDAP 连接参数必须按区域隔离配置
Operator 不支持全局 LDAP 设置;每个 MongoDBMultiCluster 实例只处理本区域的认证请求。若强行共用同一套 ldap.host 和 ldap.port,会导致部分区域连接超时或 TLS 握手失败。
-
ldap.host必须指向本区域就近的 LDAP 服务器(如:华东区填ldap-cn-east.mycompany.com,美西区填ldap-us-west.mycompany.com) -
ldap.port若启用 LDAPS,必须设为636;若用 StartTLS,则用389,但需额外设置ldap.useStartTls: true -
ldap.bindDN和ldap.bindPasswordSecretRef必须对应各区域有权限查询用户信息的服务账号,不能复用管理员账号 - 证书路径(
ldap.tls.caFile)必须挂载到对应区域 Pod 中,且文件路径与 Operator 配置中声明的一致,例如/etc/ldap/tls/ca.pem
使用 TLS 是强制前提,不是可选项
跨区域网络不可信,明文 LDAP 流量(ldap.useTLS: false)在任何生产环境都应被拒绝。现代目录服务(如 Active Directory 2016+、OpenLDAP 2.5+)默认禁用非加密绑定。
- 未配置
ldap.tls.caFile会导致 Pod 启动失败,日志报错:failed to initialize LDAP client: x509: certificate signed by unknown authority - 若 LDAP 服务器使用通配符证书(如
*.mycompany.com),需确保ldap.host解析的域名匹配该证书的 SAN 字段 - Kubernetes Secret 中存储的
bindPassword必须 Base64 编码,且 Operator 仅支持引用Secret的data字段,不支持stringData
避免在副本集成员间共享 LDAP 配置逻辑
LDAP 认证由 mongos 或 mongod 在接受连接时触发,不依赖副本集内节点间同步。因此,不要试图在 rs.initiate() 或 rs.reconfig() 中写入 LDAP 参数——这些参数只存在于 Operator CRD 中,不在 MongoDB 内部配置里。
- 错误做法:把
security.ldap块写进/etc/mongod.conf,这会被 Operator 忽略,且重启后丢失 - 正确路径:所有 LDAP 设置必须通过
MongoDBMultiCluster自定义资源的spec.security.authentication.ldap字段声明 - 若某区域临时切换 LDAP 服务器,只需更新该区域对应的 CR,无需滚动重启整个集群
最容易被忽略的是 DNS 可解析性——Operator Pod 内必须能 nslookup 到各区域的 ldap.host,且超时时间不能超过 5 秒。建议在每个区域的 Operator 部署前,先用 busybox 容器验证 DNS 和端口连通性。

















