网络、负载均衡、服务网格
MongoDB Ops Manager在多个Kubernetes 集群中部署 应用程序时,请考虑以下附加要求:
联网概述
下表说明:
MongoDB Ops Manager应用程序实例的连接来源
MongoDB Ops Manager应用程序连接到
URLMongoDB Ops Manager每种类型的连接使用的 以及配置方法。
连接来源 | 目的或行动 | URL的MongoDB Ops Manager |
---|---|---|
Kubernetes Operator | 配置MongoDB Ops Manager实例并在应用程序数据库处于运行状态后启用监控 | 通过以下形式的默认MongoDB Ops Manager FQDN : <om_resource_name>-svc.<namespace>.svc.cluster.local 或 spec.opsManagerURL 的值 |
Kubernetes Operator | 配置特定的 MongoDB 资源或MongoDBMultiCluster 资源部署 | 通过项目的 ConfigMap,在创建项目时配置 |
应用程序数据库 Pod 中的MongoDB Agent助手 | 接收自动化配置 | 无需连接到MongoDB Ops Manager实例。 MongoDB Agent正在无头模式下运行。 |
应用程序数据库 Pod 中的监控代理 | 发送监控数据 | 通过 <om_resource_name>-svc.<namespace>.svc.cluster.local 形式的默认MongoDB Ops Manager FQDN或spec.opsManagerURL 的值 |
MongoDB 或 MongoDBMultiCluster 资源 Pod 中的MongoDB Agent助手 | 接收自动化配置、备份和恢复进程 | 通过项目的 ConfigMap,在创建项目时配置 |
MongoDB 或MongoDBMultiCluster 资源 Pod 中的监控代理 | 发送监控数据 | 通过项目的 ConfigMap,在创建项目时配置 |
user | 使用MongoDB Ops Manager用户界面或API | 通过向外部公开的MongoDB Ops Manager实例的公共外部域,配置为 spec.externalConnectivity |
服务网格
将托管应用程序数据库实例和MongoDB Ops Manager应用程序实例的节点添加到同一服务网格中,以便:
已部署组件之间的网络连接。
跨集群 DNS 解析。
为了简化Kubernetes Operator 和MongoDB Ops Manager实例之间的网络配置,我们建议您添加 Operator 集群,即将您将Kubernetes Operator 安装到同一服务网格的Kubernetes集群,但这不是严格要求。 如果将 Operator 集群包含在同一服务网格中,则可以将其用作MongoDB Ops Manager应用程序和应用程序数据库实例的主机。
为以下 Kubernetes 集群配置服务网格,并将它们包含在网格配置中:
您在其上部署 Kubernetes Operator 的“operator 集群”。
KubernetesMongoDB Ops Manager将托管 应用程序实例的“成员 集群”。
将托管应用程序数据库实例的其他Kubernetes成员集群,或用于MongoDB Ops Manager的相同成员集群。
为所有Kubernetes集群配置相同的服务网格可确保每个MongoDB Ops Manager实例都可以与多个Kubernetes集群中部署的任何应用程序数据库实例建立安全连接。
在成员 集群上部署应用程序数据库实例后,您在成员Kubernetes 集群上部署的每个 实例的API MongoDB Ops ManagerKubernetes端点必须能够直接连接到每个应用程序数据库实例。这允许Kubernetes Operator 完成在成员集群上部署MongoDB Ops Manager实例所需的阶段,例如创建管理员用户和配置备份。
负载均衡
在大多数情况下,您必须提供对MongoDB Ops Manager应用程序的外部访问权限,以使用户能够访问MongoDB Ops Manager用户界面。
对于Ops Manager 应用程序的多集群部署,每个集群都可以使用 服务 单独公开其托管Ops Manager 应用程序的 Pod 类型为LoadBalancer
。
使用spec.externalConnectivity
创建LoadBalancer
服务,并将外部域指向该服务的外部 IP 地址。 即使配置了多个MongoDB Ops Manager应用程序实例, Kubernetes服务也会以循环方式将流量发送到托管MongoDB Ops Manager应用程序的所有可用 Pod。
由于 Kubernetes Operator 不支持对所有 Kubernetes 集群中所有 Pod 的流量进行负载均衡,因此您必须在 Kubernetes Operator 配置之外配置负载均衡。
以下示例和图表说明了跨多个 Kubernetes 集群配置负载均衡的多种方法。
图表示例1 :外部负载均衡器
Kubernetes为托管MongoDB Ops Manager 应用程序和应用程序数据库的所有 集群配置外部网络负载均衡器(直通代理)。MongoDB Ops Manager应用程序是无状态的。 负载均衡器可以循环方式将流量转发到每个集群的LoadBalancer
服务,或者一次转发一个集群,前提是您将负载均衡器配置为当一个集群处于主动状态时另一个集群处于被动状态。 下图说明了这种方法。
在此图中:
Kubernetes Operator 在每个成员集群上创建类型为
LoadBalancer
且名为<om_resource_name>-svc-ext
的外部服务,并分配外部 IP 地址。 您可以使用spec.externalConnectivity
为所有成员集群全局配置此服务。 或者,如果此服务特定于每个成员集群,则可以使用spec.clusterSpecList.externalConnectivity
进行配置。Kubernetes Operator 为MongoDB Ops Manager应用程序创建的每项服务始终包含当前集群中托管MongoDB Ops Manager应用程序的所有 Pod。
图表示例2 :使用代理的服务网格实现负载均衡
使用服务网格提供的跨集群负载均衡功能。
在每个Kubernetes 集群中,Kubernetes Operator 都会创建一个 服务 ,名为<om_resource_name>-svc
,可用于在所有成员集群中托管 应用程序实例的所有可用 PodMongoDB Ops Manager 之间分配流量。
您可以在其中一个集群中部署代理组件(如 Nginx 或 HAProxy),通过公共FQDN通过互联网向外部公开,并将代理配置为通过 TCP 直通将所有网络流量转发到名为<om_resource_name>-svc.<namespace>.svc.cluster.local
的服务。 。
下图说明了这种方法。
在此图中:
Kubernetes Operator 在每个成员集群上创建一个 服务 类型为
ClusterIP
,您可以使用<om_resource_name>-svc.<namespace>.svc.cluster.local
进行访问。它是一项在其端点中包含此成员集群中部署的所有 Pod 的服务。Kubernetes 集群之间的流量由服务网格处理。 当Kubernetes Operator 在每个成员集群上为MongoDB Ops Manager应用程序创建服务时, Kubernetes Operator 不会为这些服务的名称分配集群索引后缀。 因此,服务网格可以对所有集群中托管MongoDB Ops Manager应用程序的所有 Pod 执行流量负载均衡。
在每个成员集群中,Kubernetes Operator 部署一个名为
<om_resource_name>-<cluster-index>
的 StatefulSet。 例如,om-0
是具有索引0的成员集群的 StatefulSet 名称。尽管每个集群都部署了
<om_resource_name>-svc
ClusterIP
服务,但该服务不处理用户流量。 当用户访问Member Cluster 1
中的服务时,服务网格会处理流量。托管MongoDB Ops Manager应用程序的每个 Pod 均以其 StatefulSet 名称命名。 例如,
om-1-2
是集群中索引为1的 Pod 编号为2的名称。