当前位置: 首页 > news >正文

【云原生kubernetes】k8s service使用详解

一、什么是服务service?

在k8s里面,每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,重启pod的ip地址会发生变化,此时客户如果访问原先的ip地址则会报错 ;

Service (服务)就是用来解决这个问题的, 对外服务的统一入口,防止pod失联,定义一组pod的访问策略(服务发现、负载均衡) ;

一个Service可以看作一组提供相同服务的Pod的对外访问接口,作用于哪些Pod是通过标签选择器来定义的 ,Service是一个概念,主要作用的是节点上的kube-proxy服务进程 ;

举例来说,定义了3个商品微服务,由网关作为统一访问入口, 前端不需要关心它们调用了哪个后端副本。 然而组成这一组后端程序的 Pod 实际上可能会发生变化, 前端客户端不应该也没必要知道,而且也不需要跟踪这一组后端的状态。

简而言之,Service 定义的这种抽象能够解耦这种关联;

二、service分类

根据使用场景的不同,service可以分成下面几类

2.1 ClusterIP

默认类型,自动分配一个【仅集群内部】可以访问的虚拟IP

2.2 NodePort

对外访问应用使用,在ClusterIP基础上为Service在每台机器上绑定一个端口,就可以通过: ip+NodePort来访问该服务 ,在之前搭建k8s集群部署nginx的时候我们使用过;

2.3 LoadBalancer(付费方案)

  • 使在NodePort的基础上,借助公有云创建一个外部负载均衡器,并将请求转发到NodePort ;
  • 可以实现集群外部访问服务的另外一种解决方案,不过并不是所有的k8s集群都会支持,大多是在公有云托管集群中会支持该类型 ;

2.4 ExternalName (使用较少)

把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有 Kubernetes 1.7或更高版本的kube-dns才支持。

三、service和pod的关系

service和pod之间是通过 selector.app进行关联的 ,对应到yaml中的核心配置如下:

spec: # 描述selector: # 标签选择器,确定当前service代理控制哪些podapp: test-nginx

yaml 配置模板文件

apiVersion: v1
kind: Service
metadata:creationTimestamp: nullname: test-svc
spec:ports:- port: 80  # service服务端口protocol: TCPtargetPort: 80 # pod端口,常规和容器内部端口一致selector:app: test-nginx-pod
status:loadBalancer: {}

四、Service 之 ClusterIP 使用

ClusterIP 属于service的一种,一般作为集群内部应用互相访问时使用,接下来通过实际演示进行详细的说明;

4.1 在当前目录下,创建一个deploy-nginx-pod.yaml,配置如下

apiVersion: apps/v1
kind: Deployment
metadata:name: congge-deploynamespace: dev
spec:replicas: 3selector: matchLabels:app: congge-nginx-podtemplate:metadata:labels:app: congge-nginx-podspec:containers:- name: congge-nginximage: nginx:1.23.0

使用apply命令创建pod,

kubectl apply -f deploy-nginx-pod.yaml

可以看到,成功创建了一个3副本的pod集群; 

4.2 暴露服务为 clusterIP 类型

kubectl expose deploy congge-deploy --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n default

执行成功之后,可以看到创建了一个clusterIP类型的service;

有了这个clusterIp服务之后,后续不管nginx服务扩缩容,还是nginx的pod的IP地址如何变化,外部只需要统一访问这个clusterIP分配的这个IP+端口即可;

4.3 查看服务

多了个类型是ClusterIP的,通过curl clusterIp+port可以访问

kubectl get deployment,pod,svc -n dev -o wide

五、Service 之 NodePort 使用

上面了解到clusterIp这种方式一般作为集群内部各应用访问时使用,但实际业务场景中,有些应用服务需要暴露出去,通过外网去访问,这时候就需要创建NodePort,这个在k8s搭建篇中最后部署nginx的时候有提到;

