认识一下 Kubernetes 多集群服务 API

news2025/1/10 3:21:12

sunset-g55251915a_1280

由于各种原因,采用 Kubernetes 的企业内部存在着几个、几十甚至上百个集群。比如处于研发流程上的考虑,不同环境下都存在独立的集群;监管层面的考虑,就地存储的用户数据需要搭配应用集群;单个集群的容量限制,无法满足业务体量;可用性要求的多云、多地、多中心;Kubernetes 原地升级成本大进而考虑新建集群;等等各种原因。

这些集群彼此之间看似独立,但又有着千丝万缕的联系。比如高可用的多集群,实现了集群级的灾备,但集群中的服务如何实现跨集群的故障迁移?

我们先看下集群内的应用如何对集群外提供服务。由于 Kubernetes 网络隔离特性,存在着天然的网络边界,需要借助某些方案(如 Ingress、NodePort)来将服务暴露到集群外。虽然解决了连通性的问题,但是服务的注册和发现还无法解决。

k8s-svc-exposing

通常我们将 Service 作为 Kubernetes 平台的服务注册和发现,今天要介绍的 Multi-Cluster Service(多集群服务 API,简称 MCS API) 则可以看成是 跨 Kubernetes 集群的服务注册发现

MCS 介绍

MCS API 来自 Kubernetes Enhancement Proposal KEP-1645: Multi-Cluster Services API 目前还处于提案阶段。

MCS 的目标是既然多集群不可避免,那就定义一套 API 来实现服务的跨集群注册和发现,并且这套 API 足够轻量级,做到能够像访问本地服务一样访问其他集群的服务。

注意 MCS API 只提供 API 和实现的设计指导,不提供具体的实现。

术语

  • clusterset:集群集,集合内的集群间共享服务。
  • mcs-controller:多集群服务控制器,在多集群间完成服务的注册和发现。
  • cluster name:集群的唯一标识,用以标识注册的服务来自哪个集群。

CRD

  • ServiceExport 定义对集群集中其他集群暴露的服务,与 Service 一样必须创建在与负载相同的命名空间下,且与 Service 同名。
  • ServiceImport 定义了导入的其他集群的 Service
type ServiceExport struct {
  metav1.TypeMeta `json:",inline"`
  metav1.ObjectMeta `json:"metadata,omitempty"`
  Status ServiceExportStatus `json:"status,omitempty"`
}

type ServiceImport struct {
  metav1.TypeMeta `json:",inline"`
  metav1.ObjectMeta `json:"metadata,omitempty"`
  Spec ServiceImportSpec `json:"spec,omitempty"`
  Status ServiceImportStatus `json:"status,omitempty"`
}
type ServiceImportSpec struct {
  Ports []ServicePort `json:"ports"`
  IPs []string `json:"ips,omitempty"`
  Type ServiceImportType `json:"type"`
  SessionAffinity corev1.ServiceAffinity `json:"sessionAffinity"`
  SessionAffinityConfig *corev1.SessionAffinityConfig `json:"sessionAffinityConfig"`
}

跨集群服务注册

如果多个集群都以同样的名字和命名空间对外声明服务,这些服务将被视作单一的组合服务。例如 1 个集群集下有 4 个集群,其中 1 个集群在命名空间 bar 下有个名为 fooService。其他集群要想使用该集群的 Service,该集群需要对外声明该 Service 是可以跨集群提供服务,完成多集群服务的注册。

mcs-service

多集群服务的注册通过在 Service 的同命名空间下创建同名的 ServiceExport 资源来完成。ServiceExport 可以手动创建,也可以实现支持服务的自动注册:根据标识将集群内或者指定命名空间下的服务自动注册。

更多的设计细节,可以参考 Service Exporting 设计细节。

跨集群服务发现

ServiceExport 资源创建完成后,该服务会被集群集下的其他集群“发现”:同名的命名空间下出现同名的 ServiceImport 资源,并且该 ServiceImport 与服务注册的 Endpoint 相关联。

