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

使用 X.509 保护客户端身份验证

在此页面上

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

MongoDB Enterprise Kubernetes Operator 可以使用 X.509 证书对 MongoDB 部署的客户端应用程序进行身份验证。

本指南将指导您如何配置从客户端到 MongoDB 实例的 X.509 身份验证。

注意

你无法在 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

更改此 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...
2

打开首选文本编辑器,将资源文件末尾的对象 规范粘贴到 部分。spec

3

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

类型
必要性
说明
例子
spec.security
.authentication

布尔

必需

将此值设置为true可对 MongoDB 部署启用身份验证。

true

spec.security
.authentication

阵列

可选的

将此值设置为["X509"]

["X509"]

4
5

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

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

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

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

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

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

注意

要自动续订 Ops Manager 部署的证书,请考虑设置证书经理集成。

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 命令以更新现有 密钥 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

更改此 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...
2

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

3

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

类型
必要性
说明
例子
spec.security
.authentication

布尔

必需

将此值设置为true可对 MongoDB 部署启用身份验证。

true

spec.security
.authentication

阵列

可选的

将此值设置为["X509"]

["X509"]

4
5

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

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

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

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

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

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

注意

要自动续订 Ops Manager 部署的证书,请考虑设置证书经理集成。

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 命令以更新现有 密钥 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 -