K8s service 进阶

文章目录

  • K8s service 进阶
    • Service 工作逻辑
    • Service 具体实现
    • Service 资源类型
      • ClusterIP
      • NodePort
      • LoadBalancer
      • ExternalName
    • Service 与 Endpoint
      • Endpoint 与 容器探针
      • 自定义Endpoint
    • Service 相关字段
      • sessionAffinity
      • externalTrafficPolicy
      • internalTrafficPolicy
      • publishNotReadyAddresses

K8s service 进阶

Service 工作逻辑

Service 通过持续监控APIServer,监视Service标签选择器所匹配的后端Pod,并实时跟踪这些Pod对象的变动情况。

Service 与Pod 之间还有一个中间件 Endpoints, Endpoint 来管理pod 的 address 和 port

整个默认访问链路为: Service -> Endpoint --iptables–> pod

在这里插入图片描述

Service 具体实现

在Kubernetes中,service只是抽象的一个概念,真正起作用实现负载均衡规则的其实是Kube-Proxy这个进程。它在每个节点上都需要运行一个kube-Proxy,用来完成负载均衡规则的创建。

1. 创建Service资源后,会分配一个随机的ServiceIP,返回给用户,然后写入etcd;
2. endpoints controller负责生成和维护所有endpoints,它会监听Service和pod的状态,当 pod 处于running 且准备就绪
时,endpoints controller会将 pod ip更新到对应Service的 endpoints 对象中,然后写入Etcd;
3. kube-proxy通过API-Server监听Service、Endpoints的资源变动,一旦Service或Endpoints资源发生变化,Kube-Proxy会将最新的信息转换为对应的Iptables、IPVS访问规则,而后在本地主机上执行。
4. 当客户端想要访问Service的时候,其实访问的就是本地节点上的iptables、IPVS规则,由它们路由到对应节点;

在这里插入图片描述

Service 资源类型

ClusterIP

  • 定义:ClusterIP是Kubernetes中的默认Service类型,它在集群内部提供一个虚拟IP,作为一组Pod的访问入口。
  • 特点:
    • 仅为集群内部提供访问。
    • 通过标签选择器(Label Selector)与一组Pod关联。
    • 提供负载均衡功能,支持轮询或随机策略。
    • 支持会话亲和性(Session Affinity),如ClientIP,以确保来自同一客户端的请求被转发到同一Pod。
  • 用途:适用于集群内部服务间的通信,确保服务的稳定性和可访问性。
apiVersion: v1
kind: Service
metadata: name: demo-svc-clusterip
spec:type: ClusterIP  # 默认类型clusterIP:  10.96.1.1  # 设置ipselector:app: webports:- name: httpport: 80targetPort: 80

NodePort

  • 定义:NodePort类型在所有节点上打开一个特定的端口,外部流量可以通过<NodeIP>:<NodePort>的方式访问Service。
  • 特点:
    • 允许外部访问集群内的服务。
    • Kubernetes在30000-32767范围内自动为每个NodePort类型的Service分配一个端口。
    • 与ClusterIP类似,也提供负载均衡和会话亲和性支持。
  • 用途:适用于需要从集群外部访问服务的场景,如临时测试、开发环境等。
apiVersion: v1
kind: Service
metadata:name: demo-svc-nodeport
spec:type: NodePortselector:app: webports:- name: httpport: 80   # Service 的porttargetPort: 80  # Pod 的 portnodePort: 32001 

LoadBalancer

  • 定义:LoadBalancer类型基于NodePort实现,但进一步通过云服务商提供的负载均衡器将流量分发到各个Node。

  • 特点:

    • 适用于公有云环境,如AWS、Azure、GCE等。
    • 外部流量通过云服务商的负载均衡器转发到集群内的Service。
    • 提供高可用性、可扩展性和负载均衡等特性。
  • 用途:适用于生产环境中需要高可用性和可扩展性的服务。

ExternalName

  • 定义:ExternalName类型将Service映射到集群外部的DNS名称,而不是提供一个虚拟IP或端口。
  • 特点:
    • 不进行kube-proxy代理或流量转发。
    • 允许集群内的Pod通过Service名称直接访问外部服务。
  • 用途:适用于需要将Kubernetes集群内的服务与外部服务(如数据库、消息队列等)集成的场景。通过ExternalName,Pod可以像访问集群内服务一样访问外部服务,简化配置和管理。
