创建service后,kubernetes会发生什么
本文分享自华为云社区《当创建一个service后,kubernetes会发生什么?》,作者:可以交个朋友。
一、Service介绍
1.1 Kubernetes为什么会引入service?
考虑到集群中Pod实例IP地址随着工作负载的生命周期的变化,常规通过访问Pod实例的IP方法变得不再实用。
每个工作负载通常有一个或者更多个后端Pod实例,如何将流量请求做到负载均衡转发也是迫在眉睫。
1.2 Service概念
service用于一组提供服务、具有相同 label Pod的抽象集合的网络访问地址(包括网络协议IPv4/IPv6地址和服务域名地址),提供集群内/外访问通信,屏蔽后端实例Pod信息并为后端Pod实例提供负载均衡的能力。
1.3 Kubernetes中存在哪些类型的service?
clusterIP:Kubernetes集群默认自动设置service的虚拟IP地址,仅可被集群内的其他客户端访问。
NodePort:将service的端口映射到每个Node的(指定/随机)端口,供集群外客户端通过集群任一节点的IP地址+(指定/随机)端口访问,即NodePort。
LoadBalancer:将service映射到一个已存在的负载均衡器IP地址上,此service方式多见于云厂商。
ExternalName:通过在集群内创建该类service,可将集群外部服务引入至集群内,供集群内其他服务通过IP地址或域名地址访问。
Headless service: 在一些特殊场景中,客户端访问不需要kubernetes中service实现的负载均衡功能,而是由客户端直接去发现/选择服务端的后端实例访问,就需要一种特殊的服务“Headless service”。这是一种没有访问入口(即service没有IP地址)的service。kube-proxy不会为这种类型的service(Headless service)创建iptables/ipvs转发规则。
二、Service、Endpoint、Pod以及与kube-proxy组件的关联协作结构示意图
下图是一个实际访问Service的图示,PodX访问Service(10.247.124.252:8080),在发送数据包时,在节点上根据iptables规则,目的IP:Port被随机替换为后端Pod组中某一个Pod的IP:Port,从而通过Service转发到到实际的Pod。从这里也可以看出,service对应的ip(clusterip)不是一个真实的ip地址,是通过节点kube-proxy组件通过刷新节点iptables或者ipvs规则,将四层报文的目的ip从clusterip DNAT转换为podip做通的通道。集群外节点没有kube-proxy组件去刷新相关规则,是集群外节点无法访问clusterip的本质原因。
三、Service创建流程图以及解读
3.1 Service创建后,各个组件协同关系介绍
用户使用通过kubectl客户端发起创建service资源对象请求至api-server。
api-server对请求用户鉴权、准入控制操作,然后将该请求事件写入到etcd存储中。
考虑到Endpoint-controller采用非阻塞式长连接watch机制实时获取service资源对象信息,一旦集群中有service变化(包括创建、更新、删除),则通过apiserver获取etcd中相关service资源对象。且通过service资源对象中lable字段遍历、关联相关Pod资源。
api-server将相关service资源信息和pod资源信息返回给Endpoint-controller的watch接口长连接。
Endpoint-controller通过获取的service和pod资源对象生成对应的Endpoint资源对象,并将结果通过调用api-server写入etcd。
api-server将endpoint资源写入到etcd做持久化存储
考虑到kube-proxy采用非阻塞式长连接watch机制实时获取service资源对象和endpoint资源对象信息,一旦集群中有service和Endpoint变化(包括创建、更新、删除),则通过apiserver获取etcd中相关资源对象。
api-server将相关service资源信息和Endpoint资源信息返回给kube-proxy 的watch接口长连接。
每个节点上kube-proxy组件进程生成节点系统iptables规则或ipvs规则。
3.2 EndpointController能力说明
Endpoint也是Kubernetes集群中的一个资源对象,存储在Etcd中。Endpoint-controller控制器通过监听集群内Service和Pod资源对象的变化,管理维护Endpoint的生命周期。
监听到service创建,则创建同名的Enpoint资源,然后根据service的标签,获取集群中关联的Podip和相关端口生成Endpoint资源对象。。
监听到service更新,则根据更新后的service信息获取关联的Pod的信息,更新对应Enpoint对象。
监听到service删除,则删除与service同名的endpoint。
如果监听到Pod发生变化,则更新endpoint对象的Pod IP列表,将异常的Pod从endpoint后端列表中剔除,恢复或者新建后加入到Endpoint的列表中。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【标准解读】物联网安全的系统回顾
本文分享自华为云社区《【标准解读】物联网安全的系统回顾:研究潜力、挑战和未来方向》,作者:MDKing。 1 引言 内容提要:物联网(IoT)包括嵌入传感器、软件和数据处理技术的物理对象网络,这些物理对象可以通过互联网与其他设备和系统建立连接并交换数据。物联网设备被融入到各种产品中,从普通的家庭用品到复杂的工业电器。尽管人们对物联网的需求越来越大,但安全问题一直阻碍着它的发展。本文系统回顾了IoT安全研究,关注漏洞、挑战、技术和未来方向。它对该领域的171篇近期出版物进行了调查,对物联网的发展现状、挑战和解决方案进行了全面的讨论。本文概述了物联网架构模式和典型特征,评估了现有的限制,并探索了增强物联网安全性的策略。此外,本文还深入探讨了已知的物联网攻击,并讨论了应对这些挑战的安全对策和机制。对物联网安全的功能需求进行了探索,并对相关技术和标准进行了探索。最后,本文讨论了物联网安全的潜在未来研究方向。 随着物联网技术的发展与普及,消费者网络、工业网络、公共网络等都协同物联网基础设置、云计算等完成支撑物联网设备在线化、自动化、智能化的网络闭环。随着全球物联网规模不断扩大,消费市场涌现了大量...
- 下一篇
GaussDB(for MySQL) RegionlessDB发布:全球数据库技术
本文分享自华为云社区《GaussDB(for MySQL) RegionlessDB发布:全球数据库技术》,作者: GaussDB 数据库。 1.技术背景 对于一些典型行业,如跨境电商和大型互联网企业,其业务往往遍及世界各地。在当今中资出海的浪潮下,客户业务全球化部署诉求对传统的数据库部署形态提出了挑战。 过去客户主要选择的解决方案有两类:第一类,数据库中心化部署一套,应用端统一接入;第二类,数据库随应用全球部署,通过同步工具完成各区域间数据同步。对于前者,异地读写数据库的时延不甚理想;对于后者,数据状态一致性难以保障,整体链路成本也偏高。 针对传统解决方案的弊端,同时结合客户的诉求,华为云GaussDB(for MySQL)团队预见性地提出未来云原生数据库的部署形态将从以资源、地域为中心转变为以应用、流量为中心这一理念。基于此,GaussDB(for MySQL) RegionlessDB形态应运而生。 GaussDB(for MySQL) RegionlessDB,是由分布在全球多个地域间若干GaussDB(for MySQL)集群组成的数据库网络。其中,主集群对外提供写服务,每个...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16