今天开始来分享Service 的基础知识,后续我们可以慢慢打磨,分享 Service 的进阶知识和原理

Service 基本概念

Service 是 K8S 最核心的概念了

我们可以通过创建 Service ,为一组具有相同功能的容器应用提供一个统一的入口地址,并且可以将请求分发到后端的各个容器应用上

我们来看看完成的 Service 是什么样子的,我们来手写一份

apiVersion: v1
kind: Service
metadata:name: service namenamespace:labels:- name: label nameannotations:- name: annotations name
spec:selector: []type:  stringclusterIP: spec ipsessionAffinity: stringports:- name: ports nameprotocol: tcp/udpport: inttargetPort: intnodePort: intstatus:loadBalancer:ingress:ip: stringhostname: string

整一张表来解释一下上面某些字段的含义

属性字段 值类型 必须? 说明
metadata.labels[] list no 自定义属性标签
metadata.annotations[] list no 自定义注解标签
spec.selector[] list yes 配置 label selector
选择具有指定 label 标签的pod 作为管理范围
spec.type string yes service 的类型
- ClusterIP

虚拟服务的 ip,用于 K8S 内部 的pod 相互访问
- NodePort
使用的是宿主机的端口,外部可以通过访问 node 的 ip 和端口,就可以达到访问内部服务的目的
- loadBalancer
使用外接的负载均衡器完成到服务的负载分发,需要在 loadBalancer 字段处指定外部负载均衡器的 ip 地址,并且同时需要定义 ClusterIP 和 NodePort
spec.ClusterIP string no 虚拟服务的 ip 地址
如果 spec.type 指定的是 loadBalancer ,那么这个 ip 就需要写,其他的情况,可以不写,系统默认分配
spec.sessionAffinity string no 是否支持 session
默认值是空,可以填我们的 ClusterIP
功能是,将一个源 IP 地址的客户端访问的请求,都转发到同一个后端 pod
spec.ports[].port int no 内部服务监听的端口
spec.ports[].targetPort int no 需要转发到 pod 的端口号
spec.ports[].nodePort int no 指定映射到物理机的端口号,这个时候需要 spec.type=NodePort
spec.status object no 属于外部均衡器,status 下面的都是 外部均衡器的配置了

Service 的名称定义

对于 service 的对象名称的定义也是需要遵循规范的

点我查看名称定义

例如截一个官方说明的图

关于 service 的端口

定义 service 的时候,我们可以定义 1 个端口,也可以定义 多个端口的

例如这样的是 service 的 1 个端口 ,官方的案例是内部服务监听 80 端口,会转发到 pod 的 9376 端口,用的是 tcp 协议

这样的是 2 个端口,属于 service 的多端口定义

例如我们的服务开了多个端口,这些端口是不能定义冲突的,我们必须要定义好每个端口的名称,端口号,以及协议,不能有歧义,如下:

上述的 1 个端口和多个端口,都是 服务监听的端口号,都是作为服务端的,需要客户端来访问的

外部的 service

如果是我们的 service 需要访问外部的一个服务,需要和外部进行一个连接,例如数据库服务,或者访问外部的一个集群的时候,我们需要如何写我们的 service 呢?

我们可以通过在 yaml 中 创建一个 无 Label Selector 的 Service 实现

我们仔细看一下,上面官方写的 1 个端口 和 多个端口的 yaml,都会使用 Label Selector 来指定一个 app,目的是为了运行起来之后能够关联到对应的 pod

例如这样

那么我们来写一个 无 Label Selector 的服务吧

  • 无 Label Selector 的 Service
apiVersion: v1
kind: Service
metadata:name: xiaomotong-svc
spec:ports:- protocol: TCPport: 80targetPort: 80

写完这个 service 发现,**他不知道如何去找到 pod 的,那么我们可以写一个 endpoints,**名称需要和 上面这个service 的名称一致,这样 endpoints 指定的 pod ,就可以被 上面这个service 访问到了

  • 写一个 Endpoints
apiVersion: v1
kind: Endpoints
metadata:name: xiaomotong-svc
subsets:
- addresses:- IP: 10.253.33.3ports:- port: 8080

