【K8S系列】深入解析Service

news2024/11/23 22:02:03

 序言

Don't count the days. Make the days count

不要数着日子。让日子过得有意义

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下service进阶内容。

因为之前有过两篇基础讲解了,基础方面,今天就简单过一下。

Service基础入门

Service进阶

希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流

 专栏介绍

这是这篇文章所在的专栏,欢迎订阅:【深入解析k8s】专栏

简单介绍一下这个专栏要做的事:

主要是深入解析每个知识点,帮助大家完全掌握k8s,以下是已更新的章节

这是专栏介绍文章地址:【深入解析K8S专栏介绍】

1 基本介绍

1.1 概念介绍

Kubernetes Service是Kubernetes中的一个资源对象,用于定义一个逻辑服务

Service为Pods提供了一个稳定的IP地址和DNS名称,以便其他应用程序可以通过这些标识符来访问该服务。

它还提供了负载均衡和服务发现的能力,可以将流量路由到一组具有相同标签的Pods中。

2 Service类型

Service有三种类型:

  • ClusterIP
  • NodePort
  • LoadBalancer

2.1 ClusterIP 

ClusterIP类型将创建一个虚拟IP地址该IP地址将绑定到Service上,并通过Kubernetes内部的代理进行转发。

这种类型的服务只能在集群内部访问,并且通常用于内部服务之间的通信

 2.2 NodePort

NodePort类型会将Service绑定到每个节点的IP地址和端口上,从而使得外部的客户端可以通过该节点的IP地址和指定的端口来访问该Service。

这种类型的服务通常用于暴露应用程序或服务到集群外部但不适用于大规模生产环境。

2.3 LoadBalancer 

LoadBalancer类型会使用云提供商的负载均衡器来将流量路由到Service的Pods中

这种类型的服务通常用于大规模生产环境中可以提供高可用性和负载均衡的能力

3 原理介绍

Kubernetes Service的原理是基于iptables和IPVS实现的。

当创建一个Service对象时,Kubernetes会为该Service创建一个虚拟IP地址,并将该地址绑定到一个iptables规则中。

当Pods需要与该Service通信时,它们会向该虚拟IP地址发送请求,请求会被iptables规则捕获并转发到正确的Pods上。

  1. ClusterIP类型:对于ClusterIP类型的Service,iptables规则会将请求转发到Service选择器匹配的Pods上
  2. NodePort类型:对于NodePort类型的Service,iptables规则会将请求转发到对应节点上的Service端口,并从该端口将请求转发到选择器匹配的Pods上。
  3. LoadBalancer类型:对于LoadBalancer类型的Service,Kubernetes会创建一个云提供商的负载均衡器,并将请求路由到选择器匹配的Pods上

对于大规模生产环境,Kubernetes还支持使用IPVS来实现负载均衡和服务发现

IPVS是一个Linux内核模块,提供了高效的负载均衡和服务发现的功能。

当使用IPVS时,Kubernetes会将Service的虚拟IP地址绑定到一个IPVS规则中,并将请求转发到选择器匹配的Pods上,从而实现高效的负载均衡和服务发现。

总之,Kubernetes Service通过虚拟IP地址和iptables或IPVS规则来实现负载均衡和服务发现的功能

service 为Pods提供了一个稳定的IP地址和DNS名称,以便其他应用程序可以通过这些标识符来访问该服务。

IPVS和iptables规则有什么区别?

IPVS和iptables规则都是Linux内核提供的功能,用于实现网络中的流量控制和路由。它们的主要区别在于它们的应用场景和实现方式

iptables :

iptables是Linux内核中的一个模块,提供了一个基于规则的防火墙和流量控制功能。iptables规则可以基于源IP地址目标IP地址端口号和协议等条件来过滤和转发流量。

在Kubernetes中,iptables规则通常用于实现Service的负载均衡和服务发现功能

IPVS: 

IPVS是Linux内核中的另一个模块,提供了一个高效的负载均衡和服务发现功能。它使用一组IPVS规则来将流量路由到后端服务器上,并支持多种负载均衡算法。

