文档菜单
文档首页
/
MongoDB企业级Kubernetes操作符
/ /

使用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操作员

  • 为Kubernetes操作员创建凭证

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

X.509客户端认证需要以下之一

  • 云管理员

  • 运营管理员4.1.7或更高版本

  • 运营管理员4.0.11或更高版本

在您使用 X.509 对副本集进行安全设置之前,部署一个 TLS 加密副本集。

1

运行以下命令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

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(监视)标志时,当配置更改时,输出会立即刷新,直到状态阶段达到运行状态。有关资源部署状态的更多信息,请参阅Kubernetes Operator 故障排除。

如果您已经创建了证书,我们建议您使用以下程序定期更新它们。

1

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

运行以下 kubectl 命令以更新存储副本集证书的现有 secret

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命令来更新存储副本集证书的现有secret

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命令以更新存储代理X.509证书的现有密钥

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 命令以创建一个新的 secret,该secret存储了分片集群配置服务器的证书。

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

运行以下 kubectl 命令来创建一个新的 secret,该 secret 存储了分片集群的 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(监视)标志时,当配置更改时,输出会立即刷新,直到状态阶段达到运行状态。有关资源部署状态的更多信息,请参阅Kubernetes Operator 故障排除。

如果您已经创建了证书,我们建议您使用以下程序定期更新它们。

1

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

运行以下kubectl命令来更新存储分片集群分片证书的现有secretsecret

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命令以更新存储分片集群配置服务器证书的现有secretsecret

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 证书的现有 secret

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命令来更新存储分片集群分片证书的现有secretsecret

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命令来更新存储分片集群配置服务器证书的现有secretsecret

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 证书的现有 secret

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命令以更新存储代理X.509证书的现有密钥

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 -