5.1 关于NodePort

  • 常规业务的场景不全是集群内访问,也需要集群外业务访问 ;
  • 那么ClusterIP就满足不了了,NodePort是其中的一种实现集群外部访问的方案 ;
  • 对外访问应用使用,在ClusterIP基础上为Service在每台机器上绑定一个端口,就可以通过: ip+NodePort来访问该服务 ;

5.2 创建NodePort类型的服务

在上面我们创建了一个基于clusterIp类型的service

使用下面的命令创建一个基于 NodePort 的service

kubectl expose deploy congge-deploy --name=svc-nodeport-nginx1 --type=NodePort --port=80 --target-port=80 -n default

执行完成之后,就多了一个NodePort的service

使用浏览器访问下当前主机的公网IP就可以访问了(master或者node节点都可以访问);

查看服务详情

通过这个命令,可以查看上述创建的NodePort详细信息;

kubectl describe svc svc-nodeport-nginx1 -n default

关于NodePort暴露对外端口说明

Kubeadm部署,暴露端口对外服务,会随机选端口,默认范围是30000~32767,也可以手动修改和指定端口范围

关于Endpoint参数说明

  • 是k8s中的一个资源对象,存储在etcd中,记录service对应的所有pod的访问地址 ;
  • 里面有个Endpoints列表,就是当前service可以负载到的pod服务入口 ;
  • service和pod之间的通信是通过endpoint实现的 ;

可以使用下面的命令查看endpoint列表

kubectl get ep svc-nodeport-nginx1 -n default -o wide

关于Service如何分发请求到后端的多个Pod

Service所处的位置就如同图中展示的,处在客户端和pod之间,这就很像nginx或者其他具备网关的组件的能力了,事实上,也差不多就是我们理解的那样,一个Service的服务背后可能挂载着N多个Pod,那么具体来说,Service如何分发请求到后端的多个Pod的呢?

kubernetes提供了两种负载均衡策略 :

  • 默认,kube-proxy的策略,如随机、轮询 ;
  • 使用会话保持模式,即同个客户端的请求固定到某个pod,在spec中添加sessionAffinity:ClientIP即可 ;

NodePort 负载均衡机制验证

查看pod信息,显示了上面创建的以congge-deploy开头的3个nginx

 其实来说,这也就是对应了3个pod中的3个nginx容器,如果使用curl的方式查看其中某个nginx,可以正常输出nginx欢迎页面的内容;

接下来,我们只需要进入到nginx容器内部,修改下nginx欢迎页的html内容,就可以看出Service的负载均衡效果了;

进入docker容器进行html内容的修改

#进入容器
kubectl exec -it congge-deploy-768455649c-2kv5r -n default /bin/sh
kubectl exec -it congge-deploy-768455649c-mfkbf -n default /bin/sh
kubectl exec -it congge-deploy-768455649c-xlh7s -n default /bin/sh#执行修改
echo "hello this is node1 " > /usr/share/nginx/html/index.html
echo "hello this is node2 " > /usr/share/nginx/html/index.html
echo "hello this is node3 " > /usr/share/nginx/html/index.html

执行过程

接下来使用当前主机节点IP+图中的端口在浏览器访问下

我们连续访问多次,看下返回的内容如何

第一次:

 第二次:

当然,可以通过在当前节点上通过curl cluserIP的方式,效果类似

其实也可以查看下当前创建这个SVC的时候默认的配置,使用yaml格式输出一下

kubectl get svc svc-nodeport-nginx1 -n default -o yaml

总结:通过上面的实际操作,在默认情况下,负载均衡为基于随机的这种策略;

相关文章:

【云原生kubernetes】k8s service使用详解

一、什么是服务service? 在k8s里面,每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,重启pod的ip地址会发生变化,此时客户如果访问原先的ip地址则会报错 ; Service (服务)就是用来解决这个问题的…...

Python 数据可视化的 3 大步骤,你知道吗?