在Kubernetes中,IPVS可以用于替代iptables规则来实现更高效的负载均衡和服务发现功能。

使用场景: 

  • IPVS:负载均衡和服务发现功能更加高效和灵活,特别是在大规模生产环境中。但是,它需要更多的配置和管理工作,也需要系统管理员具备更深入的网络知识
  • iptables:规则则更加简单易用,适合小规模和简单的网络环境。

 3 使用优势

Kubernetes Service作为Kubernetes中的一个核心资源对象,具有以下优点:

  • 稳定的服务发现
  • 灵活的负载均衡
  • 支持多种协议和端口
  • 简化网络配置和管理
  • 自动更新服务配置

3.1 稳定的服务发现

Service为Pods提供了一个稳定的IP地址和DNS名称,使得其他应用程序可以通过这些标识符来访问该服务,而不用担心Pods的IP地址变化。

这为应用程序提供了更加稳定的服务发现功能,可以在服务发现中心注册服务地址,让其它应用程序能够直接访问。

3.2 灵活的负载均衡

通过Service,Kubernetes可以将流量路由到一组具有相同标签的Pods中,从而实现负载均衡的功能

Service支持多种负载均衡算法,例如轮询、最少连接、IP哈希等,可以根据实际需求进行配置,从而实现灵活的负载均衡策略。

3.3 支持多种协议和端口

Service可以支持多种协议和端口,从而允许一个服务提供多种不同的网络访问方式。

例如,一个Web应用程序可以同时提供HTTP和HTTPS访问方式。

3.4 自动更新服务配置

当Pods发生故障或扩容时,Service可以自动更新其配置,并将流量重新路由到可用的Pods上。

这可以帮助应用程序自动适应变化的负载,提高了应用程序的可靠性和可扩展性。

3.5 简化网络配置和管理

使用Service可以简化网络配置和管理的工作,让开发者和运维人员可以更加专注于应用程序的开发和部署。

Service可以自动为Pods分配IP地址和DNS名称并自动更新其配置从而减少了网络配置和管理的工作量。

3.6 总结

综上所述,Kubernetes Service具有稳定的服务发现、灵活的负载均衡、多种协议和端口支持、自动更新服务配置和简化网络配置和管理等优点。

可以帮助开发者和运维人员更加轻松地实现负载均衡、服务发现和网络管理的功能,提高了应用程序的可靠性和可扩展性。

4 使用介绍

在Kubernetes中,可以使用如下的步骤来创建一个Service:

  1. yaml:创建一个Deployment或StatefulSet对象,用于管理Pods的生命周期和扩缩容。

  2. service:定义一个Service对象,用于将流量路由到Pods中。Service可以使用kubectl create命令手动创建,也可以使用YAML或JSON文件进行定义和创建。

4.1 yaml文件

使用YAML文件定义和创建一个Service的示例:

apiVersion: v1
kind: Service #资源类型
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

在上述示例中,

  • Service的名称为my-service
  • 选择器为app=my-app
  • 端口为80
  • 目标端口为8080
  • Service的类型为ClusterIP,表示该Service仅在集群内部可用。

4.2创建Service对象

使用kubectl apply命令应用YAML文件,创建Service对象。

kubectl apply -f my-service.yaml

在创建Service之后,可以使用kubectl get services命令查看Service的详细信息,例如IP地址、端口号等。

kubectl get services

以上是创建Service的基本步骤,根据实际需求可以根据Service的类型、端口、选择器等属性进行配置,以实现负载均衡、服务发现和网络管理等功能。

5 拓展

5.1 service 如何处理pod故障

