使用 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 ...
将复制的示例部分粘贴到现有副本集资源中。
打开您首选的文本编辑器并粘贴 对象 规范位于资源文件末尾的spec
部分。
为副本集资源配置常规 X.509 设置。
要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:
为副本集资源配置内部 X.509 设置。
要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:
键 | 类型 | 必要性 | 说明 | 例子 |
---|---|---|---|---|
字符串 | 必需 | 使用此设置启用X. 509内部集群身份验证。 重要提示:内部集群身份验证一旦启用就无法禁用。 | X509 |
将更改应用于副本集部署。
调用以下 Kubernetes 命令来更新副本集:
kubectl apply -f <replica-set-conf>.yaml
跟踪部署状态。
要检查 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 create secret tls <prefix>-<metadata.name>-cert \ --cert=<replica-set-tls-cert> \ --key=<replica-set-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
为代理的 X.509 证书续订密钥。
运行此kubectl
命令以更新现有 密钥 509存储代理的 X. 证书:
kubectl create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
为分片集群配置 X.509 内部身份验证
先决条件
在使用 X.509 保护分片集群之前,请部署 TLS 加密的分片集群。
启用 X.509 内部身份验证
为分片的 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 ...
将复制的示例部分粘贴到现有的分片集群资源中。
打开您首选的文本编辑器并粘贴 对象 规范位于资源文件末尾的spec
部分。
为分分片集群资源配置常规 X.509 设置。
要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:
为分分片集群资源配置内部 X.509 设置。
要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:
键 | 类型 | 必要性 | 说明 | 例子 |
---|---|---|---|---|
字符串 | 必需 | 使用此设置启用X. 509内部集群身份验证。 重要提示:内部集群身份验证一旦启用就无法禁用。 | X509 |
更新并重新启动分片集群部署。
在任意目录中,调用以下Kubernetes命令来更新并重新启动分片分片集群:
kubectl apply -f <sharded-cluster-conf>.yaml
跟踪部署状态。
要检查 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 -
为分片的 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> \ --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
命令以更新现有 密钥 509存储代理的 X. 证书:
kubectl create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -