生成 X. 509客户端证书
在此页面上
MongoDB Enterprise Kubernetes Operator 可以部署启用了X. 509身份验证的 MongoDB 实例。 如果已为部署启用 X. 509身份验证,则必须生成并使用 X. 509证书连接到部署。 此新的客户端证书必须由签署服务器证书的同一CA签署,MongoDB 部署才能接受该证书。
按照本文档中概述的过程,使用 X.509 证书连接到启用 X.509 的 MongoDB 部署。
如果您使用的是 HashiCorp Vault 作为 密钥存储工具 ,您可以改为 创建保管库密钥 。
注意
要自动续订 Ops Manager 部署的证书,请考虑设置证书经理集成。
先决条件
注意
传输层安全 (TLS)、公钥基础设施 (PKI) 证书和证书颁发机构的完整描述超出了本文档的范围。 本页假定您事先了解TLS和 X.509 身份验证。
要完成本教程,您必须安装 MongoDB Enterprise Kubernetes Operator。 有关安装 Kubernetes Operator 的说明,请参阅安装 MongoDB Enterprise Kubernetes Operator。
本教程假设您有一个需要 X.509 身份验证的 MongoDB 部署。 有关部署 MongoDB 资源的说明,请参阅部署 MongoDB database 资源。
步骤
首先创建客户端证书。 然后创建一个 MongoDB 用户并连接到启用 X.509 的部署。
生成 X.509 客户端证书。
对于生产使用,MongoDB 部署应使用由CA生成和签名的有效证书。 您或您的组织可以使用 Kubernetes 原生工具(例如 cert-manager) 生成和维护独立的 CA。
获取和管理证书超出了本文档的范围。
重要
您必须将客户端的TLS证书和证书密钥合并在一个 .pem
文件中。 连接到启用了 X.509 的 MongoDB 部署时,必须提供此.pem
文件。
要学习;了解客户端证书必须具有的属性,请参阅MongoDB手册中的客户端证书要求。
将kubectl
配置为默认命名空间。
如果您尚未执行,请运行以下命令,执行所创建命名空间的所有 kubectl
命令。
注意
MongoDB Ops Manager如果要在多 Kubernetes 集群 部署中部署MongoDB 资源:
将
context
设置为中心集群的名称,例如:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
。将
--namespace
设置为您用于多 Kubernetes 集群 MongoDB 部署的相同范围,例如:kubectl config --namespace "mongodb"
。
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
复制并保存以下示例 ConfigMap 。
将以下 ConfigMap 保存为x509-mongodb-user.yaml
:
1 --- 2 apiVersion: mongodb.com/v1 3 kind: MongoDBUser 4 metadata: 5 name: new-x509-user 6 spec: 7 username: "CN=my-x509-authenticated-user,OU=organizationalunit,O=organization" 8 db: "$external" 9 mongodbResourceRef: 10 name: '<name of the MongoDB resource>' 11 roles: 12 - db: "admin" 13 name: "readWriteAnyDatabase"
此 ConfigMap .yaml
文件描述了一个MongoDBUser
自定义对象。 您可以使用这些自定义对象来创建 MongoDB 用户。 要了解更多信息,请参阅MongoDB 用户资源规范。
在此示例中,ConfigMap 将该用户描述为 X.509 用户,客户端可以使用该用户通过相应的 X.509 证书连接到 MongoDB。
查找 CA 的挂载位置。
运行以下命令,查找 Kubernetes 操作符在每个 Pod 中挂载CA密钥的位置:
kubectl get statefulset <metadata.name> -o yaml
在输出中,找到secret-ca
挂载点:
volumeMounts: - mountPath: /opt/scripts name: database-scripts readOnly: true - mountPath: /var/lib/mongodb-automation/secrets/ca name: secret-ca readOnly: true - mountPath: /var/lib/mongodb-automation/secrets/certs name: secret-certs readOnly: true
在以下步骤中,当您连接到数据库部署时,将secret-ca
附加到mountPath
,从而形成完整路径:
/var/lib/mongodb-automation/secrets/ca/secret-ca
使用 X.509 用户连接到 MongoDB 部署
创建 X.509 用户后,尝试使用 MongoDB Shell ( mongosh
) 连接到部署:
mongosh --host {host} --port {port} --tls \ --tlsCAFile </path/to/secret-ca> \ --tlsCertificateKeyFile <your-cert>.pem \ --authenticationMechanism MONGODB-X509 \ --authenticationDatabase '$external'
mongosh --host {host} --port {port} --ssl \ --sslCAFile </path/to/secret-ca> \ --sslPEMKeyFile <your-cert>.pem \ --authenticationMechanism MONGODB-X509 \ --authenticationDatabase '$external'