在Kubernetes中,Service可以通过以下方式处理Pods的故障:

  1. 自动更新Endpoint列表:当Pods发生故障或扩容时,Kubernetes会自动更新Service的Endpoint列表,以包含可用的Pods。 Endpoint列表是Service的一部分,用于指定服务的后端IP地址和端口号。当Pods发生故障或扩容时,Kubernetes会自动更新Endpoint列表,以确保流量被路由到可用的Pods。

  2. 使用健康检查:Kubernetes可以通过Pod的健康检查来检测Pods的健康状态。如果Pods没有通过健康检查,则Kubernetes会将其标记为不可用,并将其从Service的Endpoint列表中删除,从而避免将流量路由到不可用的Pods。

  3. 使用就近调度:Kubernetes可以使用就近调度策略来将流量路由到距离用户最近的Pods。就近调度策略可以避免将流量路由到故障的节点上,从而提高服务的可靠性。

  4. 使用负载均衡算法:Kubernetes支持多种负载均衡算法,例如轮询、最少连接、IP哈希等。这些负载均衡算法可以根据实际需求进行配置,从而实现更加可靠和灵活的流量路由策略。

综上所述,Kubernetes的Service可以通过自动更新Endpoint列表、使用健康检查、就近调度和负载均衡算法等方式来处理Pods的故障

这些功能可以帮助保证服务的可靠性和可用性,并提高应用程序的性能和稳定性。

5.2 如何配置负载均衡算法?

Kubernetes支持多种负载均衡算法,可以根据实际需求进行配置。以下是在Kubernetes中配置负载均衡算法的步骤:

在Service对象中定义负载均衡算法。可以使用如下的配置来定义负载均衡算法:

apiVersion: v1
kind: Service #资源类型
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 60
  loadBalancerIP: 10.0.0.1
  loadBalancerSourceRanges:
    - 10.0.0.0/24
  externalTrafficPolicy: Cluster
  topologyKeys:
    - kubernetes.io/hostname

在上述配置中,可以通过sessionAffinity、loadBalancerIP、loadBalancerSourceRanges、externalTrafficPolicy和topologyKeys等属性来配置负载均衡算法,具体说明如下:

  • sessionAffinity指定负载均衡算法,默认值为None,表示不启用会话关联。可以将sessionAffinity设置为ClientIP,表示基于客户端IP地址进行负载均衡。

  • loadBalancerIP指定负载均衡器的IP地址。如果设置了loadBalancerIP,则Kubernetes将使用指定的IP地址创建负载均衡器,否则将自动分配一个IP地址。

  • loadBalancerSourceRanges指定允许访问负载均衡器的IP地址范围。可以使用CIDR格式指定多个IP地址范围。

  • externalTrafficPolicy指定处理外部流量的策略默认值为Cluster,表示将外部流量路由到集群内的节点上。可以将externalTrafficPolicy设置为Local,表示将外部流量路由到最近的节点上。

  • topologyKeys指定拓扑域的键列表。拓扑域是指节点的物理位置和网络位置。可以使用topologyKeys属性来指定Kubernetes如何将Pods分配到不同的节点上。

使用kubectl apply命令应用Service配置,以更新负载均衡算法。

kubectl apply -f my-service.yaml

在更新Service配置之后,Kubernetes会自动更新负载均衡算法,从而实现更加可靠和灵活的流量路由策略。

6 总结

Kubernetes的Service是一种抽象,用于定义一组Pods的访问方式。Service可以为Pods提供稳定的网络终结点,以便其他应用程序可以通过Service来访问这些Pods。

总结一下Kubernetes Service知识点:

  1. Service类型:Kubernetes支持多种Service类型,包括ClusterIPNodePort、LoadBalancer和ExternalName。每种Service类型都有不同的用途和特点,可以根据实际需求进行选择。

  2. Service端口:Service可以定义一个或多个端口,以便其他应用程序可以通过这些端口来访问Pods。Service端口可以与Pod端口进行映射,从而实现流量路由和负载均衡等功能。

  3. Service选择器:Service可以使用选择器来选择一组Pods。选择器可以基于Pod上的标签进行匹配,从而将流量路由到符合条件的Pods上。

  4. Service发现:Service可以通过DNS或者环境变量等方式来暴露Pods的访问地址。其他应用程序可以使用Service的名称来访问Pods,而不需要知道Pods的具体IP地址。

  5. Service代理:Kubernetes支持通过Service代理来访问Pods。Service代理可以在Service和Pod之间建立一个虚拟IP地址,从而实现Pod的动态扩缩容和负载均衡等功能。

  6. Service监控:Kubernetes可以通过Service监控来实现对Service的健康检查和故障恢复等功能。可以使用Liveness Probe和Readiness Probe等机制来检查Service是否正常运行,并根据检查结果自动进行故障恢复等操作。

  7. Service安全:Kubernetes可以通过网络策略(Network Policies)来控制Service之间的网络通信。可以使用网络策略来实现更加细粒度的访问控制和网络隔离等功能,从而提高应用程序的安全性和可靠性。

 7 投票

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

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

