使用 X.509 身份验证管理数据库用户
Kubernetes 操作符支持管理在启用了 TLS和 X.509 内部集群身份验证的情况下运行的部署的数据库用户。
支持的身份验证机制
Kubernetes Operator 在其创建的部署中支持 SCRAM、LDAP 和 X. 509身份验证机制。 在Kubernetes Operator 创建的部署中,您不能使用 MongoDB Ops Manager执行以下操作:
为部署配置其他身份验证机制。
托管不使用 SCRAM、LDAP 或 X.509 身份验证的用户。
启用 X.509 身份验证后,您可以使用MongoDB509 MongoDB Ops ManagerOps Manager界面或 CustomResourceDefinition 添加 X. 用户。
先决条件
在管理数据库用户之前,您必须部署启用了 TLS 和 X. 的 副本集 或 分片集群509 。
如果您需要为 MongoDB 用户生成 X.509 证书,请参阅生成 X.509 客户端证书。
添加数据库用户
将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>
复制以下示例CustomResourceDefinition 。
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: name: <resource-name> spec: username: <rfc2253-subject> db: "$external" mongodbResourceRef: name: '<MongoDB-Resource-name>' roles: - db: <database-name> name: <role-name> ...
打开您首选的文本编辑器,并将示例CustomResourceDefinition 粘贴到新的文本文件中。
根据需要更改以下参数的行。
使用下表指导您更改MongoDB 用户资源规范中的相关行:
键 | 类型 | 说明 | 例子 | |||
---|---|---|---|---|---|---|
metadata.name | 字符串 | 数据库用户资源的名称。 资源名称必须少于或等于 44 个字符。 | mms-user-1 | |||
spec.username | 字符串 | 由 Kubernetes CA (Kube CA) 签名的 x509 客户端证书的主题行。 重要提示: 用户名必须符合 RFC2253 LDAPv3 标识名标准。 要获取 X.509 证书的主题行,请运行以下命令:
| CN=mms-user,U=My Organizational Unit,O=My Org,L=New York,ST=New York,C=US | |||
spec.opsManager.configMapRef.name | 字符串 | 包含将添加用户的 MongoDB database 的项目的名称。 spec.cloudManager.configMapRef.name 设置是此设置的别名,可以用来代替它。 | my-project | |||
spec.roles.db | 字符串 | 角色可以操作的数据库。 | admin | |||
spec.mongodbResourceRef.name | 字符串 | 与此用户关联的MongoDB 资源的名称。 | my-resource | |||
spec.roles.name | 字符串 | readWriteAnyDatabase |
将用户的任何其他角色添加到 CustomResourceDefinition 。
您可以使用以下示例中定义的格式向此用户授予其他角色:
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: name: mms-user-1 spec: username: CN=mms-user,U=My Organizational Unit,O=My Org,L=New York,ST=New York,C=US project: my-project db: "$external" roles: - db: admin name: backup - db: admin name: restore ...
创建用户。
调用以下 Kubernetes 命令来创建数据库用户:
kubectl apply -f <database-user-conf>.yaml
当您创建新的MongoDB database 用户时,Kubernetes Operator 会自动创建新的Kubernetes 密钥 。Kubernetes 的 秘密 包含有关新数据库用户的以下信息:
username
:数据库用户的用户名password
:数据库用户的密码connectionString.standard
:标准连接string ,可以让您以此数据库用户的身份连接到数据库。connectionString.standardSrv
: DNS 种子列表连接string ,可以让您以此数据库用户的身份连接到数据库。
注意
或者,您可以在MongoDB 用户资源规范中指定可选的spec.connectionStringSecretName
字段,以指定 Kubernetes Operator 创建的连接字符串密钥的名称。
删除数据库用户
要删除数据库用户,请将metadata.name
从用户 ConfigMap 传递给 到以下命令:
kubectl delete mdbu <metadata.name>