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相关推荐

  1. Kubernetes Service的headless类型

    headless 类型 在学习StatefulSet的时候发现他有个好伙伴 headless. 在创建headless类型的Service并进行测试后发现一个问题: headless和普通的Servi ...

  2. 计算机内页动画的作用是什么,滑环工作原理动画示意图有什么作用?

    滑环工作原理动画示意图有什么作用? 发布日期:2019-01-16 滑环在电机上面所起到的作用还是非常大的,如果在购买滑环时所购买到的质量不好使用性不高,都会影响到最终的定机使用性.当然在购买了之后也 ...

  3. 三线压力传感器原理_三线机油压力传感器作用是什么?工作原理是什么?

    机器的出现就是工业革命的开始,发动机是工业革命的一个代表性产物,其中的三线机油压力传感器更是尤为重要.那么三线机油压力传感器作用是什么?工作原理是什么?传感器那些事将为您详细介绍. 三线机油压力传感器 ...

  4. JSP和Servlet是什么关系,JSP工作原理?

    JSP和Servlet是什么关系 其实这个问题在上面已经阐述过了,Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容.JSP本质上是Servle ...

  5. 计算机中SRAM的作用,SRAM特点及工作原理

    SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据. 基本简介 SRAM不需要刷新电路即能保存它内部存储的数据.而DRAM(Dynamic ...

  6. 单片机的机器周期、震荡周期和指令周期之间的关系,工作原理。

    一, 什么是震荡周期? 震荡周期:也称时钟周期,是指为单片机提供时钟信号的震荡源的周期,一般单片机上为11.0592MHZ,12MHZ和24MHZ用的也比较多.定义为时钟脉冲的倒数(可以这样来理解,时 ...

  7. 神经网络在控制中的作用,间歇控制器的工作原理

    什么是神经网络控制 神经网络控制技术是一项复杂的系统控制技术,一般应用在变频器的控制中,它是通过对系统的辨识.运算后对变频器进行控制的一种新技术. 而且神经网络控制可以同时控制多个变频器,所以应用在多 ...

  8. 计算与存储的关系 GemFire工作原理

    按照计算与存储的关系,我们可以将计算架构分为四代: 第一代,基于磁盘的单一系统:计算过程中需要从磁盘读取数据.小型机.大型机是其中的佼佼者,将单一系统的性能做到极致. 第二代,基于磁盘的分布式集群系统 ...

  9. 转码服务器 作用,转码服务器工作原理介绍.pdf

    sewise转码服务器软件 Sewise Transcode Server 主讲:谢霞 转 码 Contents 目录 服 务 01 产品简介 器 02 产品模块 软 03 产品流程 件 04 产品关 ...

  10. 计算机ram数据原理,RAM是什么|了解内存类型与工作原理|Crucial(英睿达)

    内存RAM 是什么 RAM(发音同 ram),是指随机存取存储器(random access memory,RAM)又称作"随机存储器",是与CPU直接交换数据的内部存储器,也叫主 ...

最新文章

  1. dom4j读写xml文件
  2. HDU 1498:50 years, 50 colors(二分图匹配)
  3. 下面使用计算机动画制作的,2020年最新电大《计算机二维动画制作》形考作业任务01-03网考试题及答案(10页)-原创力文档...
  4. java 倒序分页_翻动100万级的数据(自定义的MSSQL分页查询过程)
  5. C# Winform 出现异常:无法将顶级控件添加到控件,解决方案如下:
  6. 马云又向美国捐赠50万份检测试剂盒和100万只口罩
  7. PHP学习总结(6)——PHP入门篇之PHP语句结束符
  8. ue4 如何获取端口号_尝试在UE4.22中实现罪恶装备Xrd的卡通渲染
  9. tts高级编程 android,Android TTS(TextToSpeech) 使用
  10. 桥本木分式(使用回溯法求解)
  11. 2012服务器系统 3389,windows 2012r2如何修改默认的3389远程端口
  12. Android Studio Logcat 截断问题(cocos2d-x 篇)
  13. Linux软件安装失败问题,source.list用了bionic,实际上我的Linux是focal版本
  14. Rockchip HDMI 软件开发指南
  15. 3月面试字节一面就被刷,9月二战字节终于上岸,准备了小半年,这我要个28K应该也不过分吧?
  16. docker创建容器相关命令【详细版】
  17. 你绝对没见过的船新版本,利用Python代码制作过年春联。
  18. 中国南极科考队两支内陆小分队顺利“会师”
  19. 元素的显示visibility/display
  20. 用群论证明费马小定理和欧拉定理

热门文章

  1. vue中:key 和react 中key={} 的作用,以及ref的特性?
  2. 关于NSStringFromClass的一点见解
  3. MSSQL自动备份数据库(转载)
  4. Android API介绍
  5. stm31.js下拉菜单说明(转)
  6. c++ 空类大小不为0的原因
  7. 提交json数据给Java_java 实现通过 post 方式提交json参数操作
  8. ddr3配置 dsp6678_简简单单学TI 多核DSP(2):TMS320C6678的时钟配置
  9. 拓端tecdat|Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
  10. java iqq_Linux开源QQ 2012(iQQ)