K8S学习之基础十九:k8s的四层代理Service
K8S四层代理Service
-
四层负载均衡Service
在k8s中,访问pod可以通过ip+端口的方式,但是pod是由生命 周期的,pod在重启的时候ip地址往往会发生变化,访问pod就需要新的ip地址,这样就会很麻烦,每次pod地址改变就要修改访问ip。Service的引进解决了这种问题,通过定义Service资源对象,Service定义一个服务访问的入口,客户端可以通过这个入口访问对应的pod,就算pod重新生成,ip发生变化,Service依旧通过pod标签关联到这个pod,避免连接失败,这样看来,Service可以看做是一组Pod的逻辑组合。
从下图可以看出客户端通过Service访问pod的方式
pid的ip经常变化,service是pod的代理,只要访问service,就能代理到对应的pod
pod的ip在集群外部是无法访问的,通过service,可以在集群之外的机器访问pod

Service是一个固定接入层,客户端可以通过访问Service的ip+port访问到其关联的后端pod。这个service工作以来与k8s集群之上部署的dns附件,现在的版本都是用的coredns。k8s要给客户端提供网络功能,还需要依赖第三方网络插件(flannel、calico等)。每个k8s几点上都有一个组件kube-proxy,始终监视着apiserver中有关service资源的变动信息,跟master上的apiserver交互,随时连接到apiserver获取任何一个与service资源相关的资源变动情况,通过k8s中固有的请求方式watch实现,一旦service资源内容发生变动(如创建删除等),kube-proxy都会将它转化成当前几点之上能够实现service资源调度,把请求调度到后端特定pod资源之上的规则,可能是iptables,也可能是ipvs,这个取决于service的实现方式。
k8s在创建Service的时候,会根据标签选择器selector来查找pod,据此创建与Service同名的endpoint对象,当pod地址发生变化时,endpoint也会随之发生变化,service接收全段client请求时,就会通过endpoint,找到转发到哪个pod进行访问的地址,至于转发到哪个节点的pod,有负载均衡kube-proxy决定 -
k8s集群中的三类ip地址
Node Network(节点网络):物理节点或者虚拟节点的网络
Pod network(pod网络):创建的pod的ip地址,在创建集群时指定网段
ClusterNetwork(集群地址):也成为service network,这是个虚拟的ip地址,没有配置在某个接口上,只是出现在service规则当中。

-
service的四种类型,先创建一组pod,然后分别用不同类型的service测试
vi service-pod.yaml apiVersion: apps/v1 kind: Deployment metadata:name: my-nginx spec:replicas: 3selector:matchLabels:app: my-nginxversion: v1template:metadata:labels:app: my-nginxversion: v1spec:containers:- name: my-nginximage: 172.16.80.140/nginx/nginx:1.26imagePullPolicy: IfNotPresentports:- containerPort: 80
ClusterIP:
默认类型:创建 Service 时,默认类型为 ClusterIP。
作用:为集群内部提供访问,Service 会分配一个内部 IP,只能在集群内部访问。
适用场景:适用于集群内部服务间的通信。
bash vi service-clusterip.yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-nginx ports: - protocol: TCP. # 协议类型 port: 80 # service的端口 targetPort: 80 # 对应pod中容器的端口

