Kubernetes中应用如何通过Service访问的原理

在Kubernetes中,我们创建的应用是跑在pod里,应用和应用之间需要通信访问,可以通过Service来给pod创建一个可以供访问的负载均衡(一个虚拟IP)地址,那么别的Pod来访问这个Service背后的原理是什么呢?

在Kubernetes集群中创建一个Service时,Kubernetes的DNS服务会自动为该Service创建一个DNS条目,使得集群内的其他Pod可以通过这个DNS条目来访问该Service。这一机制极大地简化了容器间通信的复杂度。
DNS条目格式是 :

<service名称>.<namespace名称>.svc.cluster.local
<service名称>:这是你在Kubernetes YAML文件中定义的Service的名称。<namespace名称>:Service所在的命名空间(namespace)。如果没有指定命名空间,默认在default命名空间中。svc:这是一个固定的字符串,表示这是一个Kubernetes Service。cluster.local:这是Kubernetes集群的默认域名后缀。

通过这个DNS条目,Pod可以无需知道Service的实际IP地址,而只需知道其Service名称和所在的命名空间,就可以通过DNS服务解析到Service的ClusterIP,从而实现服务的发现和访问。

具体建立过程原理如下

  1. DNS解析服务:Kubernetes集群包含一个核心组件称为CoreDNS,它负责解析集群内的域名查询。CoreDNS作为集群内的DNS服务器,被配置为所有Pod的默认DNS解析器。

  2. 自动创建DNS条目:每当一个新的Service被创建时,Kubernetes会自动在CoreDNS中注册一个DNS记录。这个记录包含了服务的名称、所属的命名空间信息,以及.svc.cluster.local 的后缀。

  3. 负载均衡与IP地址分配:对于每个Service,Kubernetes都会分配一个ClusterIP。这个IP地址不是直接绑定到某个Pod上,而是由kube-proxy组件通过iptables等来实现请求到后端Pods的负载均衡。

  4. 域名解析流程:当一个Pod尝试访问上述格式的DNS名称时,它的DNS请求会被CoreDNS处理,解析为Service对应的ClusterIP。然后,kube-proxy会根据负载均衡策略将请求转发到该Service背后的一个或多个Pod实例。

使用DNS来解析的好处有:

1.透明的服务发现:应用开发者不需要关心服务的实际位置或Pod IP的变化,只需要通过服务名就能实现服务间的通信,提高了应用的可移植性和维护性。

2.动态更新:当Service的后端Pod集发生变化时(例如Pod增减或重启),Kubernetes会自动更新DNS记录和负载均衡规则,确保服务的连续性和稳定性。

3.命名空间隔离:通过在DNS条目中包含命名空间名称,实现了不同命名空间间的服务隔离,允许在同一个集群内运行多个相同名称但属于不同业务环境的服务。

4.易于管理:利用这种标准化的DNS命名约定,可以简化配置文件和环境变量的编写,使得应用程序配置更加灵活和统一。

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

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

相关文章

269 基于matlab的四连杆机构动力学参数计算

基于matlab的四连杆机构动力学参数计算。将抽油机简化为4连杆机构&#xff0c;仿真出悬点的位移、速度、加速度、扭矩因数、游梁转角等参数&#xff0c;并绘出图形。程序已调通&#xff0c;可直接运行。 269机构动力学参数计算 位移、速度、加速度 - 小红书 (xiaohongshu.com)

段码屏|液晶显示模块|超低功耗LCD驱动芯片

1 简介 PC164S32 是一款支持 128 点 (32 4)显示 的多功能 LCD 控制器芯片&#xff0c;内部存储器RAM数据直接映射到 LCD 显示。可软件配置特性使其适用于包括 LCD 模块和显示子系统在内的多种 LCD 应用。主控制器与 PC164S32接口仅需3 或 4 条线。内置的省电模式极大的降低了功…

我给线程池管理框架hippo4j找bug

1 虚拟机参数不生效 hippo4j的docker启动脚本位于 docker/docker-startup.sh 。从下图可以看到 JAVA_OPT放在了jar包名 hippo4j-server.jar之后&#xff0c;而只有项目参数才放在jar包名之后。 实际上这里JAVA_OPT中包含虚拟机参数&#xff0c;而虚拟机参数要放在jar包名之前…

使用 CNN 训练自己的数据集

CNN&#xff08;练习数据集&#xff09; 1.导包&#xff1a;2.导入数据集&#xff1a;3. 使用image_dataset_from_directory()将数据加载tf.data.Dataset中&#xff1a;4. 查看数据集中的一部分图像&#xff0c;以及它们对应的标签&#xff1a;5.迭代数据集 train_ds&#xff0…

Shell 编程之免交互

一&#xff1a;Here Document 免交互 1.1&#xff1a;概述 Here Document 是一个特殊用途的代码块。它在 Linux Shell 中使用 I/O 重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp 、 cat 或 read 命令。 Here Document 是标准输入的一种替代品&a…

MySQL学习——在批处理模式下使用mysql

除了交互式地使用mysql来输入语句并查看结果。也可以以批处理模式运行mysql。为此&#xff0c;将你想要运行的语句放入一个文件中&#xff0c;然后告诉mysql从该文件读取输入&#xff1a; $> mysql < batch-file 如果你在Windows下运行mysql&#xff0c;并且文件中包含…

