使用 X.509 进行安全内部身份验证
在此页面上
本指南将指导您如何配置:
集群中 MongoDB 节点之间的 X.509 内部身份验证。
从客户端到 MongoDB 实例的 X.509 身份验证。
Kubernetes 操作符不支持集群中 MongoDB 节点之间的其他身份验证方案。
注意
你无法在 Kubernetes 集群中保护 MongoDB 的独立实例。
一般先决条件
在使用 TLS加密保护任何 MongoDB 部署之前,请完成以下操作:
在项目级别启用 X.509 身份验证会将所有代理配置为在与 MongoDB 部署通信时使用 X.509 客户端身份验证。
X.509 客户端身份验证需要满足以下条件之一:
Cloud Manager
Ops Manager 4.1.7 或更高版本
Ops Manager 4.0.11 或更高版本
为副本集配置 X.509 内部身份验证
先决条件
在使用 X.509 保护副本集之前,请部署 TLS 加密的副本集。
启用 X.509 内部身份验证
创建 密钥 用于 X.509 证书。
运行此kubectl
命令以创建新 密钥 存储副本集的证书:
kubectl create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<replica-set-clusterfile-tls-cert> \ --key=<replica-set-clusterfile-tls-key>
注意
您必须在密钥前面加上 <prefix>-<metadata.name>
作为前缀。
示例,如果您将部署调用为my-deployment
并将前缀设立为mdb
,则必须为客户端 TLS 通信 命名 TLSmdb-my-deployment-cert
密钥。此外,您必须将用于内部集群身份验证(如果已启用)的TLS密钥命名为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 ...
为509 副本集 资源配置内部 X. 设置。
要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:
键 | 类型 | 必要性 | 说明 | 例子 |
---|---|---|---|---|
字符串 | 必需 | 使用此设置启用X. 509内部集群身份验证。 重要提示:内部集群身份验证一旦启用就无法禁用。 | X509 |
保存 副本集 配置文件。
跟踪部署状态。
要检查 MongoDB
资源的状态,请使用以下命令:
kubectl get mdb <resource-name> -o yaml -w
设置 -w
(观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running
状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。
为副本集续订内部身份验证 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>
更新 密钥 用于 X.509 证书。
运行此kubectl
命令以更新现有 密钥 存储副本集的证书:
kubectl create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<replica-set-clusterfile-tls-cert> \ --key=<replica-set-clusterfile-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
为分片集群配置 X.509 内部身份验证
先决条件
在使用 X.509 保护分片集群之前,请部署 TLS 加密的分片集群。
启用 X.509 内部身份验证
创建 密钥 509用于分片的 X. 证书。
运行该 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>
创建 密钥 用于配置服务器的 X.509 证书。
运行此kubectl
命令以创建新 密钥 存储分分片集群配置服务器的证书:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \ --cert=<config-clusterfile-tls-cert> \ --key=<config-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 设置。
要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:
键 | 类型 | 必要性 | 说明 | 例子 |
---|---|---|---|---|
字符串 | 必需 | 使用此设置启用X. 509内部集群身份验证。 重要提示:内部集群身份验证一旦启用就无法禁用。 | X509 |
保存 分片集群 配置文件。
跟踪部署状态。
要检查 MongoDB
资源的状态,请使用以下命令:
kubectl get mdb <resource-name> -o yaml -w
设置 -w
(观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running
状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。
为分片集群续订内部身份验证 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>
更新 密钥 用于分片的 TLS 证书。
运行该 kubectl
命令以更新用于存储分片集群分片证书的现有密钥:
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 -
更新 密钥 用于配置服务器的 TLS 证书。
运行此 kubectl
命令,以更新存储分片集群配置服务器证书的现有密钥:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-cert \ --cert=<config-tls-cert> \ --key=<config-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
更新 密钥 509用于分片的 X. 证书。
运行该 kubectl
命令以更新用于存储分片集群分片证书的现有密钥:
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 -
更新 密钥 用于配置服务器的 X.509 证书。
运行此kubectl
命令以更新现有 密钥 存储分片集群配置服务器的证书:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \ --cert=<config-clusterfile-tls-cert> \ --key=<config-clusterfile-tls-cert> \ --dry-run=client \ -o yaml | kubectl apply -f -