kubernetes service的作用、类型、关系和工作原理ClusterIp、NodePort、LoadBalance、ExternalName
Service 是指向 pods 的,
Service 不是直接指向 Deployments 、ReplicaSets、StatefulSet,而是直接使用 labels 标签指向 Pod。
这种方式就提供了极大的灵活性,因为通过什么方式创建的 Pod 其实并不重要。
换句话说,
通过创建一个service服务,实现以各种方式访问到某个pod
一、关系图
在 Kubernetes 中 Service 主要有4种不同的类型,其中的 ClusterIP 是最基础的。
创建一个 NodePort 的 Service 时,它也会创建一个 ClusterIP。
而如果你创建一个 LoadBalancer,它就会创建一个 NodePort,然后创建一个 ClusterIP。
二、路由图
所有网络请求都要经过kube-proxy。
三、为什么需要service
假设有两个节点,节点有外网(4.4.4.1、4.4.4.2)和内网(1.1.1.1、1.1.1.2)的 IP 地址,
节点1的pod-nginx通过内部IP 地址(1.1.1.3)对pod-python 这个 Pod 的进行调用。
现在如果 pod-python 挂掉了重新创建了一个新的 pod-python 出来,系统会重新分配了一个新的 1.1.1.5 的 Pod IP 地址,这个时候 pod-nginx 就无法再达到 1.1.1.3 这个之前的地址了。
为了防止这种情况发生,我们就需要创建一个 Service 服务了!
四、service类型
1. internal_ip
内部ip,系统为node节点、pod、service都会创建内部ip,如下图中的1.1.x.x
2. ClusterIp
默认类型,系统为node节点、pod、service都会分配一个集群内部的Ip,这私有ip ,内部可以互相访问,外部无法访问集群内部。
为pod-python创建一个service,name叫service-python。
集群内部的所有 Pods 都可以通过 http://1.1.10.1:3000
或者 http://service-python:3000
来访问到后面的 python pods 的443端口。
上图中的 service-python 这个 Service 可以用下面的 yaml 文件来创建:
apiVersion: v1
kind: Service
metadata:name: service-python
spec:ports:- port: 3000protocol: TCPtargetPort: 443selector:run: pod-pythontype: ClusterIP
clusterIP主要在每个node节点使用iptables,将发向clusterIP对应端口的数据,转发到kube-proxy中。
然后kube-proxy自己内部实现有负载均衡的方法,并可以查询到这个service下对应pod的地址和端口,进而把数据转发给对应的pod的地址和端口。
3. NodePort
现在我们想让 ClusterIP Service 可以从集群外部进行访问,我们将Service定义为 NodePort 类型,注意其中的nodePort字段和type字段:
apiVersion: v1
kind: Service
metadata:name: service-python
spec:ports:- port: 3000protocol: TCPtargetPort: 443nodePort: 30080selector:run: pod-pythontype: NodePort
在外部,可以通过4.4.4.1:30080或者4.4.4.2:30080访问到pod-python。
在内部,可以通过1.1.1.1:30080或1.1.1.2:30080访问到pod-python。
基于ClusterIp,另外在每个Node上开放一个端口,将service的port映射到每个node的一个指定内部port上,映射的每个node的内部port都一样。将向该端口的流量导入到kube-proxy,然后由kube-proxy进一步导给对应的pod。可以从所有的位置访问这个地址。
4. LoadBalance
基于NodePort,云服务商在外部创建了一个负载均衡层,提供一个单独的ip,将流量导入到对应node。
LoadBalancer跟nodePort其实是同一种方式。
区别在于LoadBalancer比nodePort多了一步,就是可以调用cloud provider去创建LB来向节点导流。
其yaml定义为:
apiVersion: v1
kind: Service
metadata:name: service-python
spec:ports:- port: 3000protocol: TCPtargetPort: 443nodePort: 30080selector:run: pod-pythontype: LoadBalancer
5. ExternalName
假设 pod-nginx 运行在 Kubernetes 集群中,但是 python api 服务在集群外部。
这里 pod-nginx 这个 Pod 可以直接通过 http://remote.server.url.com 连接到外部的 python api 服务上去,但是如果我们考虑到以后某个时间节点希望把这个 python api 服务集成到 Kubernetes 集群中去,还不希望去更改连接的地址,这个时候我们就可以创建一个 ExternalName 类型的 Service 服务了。
现在 pod-nginx 就可以很方便地通过 http://service-python:3000
进行通信了,就像使用 ClusterIP 服务一样,当我们决定将 python api 这个服务也迁移到我们 Kubernetes 集群中时,我们只需要将服务改为 ClusterIP 服务,并设置正确的标签即可,其他都不需要更改了。
将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到了外部地址上),实现了集群内部访问即可。要求kube-dns的版本为1.7或以上.
例如你们公司的镜像仓库,最开始是用ip访问,等到后面域名下来了再使用域名访问。你不可能去修改每处的引用。但是可以创建一个ExternalName,首先指向到ip,等后面再指向到域名。所有需要访问仓库的地方,统一访问这个服务即可。
其yaml文件可定义为:
kind: Service
apiVersion: v1
metadata:name: service-python
spec:ports:- port: 3000protocol: TCPtargetPort: 443type: ExternalNameexternalName: remote.server.url.com
https://www.cnblogs.com/zhoushiya/p/12259886.html
https://blog.csdn.net/m0_37556444/article/details/84991535
神作https://mp.weixin.qq.com/s/2qYgORto5voMliFSzqNrPw
kubernetes service的作用、类型、关系和工作原理ClusterIp、NodePort、LoadBalance、ExternalName相关推荐
- Kubernetes Service的headless类型
headless 类型 在学习StatefulSet的时候发现他有个好伙伴 headless. 在创建headless类型的Service并进行测试后发现一个问题: headless和普通的Servi ...
- 计算机内页动画的作用是什么,滑环工作原理动画示意图有什么作用?
滑环工作原理动画示意图有什么作用? 发布日期:2019-01-16 滑环在电机上面所起到的作用还是非常大的,如果在购买滑环时所购买到的质量不好使用性不高,都会影响到最终的定机使用性.当然在购买了之后也 ...
- 三线压力传感器原理_三线机油压力传感器作用是什么?工作原理是什么?
机器的出现就是工业革命的开始,发动机是工业革命的一个代表性产物,其中的三线机油压力传感器更是尤为重要.那么三线机油压力传感器作用是什么?工作原理是什么?传感器那些事将为您详细介绍. 三线机油压力传感器 ...
- JSP和Servlet是什么关系,JSP工作原理?
JSP和Servlet是什么关系 其实这个问题在上面已经阐述过了,Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容.JSP本质上是Servle ...
- 计算机中SRAM的作用,SRAM特点及工作原理
SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据. 基本简介 SRAM不需要刷新电路即能保存它内部存储的数据.而DRAM(Dynamic ...
- 单片机的机器周期、震荡周期和指令周期之间的关系,工作原理。
一, 什么是震荡周期? 震荡周期:也称时钟周期,是指为单片机提供时钟信号的震荡源的周期,一般单片机上为11.0592MHZ,12MHZ和24MHZ用的也比较多.定义为时钟脉冲的倒数(可以这样来理解,时 ...
- 神经网络在控制中的作用,间歇控制器的工作原理
什么是神经网络控制 神经网络控制技术是一项复杂的系统控制技术,一般应用在变频器的控制中,它是通过对系统的辨识.运算后对变频器进行控制的一种新技术. 而且神经网络控制可以同时控制多个变频器,所以应用在多 ...
- 计算与存储的关系 GemFire工作原理
按照计算与存储的关系,我们可以将计算架构分为四代: 第一代,基于磁盘的单一系统:计算过程中需要从磁盘读取数据.小型机.大型机是其中的佼佼者,将单一系统的性能做到极致. 第二代,基于磁盘的分布式集群系统 ...
- 转码服务器 作用,转码服务器工作原理介绍.pdf
sewise转码服务器软件 Sewise Transcode Server 主讲:谢霞 转 码 Contents 目录 服 务 01 产品简介 器 02 产品模块 软 03 产品流程 件 04 产品关 ...
- 计算机ram数据原理,RAM是什么|了解内存类型与工作原理|Crucial(英睿达)
内存RAM 是什么 RAM(发音同 ram),是指随机存取存储器(random access memory,RAM)又称作"随机存储器",是与CPU直接交换数据的内部存储器,也叫主 ...
最新文章
- dom4j读写xml文件
- HDU 1498:50 years, 50 colors(二分图匹配)
- 下面使用计算机动画制作的,2020年最新电大《计算机二维动画制作》形考作业任务01-03网考试题及答案(10页)-原创力文档...
- java 倒序分页_翻动100万级的数据(自定义的MSSQL分页查询过程)
- C# Winform 出现异常:无法将顶级控件添加到控件,解决方案如下:
- 马云又向美国捐赠50万份检测试剂盒和100万只口罩
- PHP学习总结(6)——PHP入门篇之PHP语句结束符
- ue4 如何获取端口号_尝试在UE4.22中实现罪恶装备Xrd的卡通渲染
- tts高级编程 android,Android TTS(TextToSpeech) 使用
- 桥本木分式(使用回溯法求解)
- 2012服务器系统 3389,windows 2012r2如何修改默认的3389远程端口
- Android Studio Logcat 截断问题(cocos2d-x 篇)
- Linux软件安装失败问题,source.list用了bionic,实际上我的Linux是focal版本
- Rockchip HDMI 软件开发指南
- 3月面试字节一面就被刷,9月二战字节终于上岸,准备了小半年,这我要个28K应该也不过分吧?
- docker创建容器相关命令【详细版】
- 你绝对没见过的船新版本,利用Python代码制作过年春联。
- 中国南极科考队两支内陆小分队顺利“会师”
- 元素的显示visibility/display
- 用群论证明费马小定理和欧拉定理
热门文章
- vue中:key 和react 中key={} 的作用,以及ref的特性?
- 关于NSStringFromClass的一点见解
- MSSQL自动备份数据库(转载)
- Android API介绍
- stm31.js下拉菜单说明(转)
- c++ 空类大小不为0的原因
- 提交json数据给Java_java 实现通过 post 方式提交json参数操作
- ddr3配置 dsp6678_简简单单学TI 多核DSP(2):TMS320C6678的时钟配置
- 拓端tecdat|Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
- java iqq_Linux开源QQ 2012(iQQ)