
# MCS概述
#### 为什么需要MCS
[Service](https://kubernetes.io/zh-cn/docs/concepts/services-networking/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。
图1MCS工作原理   
![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000001801477477.png "点击放大")
MCS的工作原理如[图1]，实现流程如下：
1. 用户在集群联邦控制面创建工作负载，并为其配置Service对象。图中名为foo的Service部署在cluster B中。
2. 用户在集群联邦控制面创建MCS对象，并在MCS中配置访问规则，包括下发集群与目标集群名称等。图中的下发集群为cluster B，目标集群为cluster A。
3. karmada-controller-manager监控到Service和MCS对象的变化，将Service下发到源集群，并将源集群中的Endpoint Slices采集并下发到目标集群。
4. 用户在目标集群（cluster A）中访问部署在下发集群（cluster B）中的Service时，请求将会被路由到源集群的服务后端，从而实现跨集群服务发现及访问。
 
#### MCS的使用流程
MCS的使用流程见[图2]，具体的使用流程如下：
1. 检测集群间的节点网络互通与容器网络互通，若未互通则需按照要求打通。具体操作请参见[设置集群网络](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0377.html)。
2. 在集群联邦中提前部署可用的工作负载和服务。具体操作请参见[准备工作](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0378.html#ucs_01_0378__section3746123012276)。
3. 创建MCS对象，并在MCS中配置访问规则。具体操作请参见[通过Kubectl命令创建MCS对象](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0378.html#ucs_01_0378__section7746559101919)。
4. 跨集群访问服务，即在MCS中配置的目标集群中访问部署在下发集群中的服务。具体操作请参见[跨集群访问服务](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0378.html#ucs_01_0378__section687594962717)。
图2MCS使用流程   
![](https://support.huaweicloud.com/usermanual-ucs/zh-cn_image_0000001749257256.png "点击放大")