apiVersion: v1
kind: Service
metadata:name: demo-svc-externalname
spec:type: ExternalNameexternalName: www.baidu.com

Service 与 Endpoint

Endpoint 与 容器探针

Service对象借助Endpoint资源来跟踪其关联的后端端点,Endpoint对象会根据Service标签选择器筛选出的后端端点的IP地址分别保存在subsets.address字段和subsets.notReady Address字段中,它通过APIServer持续、动态跟踪每个端点的状态变化,并即使反应到端点IP所属的字段中。

  • subsets.address:保存就绪的容器IP,也就意味着service可以直接将请求调度至该地址段。
  • subsets.notReadyAddress:保存末就绪容器IP,也就意味着service不会将请求调度至该地址段。

自定义Endpoint

service通过selector和pod建立关联,K8s会根据service关联到的pOdIP信息组合成一个endpoint。若service定义中没有selector字段,service被创建时,endpoint controller不会自动创建endpoint。

我们可以通过配置清单创建Service,而无需使用标签选择器,而后自行创建一个同名的endpoint对象,指定对应的IP。这种一般用于将外部MySQL\Redis等应用引1入KUbernetes集群内部,让内部通过Service的方式访问外部资源。

在这里插入图片描述

apiVersion: v1
kind: Service
metadata:name: mysql-external
spec:type: ClusterIPports:- port: 3366                  # 负载均衡的对外端口targetPort: 3306            # 后端MySQL的端口---
apiVersion: v1
kind: Endpoints
metadata:name: mysql-external
subsets:- addresses:- ip: 10.0.0.206#- ip: 10.0.0.205ports:- protocol: TCPport: 3306               # 定义后端的端口是多少

Service 相关字段

sessionAffinity

如果要将来自特定客户端的链接调度到同一Pod,可以通过sessionAffinity 基于客户端 IP 地址进行会话保持。还可以通过设置最大会话停留时间(默认10800秒,3个小时)

apiVersion: v1
kind: Service
metadata: name: session-svc
spec:type: NodePortselector:role: webports:- name: httpprotocol: TCPport: 80targetPort: 80  sessionAffinity:  ClientIp  # 配置 sessionAffinity 策略,默认为 NonesessionAffinityConfig:clientIP:timeoutSeconds: 60   # 设置最大会话时长

externalTrafficPolicy

外部流量策略:当外部用户通过NodePort请求Service,是将外部流量路由到本地节点上的Pod,还是路由到集群范围的Pod:

  • cluster(默认):将用户请求路由到集群范国的所有Pod节点,具有良好的整体负载均衡。
  • Local:仅会将流量调度至请求的目标节点本地运行的Pod对象之上,以减少网络跳跃,降低网络延迟,但当请求指向的节点本地不存在目标Service相关的Pod对象时直接丢弃该报文。

在这里插入图片描述

apiVersion: v1
kind: Service
metadata: name: session-svc
spec:type: NodePortselector:role: webports:- name: httpprotocol: TCPport: 80targetPort: 80externalTrafficPolicy: LocalsessionAffinity:  ClientIp  # 配置 sessionAffinity 策略,默认为 NonesessionAffinityConfig:clientIP:timeoutSeconds: 60   # 设置最大会话时长

internalTrafficPolicy

本地流量策略:当本地Pod对Service发起访问时,是将流量路由到本地节点上的Pod,还是路由到集群范国的Pod:

  • cluster(默认):将Pod的请求路由到集群范国的所有Pod节点,具有良好的整体负载均衡。
  • Local:将请求路由到与发起方处于相同节点的端点,这种机制有助手节省开销,提升效率。但当请求指向的节点本地不存在目标service相关的Pod对象时直接丟弃该报文。

在这里插入图片描述

注意:在一个Service上,当externalTrafficPolicy已设置为Local时,internalTrafficPolicy则无法使用。换句话说,在一个集群的不同 Service 上可以同时使用这两个特性,但在一个Service 上不行

apiVersion: v1
kind: Service
metadata: name: session-svc
spec:type: NodePortselector:role: webports:- name: httpprotocol: TCPport: 80targetPort: 80internalTrafficPolicy: Local

