使用X.509安全内部认证
本页内容
本指南指导您如何配置
集群中MongoDB节点之间的X.509内部认证。
客户端到您的MongoDB实例的X.509认证。
的Kubernetes操作员不支持集群中MongoDB节点之间的其他认证方案。
注意
您无法在Kubernetes集群中安全地保护MongoDB独立实例。
一般先决条件
在您使用TLS加密来保护任何MongoDB部署之前,请完成以下操作
在项目级别启用X.509认证配置所有代理在与MongoDB部署通信时使用X.509客户端认证。
X.509客户端认证需要以下之一
云管理员
运营管理员4.1.7或更高版本
运营管理员4.0.11或更高版本
配置副本集的X.509内部认证
先决条件
在您使用 X.509 对副本集进行安全设置之前,部署一个 TLS 加密副本集。
启用 X.509 内部身份验证
创建secret 用于您的 X.509 证书。
运行以下命令kubectl
命令以创建一个新的 secret 以存储副本集的证书
kubectl create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<replica-set-clusterfile-tls-cert> \ --key=<replica-set-clusterfile-tls-key>
注意
您必须以 <prefix>-<metadata.name>
为前缀命名您的 secret。
例如,如果您将部署命名为 my-deployment
并且您设置了前缀为 mdb
,则必须为客户端 TLS 通信命名 TLS secret 为 mdb-my-deployment-cert
。同样,您必须为内部集群身份验证(如果启用)命名 TLS secret 为 mdb-my-deployment-clusterfile
。
复制示例 副本集 资源。
更改此 YAML 文件的设置,以匹配您所需的 副本集 配置。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 7 members: 3 8 version: "4.2.2-ent" 9 opsManager: 10 configMapRef: 11 # Must match metadata.name in ConfigMap file 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 type: ReplicaSet 15 persistent: true
16 security: 17 tls: 18 ca: <custom-ca> 19 certsSecretPrefix: <prefix> 20 authentication: 21 enabled: true 22 modes: ["X509"] 23 internalCluster: "X509" 24 ...
配置您副本集资源的内部X.509设置。
为了在您的部署中启用TLS和X.509,请在您的Kubernetes对象中配置以下设置
密钥 | 类型 | 必要性 | 描述 | 示例 |
---|---|---|---|---|
字符串 | 必需 | 使用此设置启用X.509内部集群身份验证。 重要:一旦启用内部集群身份验证,则无法禁用。 |
|
保存您的副本集配置文件。
跟踪您的部署状态。
要检查您的MongoDB
资源状态,请使用以下命令
kubectl get mdb <resource-name> -o yaml -w
使用-w
(监视)标志时,当配置更改时,输出会立即刷新,直到状态阶段达到运行
状态。有关资源部署状态的更多信息,请参阅Kubernetes Operator 故障排除。
为副本集更新内部认证X.509证书
如果您已经创建了证书,我们建议您使用以下程序定期更新它们。
配置kubectl
默认使用您的命名空间。
如果您尚未这样做,请运行以下命令以在您创建的命名空间中执行所有kubectl
命令。
注意
如果您正在部署运营管理员资源在:
多Kubernetes集群MongoDB部署中
将
context
设置为中央集群的名称,例如:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
。在,将--namespace
设置为与您的相同作用域,例如:kubectl config --namespace "mongodb"
。
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
配置分片集群的X.509内部认证
先决条件
在您使用X.509保护您的分片集群之前,请部署一个TLS加密的分片集群。
启用X.509内部认证
为您的Shards X.509证书创建一个密钥。
运行以下kubectl命令创建一个新的密钥,该密钥存储了分片集群的分片证书
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-clusterfile \ --cert=<shard-0-clusterfile-tls-cert> \ --key=<shard-0-clusterfile-tls-cert> kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-clusterfile \ --cert=<shard-1-clusterfile-tls-cert> \ --key=<shard-1-clusterfile-tls-cert>
复制示例 分片集群 资源。
修改此 YAML 文件的设置,以匹配您所需的 分片集群 配置。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: "4.2.2-ent" 12 opsManager: 13 configMapRef: 14 name: <configMap.metadata.name> 15 # Must match metadata.name in ConfigMap file 16 credentials: <mycredentials> 17 type: ShardedCluster 18 persistent: true
19 security: 20 tls: 21 ca: <custom-ca> 22 certsSecretPrefix: <prefix> 23 authentication: 24 enabled: true 25 modes: ["X509"] 26 internalCluster: "X509" 27 ...
配置您的分片集群资源的内部X.509设置。
为了在您的部署中启用TLS和X.509,请在您的Kubernetes对象中配置以下设置
密钥 | 类型 | 必要性 | 描述 | 示例 |
---|---|---|---|---|
字符串 | 必需 | 使用此设置启用X.509内部集群身份验证。 重要:一旦启用内部集群身份验证,则无法禁用。 |
|
保存您的分片集群配置文件。
跟踪您的部署状态。
要检查您的MongoDB
资源状态,请使用以下命令
kubectl get mdb <resource-name> -o yaml -w
使用-w
(监视)标志时,当配置更改时,输出会立即刷新,直到状态阶段达到运行
状态。有关资源部署状态的更多信息,请参阅Kubernetes Operator 故障排除。
为分片集群续签内部认证X.509证书
如果您已经创建了证书,我们建议您使用以下程序定期更新它们。
配置 kubectl
默认使用您的命名空间。
如果您尚未这样做,请运行以下命令以在您创建的命名空间中执行所有kubectl
命令。
注意
如果您正在部署运营管理员资源在:
多Kubernetes集群MongoDB部署中
将
context
设置为中央集群的名称,例如:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"
。在,将--namespace
设置为与您的相同作用域,例如:kubectl config --namespace "mongodb"
。
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
更新您Shards的TLS证书的secret
。secret。
运行以下kubectl
命令来更新存储分片集群分片证书的现有secret
:secret
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-cert \ --cert=<shard-0-tls-cert> \ --key=<shard-0-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f - kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-cert \ --cert=<shard-1-tls-cert> \ --key=<shard-1-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
更新您的Shards的X.509证书所用的secret。
运行以下kubectl
命令来更新存储分片集群分片证书的现有secret
:secret
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-clusterfile \ --cert=<shard-0-clusterfile-tls-cert> \ --key=<shard-0-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f - kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-clusterfile \ --cert=<shard-1-clusterfile-tls-cert> \ --key=<shard-1-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f -