在自管理集群上滚动更新包含新DN的x.509证书
副本集或分片集群的成员可以使用x.509证书进行成员身份认证来识别彼此作为同一部署的成员。
为了识别彼此作为同一部署的成员,证书中的组织属性(O
的),组织单元属性(OU
的),以及域组件(DC
的)必须匹配。
在某些情况下,您可能需要更新成员证书到新的证书,这些证书具有新的唯一名称(DN
),例如,如果组织更改其名称。您可以使用tlsX509ClusterAuthDNOverride
参数来设置一个替代的DN
以用于匹配。使用此参数,您可以对证书执行滚动更新,以使用不同的DN
的新证书。
注意
在滚动更新中,成员证书逐个更新,您的部署不会出现任何停机时间。要执行使用net.tls.clusterAuthX509
设置或将在更新后使用这些设置的集群的证书轮换,请参阅在自管理集群上轮换X.509证书。
以下教程描述了在不中断服务的情况下更新副本集证书的过程。
考虑一个副本集,其中每个成员的证书(clusterFile
和certificateKeyFile
)具有包含"OU=10gen Server,O=10gen"
(额外的属性不作为比较的一部分)的DN
值
net.tls.mode: requireTLS net.tls.certificateKeyFile: "./mycerts/10gen-server1.pem" net.tls.CAFile: "./mycerts/ca.pem" security.clusterAuthMode: x509 net.tls.clusterFile: "./mycerts/10gen-cluster1.pem" net.tls.clusterCAFile: "./mycerts/ca.pem"
以下过程更新成员的证书(clusterFile
和certificateKeyFile
)到具有"OU=MongoDB Server,O=MongoDB"
的DN
值的新证书。
注意
以下过程假设新的x.509证书符合成员证书的所有其他要求。有关详细信息,请参阅成员证书要求
程序
0. 可选。在运行成员上设置覆盖参数
程序要求重启部署中的所有成员。由于设置将在重启所有成员后才生效,因此您的实例可能会在程序完成前记录消息。
为了避免这些消息,您可以在运行成员上设置覆盖参数。
连接mongosh
直接连接到部署的每个成员,并将 tlsX509ClusterAuthDNOverride
参数设置为新的证书 DN
db.adminCommand( { setParameter: 1, tlsX509ClusterAuthDNOverride: "OU=MongoDB Server,O=MongoDB" } )
1. 修改所有成员的配置
修改每个成员的配置
将
net.tls.certificateKeyFile
更新为新的证书。将
net.tls.clusterFile
更新为新的证书。将
tlsX509ClusterAuthDNOverride
参数设置为新的证书DN
。
例如
net.tls.mode: requireTLS net.tls.certificateKeyFile: "./mycerts/mongodb-server1.pem" net.tls.CAFile: "./mycerts/ca.pem" security.clusterAuthMode: x509 net.tls.clusterFile: "./mycerts/mongodb-cluster1.pem" net.tls.clusterCAFile: "./mycerts/ca.pem" setParameter: tlsX509ClusterAuthDNOverride: "OU=MongoDB Server,O=MongoDB"
设置将在重启每个成员后才生效(见下一步)。
2. 重启每个成员
修改完所有成员的配置后,先重启每个辅助成员,然后重启主成员。
对于每个辅助成员,通过 mongosh
连接到成员并
使用
db.shutdownServer()
方法关闭成员use admin db.shutdownServer() 重启成员。
在重启下一个辅助成员之前,确保成员已达到
SECONDARY
状态。
对于主成员,通过 mongosh
连接到成员并
使用
rs.stepDown()
使成员降级rs.stepDown() 使用
db.shutdownServer()
方法关闭成员use admin db.shutdownServer() 重启成员。
3. 删除 tlsX509ClusterAuthDNOverride
设置
当所有成员都使用新证书重启后,您可以从配置中删除 tlsX509ClusterAuthDNOverride
参数。
例如
net.tls.mode: requireTLS net.tls.certificateKeyFile: "./mycerts/mongodb-server1.pem" net.tls.CAFile: "./mycerts/ca.pem" security.clusterAuthMode: x509 net.tls.clusterFile: "./mycerts/mongodb-cluster1.pem" net.tls.clusterCAFile: "./mycerts/ca.pem"
设置将在您重启每个成员后才生效。