mcs-exported

同样,如果一个服务下线或者停止跨集群服务,删除 ServiceExport 资源后,其他集群中的 ServiceImport 也会相应地被销毁。ServiceImport 的管理,由 MCS 实现中的 mcs-controller 来完成。

值得注意的是,关于 ServiceImport 的使用,该标准中并未界定具体的实现细节。由于 Pod 在 Kubernetes 中是非永久性资源,我们访问应用的时候通常使用 Service。多集群服务的理想情况,是在使用 Service 的时候能自动使用其他集群的 Endpoints,做到对应用的无感知。

一种方案是修改 Service API 的实现(比如 kube-proxy) 进行来使用 ServiceImport

另一种方案则是不需要修改现在 Service API 的实现,由 mcs-controller 来创建影子服务,该服务与新创建的 EndpointSlice 关联,后者聚合了该跨服务的所有 Endpoints。一个 ServiceImport 下可能有来自多个集群的 EndpointSlice,每个 EndpointSlice 上有各自集群的标识。

mcs-endpoints

在官方的设计细节中建议了 ClusterIP 和 DNS 的方案并提供了细节,但不是唯一的实现方案。

总结

MCS API 希望在 API 的层面提供多集群服务的定义,但由于其实现的复杂性,该提案的进展缓慢。从 2020.2 提出方案,到 2020.8 提供 API 的 alpha 实现之后没有多少进展。

即便如此,多集群服务的注册和发现机制可以给后面的实现带来一定的参考价值。

