当您将启用 TLS 的副本集从虚拟机迁移到 Kubernetes 时,一个副本集就是一个信任域。从签署虚拟机证书的同一证书授权机构 (CA) 颁发 Kubernetes 节点证书。这是唯一专门针对迁移的 TLS 要求。通用的 Kubernetes 操作符 TLS 文档涵盖了所有其他关于配置 TLS 的内容。CA 不匹配会导致测试运行失败,设计如此。要了解演练运行如何发现该故障,请参阅 使用演练运行验证迁移就绪性。
重要
此页面上的字段仅用于迁移。不要在全新的 Kubernetes 操作符部署上设置它们,除非字段说明另有规定。
关于此任务
要了解如何颁发证书、构建 Secrets 和 ConfigMaps,以及在 MongoDB 自定义资源上配置常规 TLS 设置,请参阅:
安全设置查看完整的
spec.security.tls以及相关字段。设置 cert-manager 集成以便使用
cert-manager颁发证书。生成 X.509 客户端证书以手动颁发证书。
在按照该文档进行迁移时,请从签署虚拟机证书的同一个 CA 颁发 Kubernetes 节点证书,而不是从新的 CA 颁发。名为 <resourceName>-ca 的 CA ConfigMap 必须包含一个从该同一 CA 填充的 ca-pem 密钥。
开始之前
您需要满足以下条件:
虚拟机部署的现有 CA 证书和密钥材料。
cert-manager或相同的工具用于颁发来自同一个 CA 的 Kubernetes 节点证书。来自 迁移副本集到 Kubernetes 生成的
MongoDB自定义资源
步骤
从源 CA 创建证书和 CA 资源。
请遵循 设置 cert-manager 集成 或 生成 X.509 客户端证书 以创建名为 <certsSecretPrefix>-<resourceName>-cert 的 kubernetes.io/tls Secret,并从签署虚拟机证书的同一 CA 颁发证书。
创建命名为 <resourceName>-ca 的 CA ConfigMap ,并从该 CA 填充 ca-pem 密钥。
如果使用 X.509 代理身份验证,还要创建 <certsSecretPrefix>-<resourceName>-agent-certs Secret 并将 spec.security.authentication.agents.clientCertificateSecretRef 设置为引用它。此要求仅适用于代理身份验证,而不适用于内部集群身份验证(spec.security.authentication.internalCluster)。
将路径兼容性字段设置为与源部署匹配。
这些字段的存在只是为了使 Kubernetes 操作符对文件路径的看法与虚拟机部署已经安排其证书和密钥文件的方式匹配。仅设置应用于源部署的选项:
spec.security.tls.caFilePath:CA 投影到 Pod 内部的绝对路径。默认为/mongodb-automation/tls/ca/ca-pem。该路径必须至少包含两个路径段。应用程序数据库不支持此字段。如果您的podTemplate在此路径上挂载了另一个卷,则该挂载会遮蔽投影的 CA,并且 Ops Manager 代理无法读取它。spec.security.authentication.agents.autoPEMKeyFilePath:数据库 Pod 中代理组合 PEM 文件的绝对路径。此字段仅配置代理身份验证。设置此字段将设置 Ops Managertls.autoPEMKeyFilePath值,并将clientCertificateSecretRef引用的Secret挂载到该路径。它默认为哈希派生的代理证书挂载路径,设置它需要已设置spec.security.authentication.agents.clientCertificateSecretRef。仅当虚拟机部署使用非默认代理 PEM 路径时,才设置此字段。spec.downloadBase:MongoDB Ops Manager 代理二进制文件的下载目录。默认为/var/lib/mongodb-mms-automation。Kubernetes Operator 从此值派生密钥文件路径为<downloadBase>/keyfile。
运行试运行以确认 CA 匹配。
在仍然存在 dry-run 注释的情况下应用资源,并检查 NetworkConnectivityVerified 条件。要了解如何读取结果以及在失败时该怎么做,请参阅 通过试运行验证迁移就绪情况。
对于分片集群
分片集群需要为每个组件提供一个证书,遵循以下模式:配置服务器使用 <resourceName>-config-*,每个分片使用 <resourceName>-<shardIndex>-*,mongos 路由器使用 <resourceName>-mongos-*。
注意
在协调之前,对比生成的资源,确认每个组件的准确 Secret 名称。要了解分片集群迁移与副本集迁移有何不同,请参阅 将分片集群迁移到 Kubernetes。