publishNotReadyAddresses

pubishNotReadyAddresses: 表示Pod就绪探针探测失败,也不会将失败的PodIP 加入到NotReadyAddresses列表中

apiVersion: v1
kind: Service
metadata: name: session-svc
spec:type: NodePortselector:role: webports:- name: httpprotocol: TCPport: 80targetPort: 80pubishNotReadyAddresses: true

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

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

相关文章

异构图上的连接预测二

异构图上的连接预测二 对整个大图进行transform处理获取批次子图定义GNN网络定义分类器&#xff1a;整合模型。开始训练&#xff1a; 对整个大图进行transform处理 详细描述过程都在代码中体现。 transform T.RandomLinkSplit(num_val0.1, # 10%的 边 作为验证集&#xff0c…

Python怎么实现动态的方法调用?比如Ruby就有元编程

在Python中&#xff0c;你可以使用getattr函数来实现动态的方法调用&#xff0c;这与Ruby中的元编程类似。getattr函数用于获取对象&#xff08;如模块、类、实例等&#xff09;的属性&#xff0c;如果属性是一个方法&#xff0c;那么你可以像调用普通方法一样调用它。 以下是一…

cfa三级大神复习经验分享系列(三)

怎么才能通过考试&#xff1f;   很简单----努力&#xff01; 第一&#xff1a;要熟   书看得再多&#xff0c;知识点掌握得再全面&#xff0c;最终是在考试中体现出来。光看书不行&#xff1b;只是看懂了不行&#xff1b;看懂了&#xff0c;记不住不行&#xff1b;记住了…

Chisel入门——在windows下vscode搭建|部署Scala2.13.3开发环境|用Chisel点亮FPGA小灯

文章目录 前言一、vscode搭建scala开发环境1.1 安装Scala官方插件Scala Syntax1.2 创建hello_world.scala文件1.3 确认java的版本(博主使用的是1.8)1.4 下载Scala Windows版本的二进制文件1.5 配置环境变量1.6 交互模式测试一下1.7 vscode运行scala 二、windows安装sbt2.1 下载…

全屏后 element-ui 组件不显示

文章目录 问题分析ElementUI 解决方案ElementPlus 解决方案 注意 问题 上篇我们说到如何 将 DIV 全屏展示 在使用将页面中指定的 DIV 全屏展示后&#xff0c;出现全屏后 element-ui 组件不显示&#xff0c;全屏后展示的提示信息是没有的&#xff0c;如下如所示&#xff1a; 全…

【linux自动化实践】linux shell 脚本 替换某文本

在Linux shell脚本中&#xff0c;可以使用sed命令来替换文本。以下是一个基本的例子&#xff0c;它将在文件example.txt中查找文本old_text并将其替换为new_text sed -i s/old_text/new_text/g example.txt解释&#xff1a; sed: 是stream editor的缩写&#xff0c;用于处理文…

Docker 入门版

目录 1. 关于Docker 2. Dockr run命令中常见参数解读 3. Docker常见命令 4. Docker 数据卷 5. Docker本地目录挂载 6. 自定义镜像 Dockerfile 语法 自定义镜像模板 Demo 7. Docker网络 1. 关于Docker 在docker里面下载东西&#xff0c;就是相当于绿色面安装板&#x…

Android ViewPager2 + FragmentStateAdapter 的使用以及问题

场景介绍&#xff1a;在Android业务功能开发的过程中&#xff0c;需要使用到嵌套ViewPage2实现页面切换&#xff0c;这种场景在我们的开发过程中并不少见&#xff0c;大致结构为一个activity包含一个viewPage2&#xff0c;这个viewPage2中存在一个fragment A&#xff0c;fragme…

视频智能分析平台LntonAIServer视频监控管理平台裸土检测算法的重要性与应用

随着科技的飞速发展&#xff0c;人工智能技术在各个领域的应用越来越广泛。其中&#xff0c;LntonAIServer裸土检测算法作为一种先进的技术手段&#xff0c;已经在农业、环境保护等领域取得了显著的成果。本文将探讨LntonAIServer裸土检测算法的重要性及其在实际应用中的优势。…

go语言中的一个优雅的冥等补偿算法 backoff - 业务逻辑重试示例