同时会创建一个endpoints(简称ep)   可通过访问service的方式,访问到代理的pod,即使pod被删除一个,deploy创建一个新的pod,ip发生变化,但是pod标签没有变化,service没有变化,依然可以代理到所有同样标签的pod之上。NodePort:
作用:在 ClusterIP 基础上,通过每个节点的 IP 和静态端口(NodePort)暴露服务,外部可通过 : 访问。
端口范围:默认范围为 30000-32767。
适用场景:适用于需要从集群外部访问的服务。
上面的clusterip类型的service,只能在集群内部访问,无法在集群外部访问。为了解决这个问题,可以使用NodePort类型的service```bashvi service-nodeport.yaml kind: Servicemetadata:name: my-servicespec:type: NodePortselector:app: my-nginxports:- protocol: TCPport: 80targetPort: 80```生成一个nodeport类型的service,不但可以在集群内部访问,还可以通过访问node+port的方式访问,端口可以指定,也可以默认生成。其中node指集群中所有的节点。 LoadBalancer:
作用:在 NodePort 基础上,使用云服务商的负载均衡器将服务暴露到外部,自动分配外部 IP。
适用场景:适用于在云环境中需要外部访问的服务。
ExternalName:
作用:将 Service 映射到外部 DNS 名称,不提供负载均衡或代理,仅返回 CNAME 记录。
适用场景:适用于将服务指向外部资源。
相关文章:
K8S学习之基础十九:k8s的四层代理Service
K8S四层代理Service 四层负载均衡Service 在k8s中,访问pod可以通过ip端口的方式,但是pod是由生命 周期的,pod在重启的时候ip地址往往会发生变化,访问pod就需要新的ip地址,这样就会很麻烦,每次pod地址改变就…...
揭开AI-OPS 的神秘面纱 第六讲 AI 模型服务层 - 开源模型选型与应用 (时间序列场景|图神经网络场景)
时间序列场景 AI 模型服务层 - 开源模型选型与应用 (时间序列场景) 在 AI-Ops 中,时间序列数据分析主要应用于以下场景: 指标预测: 预测 Metrics 指标 (例如 CPU 使用率、内存使用率、网络流量、请求延迟等) 的未来趋势,用于容量规划、资源调度、异常检测等。异常检测: 检…...
在Dify中访问Gemini等模型代理设置指南
问题背景 Google Gemini模型可纯免费使用,且性能也相当不错,一般个人使用或研究足够。但在在国内访问,需设置代理。在Docker部署Dify时,虽然按官方文档介绍设置代理环境变量,但实测发现并不生效。我们通过研究试验解决…...
MySQL的安装以及数据库的基本配置
MySQL的安装及配置 MySQL的下载 选择想要安装的版本,点击Download下载 Mysql官网下载地址: https://downloads.mysql.com/archives/installer/ MySQL的安装 选择是自定义安装,所以直接选择“Custom”,点击“Next” …...
设备树的组成
根节点下含有 compatile 属性的子节点 含有特定 compatile 属性的节点的子节点 如果一个节点的 compatile 属性,它的值是这 4 者之一:"simple-bus","simple-mfd","isa","arm,amba-bus", 那 么 它 的 子结点 (…...
C++入门——输入输出、缺省参数
C入门——输入输出、缺省参数 一、C标准库——命名空间 std C标准库std是一个命名空间,全称为"standard",其中包括标准模板库(STL),输入输出系统,文件系统库,智能指针与内存管理&am…...
deepseek 本地部署
deepseek 本地部署 纯新手教学,手把手5分钟带你在本地部署一个私有的deepseek,再也不用受网络影响。流畅使用deepseek!!! 如果不想看文章,指路:Deep seek R1本地部署 小白超详细教程 ࿰…...
[网络爬虫] 动态网页抓取 — Selenium 入门操作
🌟想系统化学习爬虫技术?看看这个:[数据抓取] Python 网络爬虫 - 学习手册-CSDN博客 0x01:WebDriver 类基础属性 & 方法 为模仿用户真实操作浏览器的基本过程,Selenium 的 WebDriver 模块提供了一个 WebDriver 类…...
HTML 超链接(简单易懂较详细)
在 HTML 中,超链接是通过 <a> 标签(anchor tag)创建的。超链接允许用户通过点击文本、图像或其他元素跳转到另一个网页、文件或页面的特定部分。本文将详细介绍 HTML 超链接的语法、属性和应用场景。 一、基本语法 <a href"U…...
rpc和proto
rpc全称远程过程控制,说白了是一种对信息发送和接收的规则编写方法,来自google,这些规则会以protobuf代码存到proto文件里。我以autoGen中agent_worker.proto为例,大概长这样 syntax "proto3";package agents;option …...
OPENGLPG第九版学习 -颜色、像素和片元 PART1
文章目录 4.1 基本颜色理论4.2 缓存及其用途颜色缓存深度缓存 / z缓存 / z-buffer模板缓存 4.2.1 缓存的清除4.2.2 缓存的掩码 4.3 颜色与OpenGL4.3.1 颜色的表达与OpenGL4.3.2 平滑数据插值 4.4 片元的测试与操作4.4.1 剪切测试4.4.2 多重采样的片元操作4.4.3 模板测试模板查询…...
【js逆向】某精灵网
地址:aHR0cHM6Ly93d3cuamluZ2xpbmdzaHVqdS5jb20vYXJ0aWNsZXM f12查看数据包,下面这个不是,你得到的是你的用户信息,需要点击第2页才会显示数据接口 查看载荷 查看预览数据,发现是加密的 查看启动器,看到 Pr…...
自然语言处理:高斯混合模型
介绍 大家好,博主又来给大家分享知识了,今天给大家分享的内容是自然语言处理中的高斯混合模型。 在自然语言处理这个充满挑战与机遇的领域,我们常常面临海量且复杂的文本数据。如何从这些数据中挖掘出有价值的信息,对文本进行有…...
RISC-V汇编学习(三)—— RV指令集
有了前两节对于RISC-V汇编、寄存器、汇编语法等的认识,本节开始介绍RISC-V指令集和伪指令。 前面说了RISC-V的模块化特点,是以RV32I为作为ISA的核心模块,其他都是要基于此为基础,可以这样认为:RISC-V ISA 基本整数指…...
OpenCV连续数字识别—可运行验证
前言 文章开始,瞎说一点其他的东西,真的是很离谱,找了至少两三个小时,就一个简单的需求: 1、利用OpenCV 在Windows进行抓图 2、利用OpenCV 进行连续数字的检测。 3、使用C,Qt 3、将检测的结果显示出来 …...
Python中与字符串操作相关的30个常用函数及其示例
以下是Python中与字符串操作相关的30个常用函数及其示例: 1. str.capitalize() 将字符串的第一个字符大写,其余字符小写。 s "hello world" print(s.capitalize()) # 输出: Hello world2. str.lower() 将字符串中的所有字符转换为小写。…...
007-Property在C++中的实现与应用
Property在C中的实现与应用 以下是在C中实现属性(Property)的完整实现方案,结合模板技术和运算符重载实现类型安全的属性访问,支持独立模块化封装: #include <iostream> #include <functional>template<typename HostType, t…...
【实战篇】【DeepSeek 全攻略:从入门到进阶,再到高级应用】
凌晨三点,某程序员在Stack Overflow上发出灵魂拷问:“为什么我的DeepSeek会把财务报表生成成修仙小说?” 这个魔性的AI工具,今天我们就来场从开机键到改造人类文明的硬核教学。(文末含高危操作集锦,未成年人请在师父陪同下观看) 一、萌新村任务:把你的电脑变成炼丹炉 …...
clickhouse属于国产吗
《ClickHouse:探索其背景与国内的应用实例》 当我们谈论数据库技术时,ClickHouse是一个绕不开的话题。很多人可能会好奇,ClickHouse是否属于国产软件呢?答案是,虽然ClickHouse最初并非在中国开发,但这款列…...
ESP32 UART select解析json数据,上位机控制LED灯实验
前言: 本实验的目的主要是通过上位机通过UART来控制ESP32端的LED的点亮以及熄灭,整个项目逻辑比较简单,整体架构如下: 上位机(PC)主要是跑在PC端的一个软件,主要作用包含: 1)串口相关配置&…...
tmux快速上手指南:3个核心命令与1个关键快捷键解析
1. 为什么你需要tmux? 如果你经常在服务器上工作,肯定遇到过这样的场景:正在跑一个耗时很长的任务,突然网络波动导致SSH连接断开,所有进程都被终止,几个小时的成果瞬间消失。这种时候,tmux就是你…...
HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写
HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写 1. 环境准备与快速部署 在开始使用HunyuanVideo-Foley进行音效生成前,我们需要确保环境已经正确部署。本教程基于RTX 4090D 24GB显存显卡和CUDA 12.4优化环境。 1.1 镜像启动与…...
CosyVoice语音克隆应用案例:为短视频配音、制作个性化语音问候消息
CosyVoice语音克隆应用案例:为短视频配音、制作个性化语音问候消息 最近帮朋友做短视频账号,发现一个挺头疼的问题:每次拍完视频,找配音特别麻烦。要么自己录,口音重还费时间;要么用AI配音,声音…...
Greasy Fork:开源用户脚本平台的价值探索与实践指南
Greasy Fork:开源用户脚本平台的价值探索与实践指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 一、价值定位:重新定义浏览器增强体验 1.1 开源平台的核心价值…...
MedGemma 1。5在Linux环境下的部署与优化
MedGemma 1.5在Linux环境下的部署与优化 1. 引言 MedGemma 1.5是谷歌最新发布的开源医疗AI模型,专门针对医学影像和文本数据处理进行了深度优化。这个40亿参数的轻量级模型不仅能处理CT、MRI等三维医学影像,还能分析病理切片和电子健康记录,…...
A860-2155-T611发那科分离式增量型主轴编码器
型号:A860-2155-T611全称:αiBZ SENSOR ASSY 512 (THIN TYPE) 薄型传感器总成品牌:FANUC(发那科)类型:分离式增量型主轴编码器(薄型)一、产品特性薄型分离式设计:传感器头…...
OpenClaw+Qwen3-VL:30B:学术论文图表解析助手
OpenClawQwen3-VL:30B:学术论文图表解析助手 1. 为什么需要论文图表解析助手 作为一名经常需要阅读大量文献的科研工作者,我深刻体会到处理论文图表的痛苦。传统的工作流程通常是:下载PDF论文→手动截图→用OCR工具识别→复制数据到Excel→…...
C#实战:基于WebAPI与Modbus构建EMS核心采集服务
1. 为什么需要EMS核心采集服务? 在工业现场,我们经常会遇到几十台甚至上百台智能电表、传感器等设备需要监控。这些设备可能来自不同厂家,使用不同的通信协议,数据格式也各不相同。想象一下,如果每个设备都需要单独开发…...
MAX17332 Arduino库详解:单节锂电池燃料计量与独立充电控制
1. 项目概述 MAX17332 是 Maxim Integrated(现为 Analog Devices)推出的一款高度集成的单节锂离子/锂聚合物电池管理芯片,专为紧凑型便携设备设计。它并非传统意义上的“纯BMS”(Battery Management System)࿰…...
实战指南:用快马为django项目生成定制化vmware开发环境,开箱即用
实战指南:用快马为Django项目生成定制化VMware开发环境,开箱即用 在实际开发场景中,虚拟机环境需要与具体项目需求紧密结合。最近我在做一个Django项目时,发现每次换电脑或重装系统都要重新配置开发环境,特别浪费时间…...