Python实现可视化的三个步骤: 确定问题,选择图形转换数据,应用函数参数设置,一目了然 1、首先,要知道我们用哪些库来画图? matplotlib Python中最基本的作图库就是matplotlib,是一个最基础的Python可视…...

CSS基础:盒子模型和浮动

盒子模型 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用 CSS盒模型本质上是一个盒子,封装HTML元素。 它包括:外边距(margin),边框(bord…...

OpenHarmony使用Socket实现一个TCP服务端详解

点击获取BearPi-HM_Nano源码 ,以D4_iot_tcp_server为例: 点击查看:上一篇关于socket udp实现的解析 查看 TCPServerTask 方法实现: static void TCPServerTask(void) {//连接WifiWifiConnect("TP-LINK_65A8",...

kafka监控工具安装和使用

1. KafkaOffsetMonitor 该监控是基于一个jar包的形式运行,部署较为方便。只有监控功能,使用起来也较为安全(1)消费者组列表 (2)查看topic的历史消费信息. (3)每个topic的所有parition列表(topic,pid,offset,logSize,lag,owner) (4)对consumer消费情况进…...

近期工作感悟

从应届生变为社畜已经半年了,在这里吐槽一下自己的所想给自己看。 首先是心理层面上的,初期大大增加的压力。 我觉得应届生能够来到大厂的,基本都是在大学有去规划学习,对自己技能比较认可的。比如我在学校自学游戏开发&#xff…...

大数据框架之Hadoop:HDFS(三)HDFS客户端操作(开发重点)

3.1 HDFS客户端环境准备 1.根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径(例如:D:\javaEnv\hadoop-2.77),如下图所示。 2.配置HADOOP_HOME环境变量,如下图所示。 3&#…...

多模式支持无线监控技术:主动式定位、被动式定位

物联网空间信息与数字技术发展至今,已经催生了一大批优秀的践行者。在日常与商业应用中,室内外定位领域依托于这一技术的发展,更是在近几年风光无限。但是并不是说室内定位与室外定位都已经相当成熟,相对来说,室内定位…...

Cy5 Alkyne,1223357-57-0,花青素Cyanine5炔基,氰基5炔烃

CAS号:1223357-57-0 | 英文名: Cyanine5 alkyne,Cy5 Alkyne | 中文名:花青素CY5炔基CASNumber:1223357-57-0Molecular formula:C35H42ClN3OMolecular weight:556.19Purity:95%Appear…...

【MySQL】MySQL 中 WITH 子句详解:从基础到实战示例

文章目录一、什么是 WITH 子句1. 定义2.用途二、WITH 子句的语法和用法1.语法2.使用示例3.优点三、总结"梦想不会碎,只有被放弃了才会破灭。" "Dreams wont break, only abandoned will shatter."一、什么是 WITH 子句 1. 定义 WITH 子句是 M…...

c/c++开发,无可避免的模板编程实践(篇一)

一、c模板 c开发中,在声明变量、函数、类时,c都会要求使用指定的类型。在实际项目过程中,会发现很多代码除了类型不同之外,其他代码看起来都是相同的,为了实现这些相同功能,我们可能会进行如下设计&#xf…...

mulesoft MCIA 破釜沉舟备考 2023.02.13.04

mulesoft MCIA 破釜沉舟备考 2023.02.13.03 1. An integration Mule application consumes and processes a list of rows from a CSV file.2. One of the backend systems involved by the API implementation enforces rate limits on the number of request a particle clie…...

Camtasia2023最新版本新功能及快捷键教程

使用Camtasia,您可以毫不费力地在计算机的显示器上录制专业的活动视频。除了录制视频外,Camtasia还允许您从外部源将高清视频导入到录制中。Camtasia的独特之处在于它可以创建包含可单击链接的交互式视频,以生成适用于教室或工作场所的动态视…...

Fabric磁盘扩容后数据迁移

线上环境原来的磁盘比较小,随着业务数据的增多,磁盘需要扩容,因此需要把原来docker数据转移至新的数据盘。 数据迁移 操作系统: centOS 7   docker默认的数据目录为/var/lib/docker   创建一个新的目录/opt/dockerdata&…...

大厂光环下的功能测试,出去面试自动化一问三不知

在一家公司待久了技术能力反而变弱了,原来的许多知识都会慢慢遗忘,这种情况并不少见。一个京东员工发帖吐槽:感觉在大厂快待废了,出去面试问自己接口环境搭建、pytest测试框架,自己做点工太久都忘记了。平时用的时候搜…...

SATA SSD需要NCQ开启吗?

一、故事开篇最近有同学在咨询,SATA SSD是否需要NCQ功能?借此机会,今天我们来聊聊这个比较古老的话题,关于SATA协议的NCQ的故事。首先我们先回顾下SATA与NCQ的历史:2003年,SATA协议1.0问世,传输…...

知识图谱业务落地技术推荐之图神经网络算法库图计算框架汇总

1.PyTorch Geometric: https://pytorch-geometric.readthedocs.io/en/latest/notes/introduction.html PyG是一个基于PyTorch的用于处理不规则数据(比如图)的库,或者说是一个用于在图等数据上快速实现表征学习的框架。它的运行速度很快,训练模型速度可以达到DGL(Deep Gra…...

==与equals()的区别

与equals()的区别 对于 比较的是值是否相等如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址 对于equals方法 equals方法不能作用于基本数据类型的变量&#xff…...

【人工智能】对贝叶斯网络进行吉布斯采样

问题 现要求通过吉布斯采样方法,利用该网络进行概率推理(计算 P(RT|SF, WT)、P2(CF|WT)的概率值)。 原理 吉布斯采样的核心思想为一维一维地进行采样,采某一个维度的时候固定其他的维度,在本次实验中,假…...

Java 面向对象基础

文章目录一、类和对象1. 类的定义2. 对象的使用二、对象内存图三、成员变量和局部变量四、封装1. private 关键字2. this 关键字五、构造方法六、标准类制作一、类和对象 在此之前,我们先了解两个概念,对象和类。 万物皆对象,客观存在的事物…...

RocketMQ源码(21)—ConsumeMessageConcurrentlyService并发消费消息源码

基于RocketMQ release-4.9.3,深入的介绍了ConsumeMessageConcurrentlyService并发消费消息源码。 此前我们学习了consumer消息的拉取流程源码: RocketMQ源码(18)—DefaultMQPushConsumer消费者发起拉取消息请求源码RocketMQ源码(19)—Broker处理Default…...

基于 STM32+FPGA 的多轴运动控制器的设计

运动控制器是数控机床、高端机器人等自动化设备控制系统的核心。为保证控制器的实用性、实时性和稳定 性,提出一种以 STM32 为主控制器、FPGA 为辅助控制器的多轴运动控制器设计方案。给出了运动控制器的硬件电路设计, 将 S 形加减速算法融入运动控制器&…...

《爆肝整理》保姆级系列教程python接口自动化(十三)--cookie绕过验证码登录(详解

python接口自动化(十三)--cookie绕过验证码登录(详解 简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。获取…...

soapui + groovy 接口自动化测试

1.操作excel的groovy脚本 package pubimport jxl.* import jxl.write.Label import jxl.write.WritableWorkbookclass ExcelOperation {def xlsFiledef workbookdef writableWorkbookdef ExcelOperation(){}//设置xlsFile文件路径def ExcelOperation(xlsFile){this.xlsFile x…...

Linux内存管理(三十五):内存规整简介

源码基于:Linux5.4 0. 前言 伙伴系统以页面为单位来管理内存,内存碎片也是基于页面的,即由大量离散且不连续的页面组成的。从内核角度来看,出现内存碎片不是好事情,有些情况下物理设备需要大段的连续的物理内存,如果内核无法满足,则会发生内核错误。内存规整就是为了解…...

Java连接Redis

Jedis是Redis官方推荐的Java连接开发工具。api&#xff1a;https://tool.oschina.net/apidocs/apidoc?apijedis-2.1.0一、 导入包<!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><…...

Python语言零基础入门教程(十六)

Python 模块 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用&#xff0c;更易懂。 模块能定…...

SAP ERP系统SD模块常用增强之一:VA01/VA02创建或修改SO的输入检查

在SAP/ERP项目的实施中销售管理模块&#xff08;SD&#xff09;的创建和修改销售订单必定会有输入字段校验检查的需求&#xff0c;来防止业务人员录入错误或少录入数据&#xff0c;SAP公司也考虑到这一点&#xff0c;所以这方面的配置功能也非常强大&#xff0c;通常情况下不需…...

深度学习知识补充

候选位置(proposal) RCNN 什么时ROI&#xff1f; 在图像处理领域&#xff0c;感兴趣区域(region of interest &#xff0c; ROI) 是从图像中选择的一个图像区域&#xff0c;这个区域是你的图像分析所关注的重点。圈定该区域以便进行进一步处理。使用ROI圈定你想读的目标&…...

Vue笔记(1)——数据代理与绑定

一、初始Vue 1.想让Vue工作&#xff0c;就必须创建一个Vue实例&#xff0c;且要传入一个配置对象&#xff1b; 2.root容器里的代码依然符合html规范&#xff0c;只不过混入了一些特殊的Vue语法&#xff1b; 3.root容器里的代码被称为【Vue模板】&#xff1b; 4.Vue实例和容器是…...

如何免费推广网站/杭州网站优化平台

对于一个良好的系统&#xff0c;界面一般都会用到统一的风格。如此&#xff0c;客户体验也肯定不错&#xff0c;给人一种有始有终的感觉。在开发上&#xff0c;也就要求技术上具有很大程度上的统一口径&#xff0c;利于开发&#xff0c;提高了生产力。后期维护时也能很明显感觉…...

香港网站建设有限公司/国内最新消息

Koa 是 Express 的轻量级版本。它是一个中间件框架,没有通过 Express 提供的所有附加模块(路由和模板建模)。Koa 是由与 Express 相同的团队开发的。事实上,许多人会争辩说 Koa 说“Express 5.0”,因为它的发展是由于原始 Express 的一些专利问题(见 Reddit)。 Koa 提供…...

石家庄建设网站哪家好/近一周的新闻大事热点

Guitarpro 8.1版本中&#xff0c;已成功推出全新的简谱功能&#xff01;Guitar Pro是一款非常流行的音乐制谱软件&#xff0c;它支持各种乐器的制谱。在思杰马克丁引入这款软件之后&#xff0c;为它专门定制了中文版&#xff0c;并针对中国用户重新定价。GuitarPro经过5年研发&…...

iis怎么做IP网站/uc搜索引擎入口

多是以下三种情况 1 验证码需要的扩展没有安装或者没有开 一般都是GD库 2 文件有bom头影响了验证码的输出 用一些编辑器去除bom头 3 在验证码输出前缓冲区有内容 这种情况比较多 在验证码输出前调用一下 ob_clean()转载于:https://www.cnblogs.com/zwsblogs/p/9223280.html...

平面设计网上自学/昆明seo

计算机C语言1234算机C语言1234说明&#xff1a;主要找你的填空题第一道题的题干&#xff0c;然后后面的答案都是相对应一套一套的&#xff0c;如&#xff1a;假如你的填空题第一道题的题干和这里的第1套是一样的(有些提干是一模一样的&#xff0c;如第1和25&#xff0c;33、36和…...

南京专业做网站的公司/百度提交工具

原文地址为&#xff1a; IE6和IE7共存方法&#xff08;别人是别人的&#xff0c;我是我的&#xff09;2009年9月3日更新 本文是较老的文章&#xff0c;最新的共存方法&#xff0c;建议使用IETester最新版。最近版IETester的下载和介绍&#xff0c;请阅读文章《IETester更新至v0…...