今天给大家介绍一个go语言里面的冥等补偿算法库 backoff&#xff0c; 他可以用来对我们需要冥等补偿的业务逻辑进行重试&#xff0c;我们可以设定一个最大间隔时间&#xff0c; 停止时间等重试规则&#xff0c;废话不多说直接三示例&#xff1a; 业务逻辑重试示例 exp : backo…

使用js实用工具库lodash做对象的深拷贝

const lodash require(lodash)let obj {user: {name: xutongbao}}let objCopy lodash.cloneDeep(obj)objCopy.user.name xuconsole.log(obj)console.log(objCopy)https://www.lodashjs.com/ 人工智能学习网站 https://chat.xutongbao.top 参考链接&#xff1a; https://…

企业服务总线(Enterprise Service Bus,ESB)简介

企业服务总线 企业服务总线&#xff08;Enterprise Service Bus&#xff0c;ESB&#xff09;是一种在分布式系统之间实现服务集成和交互的中间件平台。它提供了一个灵活的基础设施&#xff0c;用于连接、路由和中介不同服务之间的消息&#xff0c;从而实现服务的解耦、复用和灵…

基于ssm的微信小程序的居民健康监测系统

采用技术 基于ssm的微信小程序的居民健康监测系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 后端页面 用户信息管理 健康科普管理 公告管理 论坛…

【MATLAB源码-第216期】基于matlab的北方苍鹰优化算法(NGO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 北方苍鹰优化算法&#xff08;Northern Goshawk Optimization&#xff0c;简称NGO&#xff09;是一种新兴的智能优化算法&#xff0c;灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽&#xff0c;广泛分布于北…

基于 React + Nest 全栈开发的后台系统

Xmw Admin 基于 React Nest 全栈开发的后台系统 &#x1fab4; 项目简介 &#x1f3af; 前端技术栈&#xff1a; React、Ant Design、Umi、TypeScript&#x1f3af; 后端技术栈&#xff1a; Nest.js、Sequelize、Redis、Mysql&#x1f61d; 线上预览&#xff1a; https://r…

【Game】Powerful

文章目录 【小伙伴】隐藏小伙伴 【百趣集】【人物属性点】【宠物打造】【奇遇】【钓鱼】 【小伙伴】 刷新位置 小伙伴等级详情 克制关系 隐藏小伙伴 1、仙缘小伙伴&#xff08;6种&#xff09; 遇到仙缘驭宠师然后进入战斗抓取 107、七彩仙凤 108、小青兔 109、小布 110、黑腹蛛…

APM 2.8外置罗盘校准

请注意&#xff1a; GPS不可以飞控带电插拔&#xff0c;带电插拔会产生差分电压&#xff0c;可能会导致GPS模块损坏&#xff0c;无法搜星。不听劝告&#xff0c;后果自负&#xff01; 1.如何接线 GPS有两根线&#xff0c;要插上面图所示的两个接口。同时拔掉旁边的跳线帽&…

4K型护套连接器与喇叭口替换插座

4K型护套连接器概述 4K型护套连接器作为煤矿一款关键的电气连接产品&#xff0c;一般安标认证型号包含&#xff1a;LCFB-4、LCFB-6、LCYB-8、LCYB-4、LCYB-8。根据不同的厂家也会有不同订货型号ZE0703-09/DLJ0601/conmN/4c等 4K型护套连接器是一种专为煤矿、非煤矿、石油化工等…

SqliSniper:针对HTTP Header的基于时间SQL盲注模糊测试工具

关于SqliSniper SqliSniper是一款基于Python开发的强大工具&#xff0c;该工具旨在检测HTTP请求Header中潜在的基于时间的SQL盲注问题。 该工具支持通过多线程形式快速扫描和识别目标应用程序中的潜在漏洞&#xff0c;可以大幅增强安全评估过程&#xff0c;同时确保了速度和效…

让ctexbook章节首页显示页眉

使用ctexbook构建的latex版本的学位论文或者其他用途, 章节的首页不显示页眉&#xff0c;如下图&#xff1a; 如果说&#xff0c;想要在章节的首页设置页眉&#xff0c;该如何设置&#xff1f; \usepackage{fancyhdr} \fancyhf{} \chead{暨南大学硕士学位论文} \cfoot{\thepage…