MCS概述
为什么需要MCS
Service是Kubernetes中的一种资源对象,定义了一组Pod的访问方式。Service为Pod提供了一个稳定的IP地址和DNS名称,使得应用程序可以通过该IP地址或DNS名称来访问这些Pod,从而自动发现和连接到可用的Pod。在多集群场景下,为了满足数据主权、状态管理、可伸缩性等要求,需要将服务拆分至多个集群进行访问,这个过程相较单集群的服务访问而言更加困难。
MCS(Multi Cluster Service)是一种多集群Service资源对象,将Service的边界从单个集群扩展至集群联邦,帮助您简洁快速地实现跨集群服务发现和访问。
具体来说,MCS的应用场景非常广泛,典型的应用场景包括:
- 应用容灾:使用MCS,您可以在多个区域的不同集群中访问同一个Service,因此如果某个集群中应用不可用,访问请求可切换至其他集群进行处理。
- 服务共享:使用MCS,可以更便捷地在不同集群中访问公共服务(监控、日志系统等),无需为所有集群部署本地公共服务副本。
- 应用迁移:MCS桥接了不同集群服务间的通信,您可以将同一Service部署到不同集群,通过流量迁移来更轻松地进行应用迁移。
MCS(Multi Cluster Service)的类型分为南北向MCS和东西向MCS:
- 南北向MCS:类型为LoadBalancer,实现外部对工作负载的四层网络访问能力。
- 东西向MCS:类型为CrossCluster,实现集群内的服务发现能力。
MCS的工作原理
MCS的功能主要通过控制面组件karmada-controller-manager实现。karmada-controller-manager实时监控Service和MCS的变化,解析MCS对象定义的规则并负责将请求转发到相应的后端Service。
MCS的工作原理如图1,实现流程如下:
- 用户在集群联邦控制面创建工作负载,并为其配置Service对象。图中名为foo的Service部署在cluster B中。
- 用户在集群联邦控制面创建MCS对象,并在MCS中配置访问规则,包括下发集群与目标集群名称等。图中的下发集群为cluster B,目标集群为cluster A。
- karmada-controller-manager监控到Service和MCS对象的变化,将Service下发到源集群,并将源集群中的Endpoint Slices采集并下发到目标集群。
- 用户在目标集群(cluster A)中访问部署在下发集群(cluster B)中的Service时,请求将会被路由到源集群的服务后端,从而实现跨集群服务发现及访问。
MCS的使用流程
MCS的使用流程见图2,具体的使用流程如下:
- 检测集群间的节点网络互通与容器网络互通,若未互通则需按照要求打通。具体操作请参见设置集群网络。
- 在集群联邦中提前部署可用的工作负载和服务。具体操作请参见准备工作。
- 创建MCS对象,并在MCS中配置访问规则。具体操作请参见通过Kubectl命令创建MCS对象。
- 跨集群访问服务,即在MCS中配置的目标集群中访问部署在下发集群中的服务。具体操作请参见跨集群访问服务。