这样写,将 Endpoints 要和 上面的 service 就对应起来的, 感兴趣的 xdm 可以在自己的 k8s 集群上面玩一玩, 此处写的 subsets.addresses.IP 是一个能够运行的 pod ip

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

Service 基础相关推荐

  1. Service基础(实现IBinder)(二)

    接着上文程序. IBinder:在android中用于远程操作对象的一个基本接口,可以实现进度监控. 首先,将MyService里面的IBinder返回值改成 return new MyBinder( ...

  2. web service 基础学习

    什么是Web Service? 字串3 Web Service是构建互联网分布式系统的基本部件.Web Services 正成为企业应用集成(Enterprise Application Integr ...

  3. 第8章 Service基础Activity与Service绑定

    要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法. 现在我们把Activi ...

  4. web service基础知识

    Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等. 当我们输入www.oldboyedu.com/时候,很快就能看到 ...

  5. XML与Web Service基础知识点

    一.名词 XML:Extensible Markup Language, 可扩展标记语言.可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML与HTML的区别:XM ...

  6. SQL service基础(九)用户定义数据类型和用户定义函数的概念、创建及使用方法

    实验目标: 1.学习和掌握用户定义数据类型的概念.创建及使用方法. 2.学习和掌握用户定义函数的概念.创建及使用方法. 创建一个数据库,执行shiyan15.sql脚本 一.创建和使用用户定义的函数( ...

  7. SQL service基础(二)对数据指定列查询、条件查询、查询结果排序、聚集函数查询、分组统计查询

    实验目标: 1.掌握指定列或全部列查询 2.掌握按条件查询 3.掌握对查询结果排序 4.掌握使用聚集函数的查询 5.掌握分组统计查询 一.请完成书中实验7.1,并完成以下问题. 1.查询所有学生的姓名 ...

  8. JMS(Java Messaging Service)基础

    1.基础结构 1)图表结构 2)各部分介绍 ConnectionFactory 封装了一组连接配置参数,它已被定义为管理员.每个连接工厂都是队列(Queue)连接工厂或主题(Topic)连接工厂接口的 ...

  9. SQL service基础(四)连接查询、自身连接查询、外连接查询和复合条件连接查询

    实验目标: 1.掌握涉及一个以上数据表的查询方法. 2.掌握等值连接 3.掌握自然连接 4.掌握非等值连接 5.掌握自身连接.外连接和复合条件连接 本次实验sql脚本: INSERT [dbo].[T ...

最新文章

  1. Oracle打开虚拟机闪退,虚拟机上启动Oracle服务为什么自动停止,怎么处理?
  2. java map put报错_java 集合(Map)
  3. Java JDK与JRE
  4. 异构SOA系统架构之Asp.net实现(兼容dubbo)
  5. ThinkPHP3.2.3目录结构
  6. Markdown(四)——绘图工具mermaid之状态图stateDiagram
  7. 移动APP测试用例设计的关注点
  8. 阿里巴巴监管控一体化运维|阿里巴巴DevOps实践指南
  9. 操作系统实验一实验报告
  10. mp3转html,使用javascript将wav转换为mp3
  11. 再谈GPU的内存带宽
  12. optionnally mysql_关于Tomcat与MySQL连接池问题的解析!
  13. html项目符号正方形,html 项目符号
  14. MySQLyog的使用
  15. Python爬虫进阶--js逆向-某天下与某某二手房密码加密分析
  16. 输出三位数的个十百位数
  17. MT4/MT5 EA 回测价格模式OHLC之坑
  18. 华为云硬盘备份(VBS)服务
  19. 大整数乘法(Karatsuba算法的字符串形式的C++实现)
  20. ExaGrid在2021年网络计算大奖评选中大获全胜

热门文章

  1. 您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准
  2. 【周易AIPU 仿真】R329开发板模拟仿真
  3. QINQ 交换机配置
  4. Restful 风格开发 Spring MVC 的视图解析器---使用 beetl 模板引擎
  5. 基于JavaSSM+MySQL的学生综合素质测评系统设计与实现
  6. html2canvas截取html图片时,图片是空白图片
  7. SpringBoot 整合 Neo4j
  8. PX4姿态解算源码原理理解
  9. 决定代理ip网速的原因有哪些
  10. 【Android笔记41】使用Android实现一个简易版本的购物车小案例