Kubernetes从零到精通(10-服务Service)

Service简介

        Deployment这种工作负载能管理我们应用Pod的副本数,并实现动态的创建和销毁,所以Pod本身是临时资源(IP随时可能变化)。现在如果某组Pod A需要访问另一组Pod B,A就需要在应用的配置参数里动态跟踪并更改B的ip和端口,把这种需求放在业务端去实现显然是非常不合理的。Kubernetes给我们提供了解决方案:Kubernetes Service。

        Kubernetes Service的一个关键目标是让你无需修改现有应用以使用某种不熟悉的服务发现机制。Service是Kubernetes集群中用来提供负载均衡、服务发现和通信的关键组件,能够让Pod之间以及外部流量和内部应用进行稳定通信。

Service底层工作原理

ClusterIP和kube-proxy组件

        Service的核心机制依赖于Kubernetes的虚拟IP概念和kube-proxy组件(除非我们已经部署了自己的替换组件来替代kube-proxy)。每个Service都会分配一个ClusterIP,作为服务的固定入口。kube-proxy在每个节点上运行,负责维护IP关系表,将到达ClusterIP的流量转发到对应的Pod。

iptables和IPVS

        kube-proxy负责设置网络规则,常用的机制有:

iptables:通过添加大量的NAT规则来进行流量转发,但当服务数量增大时,性能下降较明显。

IPVS:相比iptables,IPVS提供了更高效的流量转发机制。IPVS使用更高效的哈希表来存储转发规则,具有更高的性能,适合大规模集群中的服务发现和负载均衡。

忘记Linux中iptables和IPVS概念的小伙伴可以到这里了解:

Linux技术03-Netfilter、Iptables、Nftables、Firewalld

Linux技术04-IPVS

EndpointSlice

        Service本身并不直接维护Pod的IP地址,而是通过EndpointSlice对象记录符合Service选择器的Pod列表。每当符合条件的Pod发生变更,Kubernetes控制器会更新EndpointSlice,对应的kube-proxy也会随之调整路由规则,并操作iptables或IPVS。

负载均衡

        Service提供了默认的轮询负载均衡(Round Robin),即将流量均匀分配到后端Pod。具体的流量分配方式依赖于kube-proxy的转发机制,如iptables或IPVS。

Service示例

        定义一个Deployment和一个Service:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-app-containerimage: my-app:latestports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: my-app-service
spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
  • Deployment 定义了应用Pod的副本数(replicas),并通过标签选择器 app:my-app进行匹配。
  • Service 定义了一个ClusterIP类型的服务,通过标签选择器 app:my-app将流量分发到符合条件的Pod。Service使用端口80对外提供服务,并将流量转发到Pod内部8080端口。

Service 类型

ClusterIP

        仅在集群内部可以访问,提供一个虚拟IP地址供集群中的其他Pod访问,如上面的示例。

NodePort

        在每个节点上暴露一个固定端口,并通过该端口访问服务。例如管理员需要访问监控组件prometheus的web ui,可以通过这种方式。

apiVersion: v1
kind: Service
metadata:name: my-app-nodeport-service
spec:type: NodePortselector:app: my-appports:- protocol: TCPport: 80targetPort: 8080nodePort: 30007

        示例中这个服务会在每个node节点的30007端口暴露服务,我们通过任一node的IP和30007端口即可从外部访问服务。

LoadBalancer

        使用外部负载均衡器,在云服务提供商上动态创建。在支持 LoadBalancer的云环境中,这种服务类型可以自动创建负载均衡器(依赖相关的cloud-controller-manager组件),并为其分配一个外部IP地址供外部访问。

apiVersion: v1
kind: Service
metadata:name: nginx-serviceannotations:service.beta.kubernetes.io/aws-load-balancer-type: "nlb" # 使用AWS Network Load Balancer (可选)
spec:type: LoadBalancerselector:app: nginxports:- port: 80targetPort: 80protocol: TCP

ExternalName

        映射到外部服务的DNS名称,而不是映射到Kubernetes内部的Pod。该映射将集群的DNS服务器配置为返回具有该外部主机名值的cname记录;集群不会为之创建任何类型代理。

        例如Pod需要访问位于集群外的数据库、API 或者其他第三方服务;为外部的服务创建一个集群内部的别名,以便简化服务调用。

apiVersion: v1
kind: Service
metadata:name: google-service
spec:type: ExternalNameexternalName: www.google.com

Headless Services(无头服务)

        有时我们并不需要负载均衡,也不需要单独的Service IP。遇到这种情况,可以通过显式设置 集群 IP(spec.clusterIP)的值为"None" 来创建无头服务(Headless Service)。

        无头Service不会获得集群 IP,kube-proxy不会处理这类Service, 而且平台也不会为它们提供负载均衡或路由支持。

        无头Service通过内部DNS记录报告各个Pod的端点IP地址,这些DNS记录是由集群的DNS服务所提供的。

        无头Service一个常见的使用场景是StatefulSet管理的有状态服务。其他应用的Pod,需要直接访问各个节点DNS(例如kafka-0,kafka-1,kafka-2)。

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

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

相关文章

【数学建模】相关系数

第一部分:相关系数简介 总体与样本: 总体:指研究对象的全体,比如全国人口普查数据。样本:从总体中抽取的一部分个体,如通过问卷调查收集的学生数据。 皮尔逊相关系数: 总体皮尔逊相关系数&…

Linux 8250串口控制器

