将由 MongoDB Ops Manager 或 Cloud Manager 在虚拟机上托管的部署迁移到 Kubernetes Operator 下的 Kubernetes,需要虚拟机托管和 Kubernetes Pod 之间的双向网络连接。您需要自行预配此连接,而不是由 Kubernetes 操作符 来完成。
这种连接性完全取决于您自己的网络设置,包括您的网络拓扑结构、防火墙规则、DNS 配置和云提供商。因此,无法提供具体的通用指导。本页的其余部分介绍了 Kubernetes 操作符自动检查的内容、它不检查的内容以及用于将 Kubernetes Pods 暴露给虚拟机的配置。
Dry 运行验证的内容
预运行连接验证器作业检查虚拟机节点是否可从 从 Kubernetes 环境访问。它不会检查从虚拟机到 Kubernetes 的反向。您必须使用本页面后面的设置相关检查表,自行验证该方向。
配置外部访问
为使虚拟机节点能够访问到 Kubernetes Pod,请使用 spec.externalAccess。这与 Kubernetes 操作符在迁移之外使用的外部访问机制相同:它会为每个 Pod 创建 LoadBalancer 或 NodePort,从而将 Pod 暴露到 Kubernetes 集群之外。
(可选)将 spec.externalAccess.externalDomain 设置为虚拟机节点可以解析的主机名。您需要负责此主机名的 DNS 设置;Kubernetes Operator 不会为您创建或管理 DNS 记录。
重要
如果您将 MongoDB Search 或向量搜索与此部署一起使用,请勿设置 externalDomain。MongoDBSearch 不支持设置了 externalDomain 的 MongoDB 资源。请改为独立使用 spec.externalAccess。要了解更多,请参阅 MongoDB Search 与迁移的交互。
警告
您创建集群后无法删除 externalDomain。在设置此字段之前,请确认您的主机名和 DNS 策略。
Kubernetes 节点主机名遵循 <metadata.name>-0.<spec.externalAccess.externalDomain> 模式,其中数字索引会为每个附加节点递增 1。
验证检查清单
没有任何单一命令可以保证双向连接都已正确配置。使用此清单查看您的设置,并根据您自己的网络调整每个项目:
确认您的 Kubernetes 节点的主机名可从虚拟机节点解析。
确认 Kubernetes 节点或负载均衡器 IP 地址可从虚拟机访问。
分片集群
对于分片集群,您可以针对每个组件配置外部访问:
spec.externalAccess仅配置mongos。spec.mongos.externalAccess取代mongos的根级字段。spec.shard.externalAccess并且必须分别设置spec.configSrv.externalAccess以公开分片和配置服务器副本集的每个 Pod。
连接字符串密钥
Kubernetes 操作符 会自动生成一个名为 <metadata.name>-cluster-connection-string 的连接字符串 Secret。此 Secret 不包含任何凭证,并且 Kubernetes Operator 会在迁移过程中随着成员资格的变化使其与活动节点保持同步。
将你的应用程序指向此 Secret,而不是硬编码的连接字符串。这样做意味着,在迁移过程中成员资格的变动不需要对您的应用程序进行硬切换。
排序
在将部署扩展到 Kubernetes 中之前,请配置外部访问和 externalDomain。Kubernetes 操作符不支持在迁移已经进行之后添加这些设置。