相关文章

React 组件 API

常用 React 组件 API: 设置状态:setState替换状态:replaceState设置属性:setProps替换属性:replaceProps强制更新:forceUpdate获取DOM节点:findDOMNode判断组件挂载状态:isMounted …

基础自动化测试脚本开发——Loadrunner网页系统两种创建关联函数的方法详解

前言 许多的系统都采用SessionID或SeqID等方法来标识不同的任务和数据报,应用在每次运行时发送的数据并不完全相同。所以,为了让脚本能够支持测试的需求,就必然要用某种机制对脚本的数据进行关联了。总之一句话:通过关联可以在测试…

AOD实践,modis数据下载,modis数据处理

modis数据下载-数据读取-重投影-拼接-均值 一、数据下载 1、Cygwin安装 Cygwin安装教程:https://blog.csdn.net/u010356768/article/details/90756742 1.2 数据采集 现提供遥感数据下载服务,主要是NASA数据,数据下载网站包括&#xff1a…

炸裂的 AutoGPT,鱼皮教你免费用!

大家好,我是鱼皮,继前段时间爆火的 ChatGPT 后,又一个炸裂的开源项目 Auto-GPT 出现了。 仅在最近 10 天,这个项目就收获了 8 万多个 star,目前总 star 数超过 10 万! 那 Auto-GPT 到底是个什么玩意&#x…

一文让你熟练使用 JSONObject 和 JSONArray

依赖 导入阿里的 fastjson 依赖。 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>类型转换 String 与 JSON 相互转换 通过 JSONObject.parseObject…

21、越狱调试

前言 调试一款应用,使用重签名方案,很容易被第三方察觉.在越狱环境中,我们可以在不污染App的情况下,对第三方程序进行动态调试 一、Reveal Reveal 是一款UI调试工具,对iOS逆向开发非常有帮助. 在Mac电脑中,安装Reveal软件: 密码 xclient.info 在手机中,安装Reveal插件打开C…

【京东】商品评价数据采集+买家评论数据+卖家评论数据采集+行业数据分析+行业数据质检分析

采集场景 京东商品详情页中的评价&#xff0c;有多个分类&#xff1a;【全部评价】、【晒图】、【视频晒单】、【追评】、【好评】、【中评】、【差评】。其中【全部评价】默认展现&#xff0c;其他需点击后展现。本文以按【差评】筛选采集为例讲解。实例网址&#xff1a;http…

MySQL-----复合查询

文章目录 前言一、基本查询回顾二、 多表查询解决多表查询的思路 三、自连接四、子查询1. 单行子查询2. 多行子查询3. 多列子查询4. 在from子句中使用子查询5. 合并查询5.1 union5.2 unoin all 总结 前言 前面的学习中,对于mysql表的查询都是对一张表进行查询,在实际开发中这远…

快速入门git(收藏篇)

大致总结&#xff1a; 本地仓库要先去github注册&#xff0c;并通过github的验证。于是本地仓库的文件均可通过协议传输至github任意一个仓库。本地文件要先传到本地仓库&#xff0c;由本地仓库传输至远程github仓库。 在详细学习git之前&#xff0c;我们先来看看Git和svn之间…

系统集成项目管理工程师 笔记(第七章:项目范围管理)

文章目录 7.1.1 项目范围管理的含义及作用7.1.2 项目范围管理的主要过程&#xff08;6个&#xff09; 7.2 编制范围管理计划和范围说明书 2687.2.1 编制范围管理计划过程所用的工具与技术7.2.2 编制范围管理计划过程的输入、输出 7.3 收集需求 2717.3.1 收集需求过程的工具与技…

