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

使用 X.509 进行安全内部身份验证

在此页面上

  • 一般先决条件
  • 为副本集配置 X.509 内部身份验证
  • 先决条件
  • 启用 X.509 内部身份验证
  • 为副本集续订内部身份验证 X.509 证书
  • 为分片集群配置 X.509 内部身份验证
  • 先决条件
  • 启用 X.509 内部身份验证
  • 为分片集群续订内部身份验证 X.509 证书

本指南将指导您如何配置:

  • 集群中 MongoDB 节点之间的 X.509 内部身份验证。

  • 从客户端到 MongoDB 实例的 X.509 身份验证。

Kubernetes 操作符不支持集群中 MongoDB 节点之间的其他身份验证方案。

注意

你无法在 Kubernetes 集群中保护 MongoDB 的独立实例。

在使用 TLS加密保护任何 MongoDB 部署之前,请完成以下操作:

  • 安装 Kubernetes Operator

  • 为 Kubernetes 操作符 创建档案

在项目级别启用 X.509 身份验证会将所有代理配置为在与 MongoDB 部署通信时使用 X.509 客户端身份验证。

X.509 客户端身份验证需要满足以下条件之一:

  • Cloud Manager

  • Ops Manager 4.1.7 或更高版本

  • Ops Manager 4.0.11 或更高版本

在使用 X.509 保护副本集之前,请部署 TLS 加密的副本集。

1

运行此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 通信的 TLS 密钥命名为 mdb-my-deployment-cert。此外,您还必须命名内部集群身份验证(如果启用)的 TLS 密钥为 mdb-my-deployment-clusterfile

2

更改此 YAML 文件的设立,以匹配所需的副本集配置。

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
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...
3

打开您首选的文本编辑器并粘贴 对象 规范位于资源文件末尾的spec 部分。

4

要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:

类型
必要性
说明
例子
spec.security
.authentication
布尔
必需
将此值设置为true可对 MongoDB 部署启用身份验证。
true
spec.security
.authentication
阵列
可选的
将此值设置为["X509"]
["X509"]
5

要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:

类型
必要性
说明
例子
spec.security
.authentication
字符串
必需

使用此设置启用X. 509内部集群身份验证。

重要

启用内部集群身份验证后,就无法将其禁用。

X509
6
7

调用以下 Kubernetes 命令来更新副本集:

kubectl apply -f <replica-set-conf>.yaml
8

要检查 MongoDB 资源的状态,请使用以下命令:

kubectl get mdb <resource-name> -o yaml -w

设置 -w (观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running 状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除

如果您已经创建了证书,我们建议您使用以下过程定期续订证书。

1

如果您尚未执行,请运行以下命令,执行所创建命名空间的所有 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>
2

运行此 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 -
3

运行此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 -
4

运行此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 保护分片集群之前,请部署 TLS 加密的分片集群。

1

运行该 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>
2

运行此kubectl 命令以创建新 密钥 存储分片集群配置服务器的证书:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \
--cert=<config-clusterfile-tls-cert> \
--key=<config-clusterfile-tls-cert>
3

运行此kubectl 命令以创建新 密钥 用于存储分片集群mongos 证书:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \
--cert=<mongos-clusterfile-tls-cert> \
--key=<mongos-clusterfile-tls-cert>
4

更改此 YAML 文件的设置,以匹配所需的分片集群配置。

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-sharded-cluster>
6spec:
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...
5

打开您首选的文本编辑器并粘贴 对象 规范位于资源文件末尾的spec 部分。

6

要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:

类型
必要性
说明
例子
spec.security
.authentication
布尔
必需
将此值设置为true可对 MongoDB 部署启用身份验证。
true
spec.security
.authentication
阵列
可选的
将此值设置为["X509"]
["X509"]
7

要在部署中启用TLS和 X.509,请在 Kubernetes 对象中配置以下设置:

类型
必要性
说明
例子
spec.security
.authentication
字符串
必需

使用此设置启用X. 509内部集群身份验证。

重要

启用内部集群身份验证后,就无法将其禁用。

X509
8
9

在任意目录中,调用以下 Kubernetes 命令来更新并重新启动分片集群:

kubectl apply -f <sharded-cluster-conf>.yaml
10

要检查 MongoDB 资源的状态,请使用以下命令:

kubectl get mdb <resource-name> -o yaml -w

设置 -w (观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running 状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除

如果您已经创建了证书,我们建议您使用以下过程定期续订证书。

1

如果您尚未执行,请运行以下命令,执行所创建命名空间的所有 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>
2

运行该 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 -
3

运行此 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 -
4

运行此kubectl 命令以更新现有 密钥 用于存储分片集群mongos 证书:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \
--cert=<mongos-tls-cert> \
--key=<mongos-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
5

运行该 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 -
6

运行此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 -
7

运行此kubectl 命令以更新现有 密钥 用于存储分片集群mongos 证书:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \
--cert=<mongos-clusterfile-tls-cert> \
--key=<mongos-clusterfile-tls-cert> \
--dry-run=client \
-o yaml |
kubectl apply -f -
8

运行此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 -