【前端每日基础】day31——uni-app

uni-app 开发详细介绍 基本概念 uni-app&#xff1a;uni-app 是一个使用 Vue.js 开发多端应用的框架&#xff0c;可以编译到微信小程序、支付宝小程序、百度小程序、字节跳动小程序、H5、App等多个平台。 跨平台&#xff1a;一次开发&#xff0c;多端部署。通过条件编译实现多…

【漏洞复现】DT-高清车牌识别摄像机 任意文件读取漏洞

0x01 产品简介 DT-高清 车牌识别摄像机是一款先进的安防设备&#xff0c;采用高清图像传感器和先进的识别算法&#xff0c;能够精准、快速地识别车牌信息。其高清晰该摄像机结合了智能识别技术&#xff0c;支持实时监宴图像质量确保在各种光照和天气条件下都能准确捕捉车牌信息…

【面试八股总结】MySQL事务:事务特性、事务并行、事务的隔离级别

参考资料&#xff1a;小林coding 一、事务的特性ACID 原子性&#xff08;Atomicity&#xff09; 一个事务是一个不可分割的工作单位&#xff0c;事务中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成&#xff0c;不会结束在中间某个环节。原子性是通过 undo …

CSS-in-JS学习

CSS-in-JS CSS-in-JS 是一种将样式直接写入JavaScript代码中的方法,它通常与React、Vue等现代前端框架结合使用。 1. 什么是CSS-in-JS? CSS-in-JS 是一种编写样式的方法,它允许开发者在JavaScript组件内部定义样式,通常使用类似于CSS的语法。这种方式提高了代码的可复用…

C#根据数据量自动排版标签的样例

这是一个C#根据数据量自动排版标签的样例 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using HslCommuni…

go mongo 唯一索引创建

1. 登录mongo&#xff0c;创建数据库 mongosh -u $username -p $password use test 2. 查看集合索引 db.$collection_name.getIndexes() 为不存在的集合创建字段唯一索引 package mainimport ("context""fmt""log""time""go…

代码随想录算法训练营第四十五天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

1049. 最后一块石头的重量 II 视频讲解&#xff1a; 动态规划之背包问题&#xff0c;这个背包最多能装多少&#xff1f;LeetCode&#xff1a;1049.最后一块石头的重量II_哔哩哔哩_bilibili 代码随想录 解题思路 直接将这一些石头&#xff0c;分为两堆&#xff0c;让他们尽可能…

假如Redis⾥面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

使⽤用 keys 指令可以扫出指定模式的 key 列列表。但是要注意 keys 指令会导致线程阻塞⼀一段时间&#xff0c;线上服务会停 顿&#xff0c;直到指令执⾏行行完毕&#xff0c;服务才能恢复。这个时候可以使⽤用 scan 指令&#xff0c; scan 指令可以⽆无阻塞的提取出指定模式 的…

C语言 | Leetcode C语言题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; int minimumTotal(int** triangle, int triangleSize, int* triangleColSize) {int f[triangleSize];memset(f, 0, sizeof(f));f[0] triangle[0][0];for (int i 1; i < triangleSize; i) {f[i] f[i - 1] triangle[i][i];for (int j …

SQL语句来实现不使用子查询的方式,直接通过JOIN和MAX函数来筛选出每个主表关联的最新子表记

除了使用JOIN和子查询的方式外&#xff0c;还可以使用窗口函数来实现不带子查询的方式来筛选出每个主表关联的最新子表记录。 以下是使用窗口函数的SQL语句示例&#xff1a; sql SELECT r.*, t.* FROM (SELECT r.*, t.*,ROW_NUMBER() OVER (PARTITION BY r.id ORDER BY t.creat…

latex中对目录的处理

文章目录 设置目录的章节编号宽度和章节标题的缩进设置条目的间距设置章节标题与页码之间的连接线 设置目录的章节编号宽度和章节标题的缩进 \usepackage{tocloft} \setlength{\cftsubsecnumwidth}{4cm} % 设置子章节编号的宽度为4cm \setlength{\cftsubsecindent}{1cm} % 设置…

【excel】设置二级联动菜单

文章目录 【需求】在一级菜单选定后&#xff0c;二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 之前做完了 【excel】设置可变下拉菜单&#xff08;一级联动下拉菜单&#xff09;&#xff0c;开始做二级联动菜单。 【需求】在…

python实现——综合类型数据挖掘任务(无监督的分类任务)

综合类型数据挖掘任务 航空公司客户价值分析。航空公司客户价值分析。航空公司客户价值分析。航空公司已积累了大量的会员档案信息和其乘坐航班记录&#xff08;air_data.csv&#xff09;&#xff0c;以2014年3月31日为结束时间抽取两年内有乘机记录的所有客户的详细数据。利用…

万界星空科技MES系统功能介绍

制造执行系统或MES 是一个全面的动态软件系统&#xff0c;用于监视、跟踪、记录和控制从原材料到成品的制造过程。MES在企业资源规划(ERP) 和过程控制系统之间提供了一个功能层&#xff0c;为决策者提供了提高车间效率和优化生产所需的数据。 万界星空科技MES 系统基础功能&am…