java 网络编程总结

目录 一、拾枝杂谈 1.网络通信 : 2.网络 : 3.IP : 4.IPv4的ip地址分类 : 5.域名和端口 : 6.网络协议 : 二、网络编程 1.InetAddress : 1 常用方法 : 2 代码演示 : 2.Socket : 1 概述 : 2 代码演示 : eg1 : 客户端连接服务端 eg2 : 结束标记 eg3 : 网络传输文件…

Linux设置进程自启动

systemd学习 http://www.jinbuguo.com/systemd/systemctl.html https://blog.csdn.net/sinat_35815559/article/details/102867290 常用命令 立即启动一个服务&#xff1a; systemctl start xxx.service立即停止一个服务&#xff1a; systemctl stop xxx.service重启一个服…

跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测)

跌倒检测和识别4&#xff1a;C实现跌倒检测(含源码&#xff0c;可实时跌倒检测) 目录 跌倒检测和识别4&#xff1a;C实现跌倒检测(含源码&#xff0c;可实时跌倒检测) 1. 前言 2. 跌倒检测模型&#xff08;YOLOv5&#xff09; &#xff08;1&#xff09;跌倒检测模型训练 …

第14届蓝桥杯 | 冶炼金属

作者&#xff1a;指针不指南吗 专栏&#xff1a;第14届蓝桥杯真题 &#x1f43e;慢慢来&#xff0c;慢慢来&#x1f43e; 文章目录 题目代码摸索第一次 AC 5/10第二次 AC 100% 反思 题目 链接&#xff1a; 4956. 冶炼金属 - AcWing题库 小蓝有一个神奇的炉子用于将普通金属 O …

【LeetCode】数据结构刷题(2)[查找链表的中间节点]

【LeetCode】数据结构刷题&#xff08;2&#xff09; 1.题目来源2.题目描述3.解题思路4.代码展示5.类似题目练习 所属专栏&#xff1a;玩转数据结构题型 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持…

自动驾驶方案及相关对标

华为&#xff1a; 2021年4月18日&#xff0c;在华为智能汽车解决方案BU新品发布会上&#xff0c;华为智能汽车解决方案BU总裁王军表示&#xff0c;华为要持续加大对汽车行业的投入&#xff0c;今年在研发上的投资将达到10亿美元&#xff0c;未来每年保持30%左右增长&#xff0…

three.js的着色器(巨详细 初学者 大白话)

three.js就不过多介绍了 可以看另一篇文章 总结就是场景 相机 和 渲染器 学起来 也比较轻松 后来看到了着色器 给我整懵乐了 一会一个API 一会一个API 都没见过 然后就一点点去学习 真的是费了好大劲了 需要知道很多新东西 才能初步知道和使用着色器 当然如果只是简单的使…

docker-harbor私有仓库的部署与管理

目录 Harbor Harbor介绍 Harbor的特性 Harbor的构成 部署Harbor 搭建本地私有仓库 Docker容器的重启策略 部署Docker-compose服务 部署Harbor服务 关于Harbor.cfg配置文件中两类参数 启动Harbor 查看 Harbor 启动镜像 创建一个新项目 在其他客户端上传镜像 维护管…

如何创建 2023 年营销日历(内含免费模板和示例)

沟通、文案撰写、社媒营销、点击付费广告、事件营销和搜索引擎排名优化有什么共同点&#xff1f; 它们都属于营销部门的工作范畴&#xff0c;而且很可能是围绕着同一个日程表进行工作排期。 你的营销团队比你想象的要大&#xff0c;当你考虑跨职能项目和团队成员在你整体战略…

ImageJ 用户手册——第四部分(ImageJ用户界面)

ImageJ 用户手册——第四部分&#xff08;ImageJ用户界面&#xff09; ImageJ用户界面工具栏&#xff08;Toolbar&#xff09;状态栏进度条19. 工具19.1 区域选择工具19.1.1 矩形选择工具19.1.2 圆角矩形选择工具19.1.3 圆形选择工具19.1.4 椭圆选择工具19.1.5 笔刷选择工具19.…