1 8250串口类型的识别 Intel HW都使用DesignWare 8250: drivers/mfd/intel-lpss-pci.c drivers/tty/serial/8250/8250_dw.c IIR寄存器的高2位bit7、bit6用来识别8250串口的类型: 0 - 8250,无FIFO 0 - 并且存在SCR(Scratch registe…

安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静

针对用户新能源接入后存在安全隐患、缺少有效监控、发电效率无法保证、收益计算困难、运行维护效率低等通点,提出的Acrel-1000DP分布式光伏监控系统平台,对整个用户电站全面监控,为用户实现降低能源使用成本、减轻变压器负载、余电上网&#…

如何构建大数据治理平台,助力企业数据决策

建设背景 (1)什么是数据资产 资产由企业及组织拥有和控制,能够提供增值服务、带来经济利益的重要资源。 资产不但需要管理, 更需要运营。 (2)数据资产运营中的问题 数据资产运营中存在的问题主要包括以下…

CANopen协议的理解

本文的重点是对CANopen协议的理解,不是编程实现 参考链接 canopen快速入门 1cia301协议介绍_哔哩哔哩_bilibili CANopen是什么? CANopen通讯基础(上)_哔哩哔哩_bilibili CANopen概述 图1. CAN报文标准帧的格式 CAN的报文可简单…

docker-compose 部署 flink

下载 flink 镜像 [rootlocalhost ~]# docker pull flink Using default tag: latest latest: Pulling from library/flink 762bedf4b1b7: Pull complete 95f9bd9906fa: Pull complete a880dee0d8e9: Pull complete 8c5deab9cbd6: Pull complete 56c142282fae: Pull comple…

Redis搭建集群

功能概述 Redis Cluster是Redis的自带的官方分布式解决方案,提供数据分片、高可用功能,在3.0版本正式推出。 使用Redis Cluster能解决负载均衡的问题,内部采用哈希分片规则: 基础架构图如下所示: 图中最大的虚线部分…

路由器WAN口和LAN口有什么不一样?

“ 路由器WAN口和LAN口的区别,WAN是广域网端口,LAN是本地网端口。WAN主要用于连接外部网络,而LAN用来连接家庭内部网络,两者主要会在标识上面有区别。以往大部分路由器的WAN只有一个,LAN口则有四个或以上,近…

《深度学习》—— 神经网络基本结构

前言 深度学习是一种基于神经网络的机器学习算法,其核心在于构建由多层神经元组成的人工神经网络,这些层次能够捕捉数据中的复杂结构和抽象特征。神经网络通过调整连接各层的权重,从大量数据中自动学习并提取特征,进而实现预测或…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688,功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算,可支持 16 路高清视频实时分析,灵活应对图像、语音、自…

Python面试宝典第48题:找丑数

题目 我们把只包含质因子2、3和5的数称作丑数(Ugly Number)。比如:6、8都是丑数,但14不是,因为它包含质因子7。习惯上,我们把1当做是第一个丑数。求按从小到大的顺序的第n个丑数。 示例 1: 输入…

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…

uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新

最近写的一个功能属实把我难倒了,刚开始我请求一次数据获取所有标记点,然后设置到地图上,然后后面根据socket传来的数据对这些标记点实时更新,改变标记点的图片或者文字, 1:第一个想法是直接全量替换,事实证明这样不行,会很卡顿,有明显闪烁感,如果标记点比较少,就十几个可以用…

【网络安全】-rce漏洞-pikachu

rce漏洞包含命令执行漏洞与代码执行漏洞 文章目录 前言 什么是rce漏洞? 1.rce漏洞产生原因: 2.rce的分类: 命令执行漏洞: 命令拼接符: 常用函数: 代码执行漏洞: 常用函数: 分类&…

信号与线性系统综合实验

文章目录 一、实验目的二、实验内容及其结果分析(一)基础部分(二)拓展部分(三)应用设计部分 三、心得体会 一、实验目的 1、掌握连续时间信号与系统的时域、频域综合分析方法;   2、掌握运用M…

SAP B1 单据页面自定义 - 用户界面编辑字段

背景 接《SAP B1 基础实操 - 用户定义字段 (UDF)》,在设置完自定义字段后,如下图,通过打开【用户定义字段】可打开表单右侧的自定义字段页。然而再开打一页附加页面操作繁复,若是客户常用的定义字段,也可以把这些用户…

JMM 指令重排 volatile happens-before

在单线程程序中,操作系统会通过编译器优化重排序、指令级并行重排序、内存系统重排序三个步骤对源代码进行指令重排,提高代码执行的性能。 但是在多线程情况下,操作系统“盲目” 地进行指令重排可能会导致我们不想看到的问题,如经…

2024第三届大学生算法大赛 真题训练2 解题报告 | 珂学家 | FFT/NTT板子

前言 题解 D是FFT板子题,这么来看,其实处于ACM入门题,哭了T_T. D. 行走之谜 思路: FFT 如果你知道多项式乘法,继而知道FFT,那题纯粹就是板子题,可惜当时比赛的时候,无人AC。 这题来简单抽象…

物联网之PWM呼吸灯、脉冲、LEDC

MENU 前言原理硬件电路设计软件程序设计analogWrite()函数实现呼吸灯效果LEDC输出PWM信号 前言 学习制作呼吸灯,通过LED灯的亮度变化来验证PWM不同电压的输出。呼吸灯是指灯光在单片机的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。 原理 脉冲宽…

【中秋月饼系列】2024年立体月饼新鲜出炉----python画月饼(1)附完整代码

【中秋月饼系列】2024年立体月饼新鲜出炉 ----python画月饼(1)附完整代码 本文目录: 零、时光宝盒 一、2024年中秋节立体逼真月饼(效果展示) 二、Python 海龟画图主要方法 (1)海龟画图的主…