对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

生成 X. 509客户端证书

MongoDB Enterprise Kubernetes Operator 可以部署启用了X. 509身份验证的 MongoDB 实例。 如果已为部署启用 X. 509身份验证,则必须生成并使用 X. 509证书连接到部署。 此新的客户端证书必须由签署服务器证书的同一CA签署,MongoDB 部署才能接受该证书。

按照本文档中概述的过程,使用 X.509 证书连接到启用 X.509 的 MongoDB 部署。

如果您使用 HashiCorp Vault 作为您的 Secret 存储工具,则可以创建 Vault Secret

注意

要自动续订 Ops Manager 部署的证书,请考虑设置证书经理集成。

注意

传输层安全 (TLS)、公钥基础设施 (PKI) 证书和证书颁发机构的完整描述超出了本文档的范围。 本页假定您事先了解TLS和 X.509 身份验证。

首先创建客户端证书。 然后创建一个 MongoDB 用户并连接到启用 X.509 的部署。

1

对于生产使用, MongoDB 部署应使用由 CA生成和签名的有效证书。您或您的组织可以使用 Kubernetes 原生工具(例如 cert-manager。 )生成和维护独立的 CA 。

获取和管理证书超出了本文档的范围。

重要

您必须将客户端的 TLS 证书和证书的密钥连接到 .pem 文件中。连接到启用 X.509 的 MongoDB 部署时,必须提供此 .pem 文件。

要学习;了解客户端证书必须具有的属性,请参阅MongoDB手册中的客户端证书要求

2

如果您尚未执行,请运行以下命令,执行所创建命名空间的所有 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>
3

将以下 ConfigMap 保存为x509-mongodb-user.yaml

1---
2apiVersion: mongodb.com/v1
3kind: MongoDBUser
4metadata:
5 name: new-x509-user
6spec:
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。

4

运行以下命令以应用 ConfigMap 并创建 X.509 MongoDB 用户:

kubectl apply -f x509-mongodb-user.yaml

您应该看到类似于以下内容的输出:

mongodbuser.mongodb.com/new-x509-user created
5

运行以下命令以检查new-x509-user的状态:

kubectl get mdbu/new-x509-user -o yaml

您应该看到类似于以下内容的输出:

NAME CREATED AT
new-x509-user 8m
6

运行以下命令,查找 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
7

创建 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'