关注"云原生指北"微信公众号 (转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(四)Redis的持久化

一 什么是redis持久化 因为Redis数据是基于内存读写,为防止Redis服务器关闭或者宕机造成数据的丢失,我们通常需要对redis做持久化,即:把内存中的数据(命令)保存一份到磁盘中来做一份备份,当redis服务关闭或宕机后,在Redis服务器重启后将数据从磁盘加载到内存中,不至于造成数据…

一招教你轻松使用公网远程访问公司内网

企业远程访问需求 众多企业都会在总部搭建各类项目管理办公系统(如OA、ERP、CRM、财务系统等等),以提高员工的办公及管理效率。 不少出差在外或者居家办公的员工需要从外部网络访问内网来登录各类系统,以满足办公协作管理的需…

电容笔和触控笔有啥区别?双十二质量好的电容笔推荐

从导电材料、作用机理、用途等方面,电容笔与普通触控笔相比有很大的不同。电容笔的笔尖尺寸适中,笔尖材质一般比较耐用。随着科技的进步,人们的生活水准不断提高,无论是绘制图纸,或是会议纪要,都需要一款更…

(附源码)ssm教学成绩管理系统 毕业设计 282029

教学成绩管理系统的设计与实现 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Jav…

大学生圣诞网页设计制作成品 圣诞节静态HTML网页作业作品 简单DIV CSS布局网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

树的企业应用-哈夫曼编码树-有趣的数据压缩算法

树的企业应用-哈夫曼编码树-有趣的数据压缩算法 哈夫曼编码 描述 张三去李四家里,但 李四是一个女生,所以张三找李四去上海迪尼斯玩 … 亚历山大.张三去伊丽莎白.李四家里,但 伊丽莎白.李四是一个女生,所以亚历山大.张三找伊丽莎白.李四去美国迪尼斯玩 … 我们发现 一个关键…

C++中STL用法超详细总结(收藏级)

1 什么是STL? STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C程序库。它被容纳于C标准程序库(C Standard Library)中,是ANSI/ISO C标准中最…

密码学(1)RSA与AES算法原理

什么是RSA 在1977年,Ron Rivest, Adi Shami和Leonard Adleman这三个人开发了一个新的算法,并用他们三个名字的首字母来命名这个算法,这个算法名叫RSA 非对称加密与对称加密 RSA算法采用的是非对称加密,假如我有你的公钥&#x…

从零到一手写一个小型RPC框架——介绍篇

RPC框架介绍 RPC框架是微服务的通信工具,其涉及到网络传输、服务注册、序列化、代理模式等等知识的学习与使用,是微服务的入门框架。 现有的比较知名的RPC框架有阿里巴巴开源的Dubbo,谷歌的开源RPC框架gRPC,甚至SpringCloud中所…

vue2笔记4(服务代理、插槽、vuex、路由)

vue脚手架 ## vue脚手架配置代理 vue在请求服务器的资源的时候,自身使用的是8080端口,如果服务器端口号是别的,这时候直接访问的话就会出现跨域的问题无法访问,就需要使用一个代理来访问服务器。vue配置脚手架的代理有两种方式。…

Unreal Engine学习

1,什么是组件? 继承于Uobject的为了给actor以及其他在场景中显示出来的类增加新的功能的一个东西 2,可以自己创建一个蓝图,然后将蓝图拖到场景中,也可以直接在c class中将蓝图拖到场景中 3,创建一个组件&…

vuex的新写法引入mapState省略$store.state

vuex的新写法: state简写(映射):mapState state里都是状态,所以mapState在computed中使用;state映射也就是引入mapState,然后state可以简写$store.state.状态 > 状态:前面的$s…

多点Dmall冲刺港交所上市:前三季度营收11亿元,张文中为实控人

撰稿|汤汤 来源|贝多财经 日前,多点数智有限公司(下称“多点Dmall”或“多点”)向港交所递交招股书,准备在港交所主板上市,瑞信、招银国际为其联席保荐人。 据贝多财经了解,多点Dmall在境内的主要经营主体…

《Linux运维实战:MongoDB数据库全量逻辑备份恢复(方案二)》

一、备份与恢复方案 Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据,只支持导出集合(collection),不支持导出库。 由于mongodb实例里面的数据类…

宠物网页作业HTML 大一作业HTML宠物网页作业 web期末大作业HTML 动物网页作业HTML HTML制作宠物网页作业css

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

区块链行业的一次“里程碑时刻”…

12月8日,由中国新闻社、中国新闻周刊主办的第十八届中国企业社会责任论坛成功举办,欧科云链入选“2022年度责任企业”,成为历届唯一获奖的区块链科技企业。 1999年1月,在瑞士达沃斯世界经济论坛上,联合国秘书长安南提出…

如何搞一个在线的Shape生成

Shape是Android中一个必不可少的资源,很多的背景,比如圆角,分割线、渐变等等效果,几乎都有它的影子存在,毕竟写起来简单便捷,使用起来也是简单便捷,又占用内存小,谁能不爱&#xff1…

【Python游戏】咱就说Python实现一个蔡徐坤大战篮球的小游戏,可还行? | 附带源码

前言 halo,包子们下午好 小编作为一个鸡你太美的忠实黑粉,怎么能不实行一个蔡徐坤大战篮球的小游戏呢 今天小编用Python给大家实现啦 今天不为别的,就是想督促大家学习 废话不多说,直接开整 相关文件 关注小编,私信…

GoDiagram.Winforms完全重写版-Crack

介绍GoDiagram 10 – 用于 .NET 项目的新图表库。 GoDiagram 10 是 GoDiagram 的完全重写,基于 GoJS API,具有相同的功能。这包括节点和链接的模板、数据绑定、JSON 模型数据格式、动画和许多其他功能。 在 C# 中为 .NET 构建图表 流程图 构建交互式流程…

安卓APP源码和设计报告——仿淘宝购物APP

2021—2022学年第二学期期末考试 《Android手机软件开发》实践考核 项目设计说明书 项目名称: 购物APP的设计与实现 专 业: 计算机科学与技术 学 号: 姓 名: 任课教师: 2022年6月12日 目 录 1.项目概述11 2…