Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/ /

生成 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 用户并连接到启用 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'

后退

使用 ConfigMap 创建一个项目

来年

部署 MongoDB 数据库资源