Kubernetes service服务的发布 - kube-proxy(负载均衡器)-IPVS

目录

Service

Service将内部的pod暴露到外面,让用户可以访问

负载均衡策略:

Service 的类型:

案例:Service服务发布案例

扩展:我们在案例再加入一个探针的使用

更改后的my_nginx.yaml文件:

创建Pod:

创建Service服务,暴露我们的nginx容器服务

创建Service服务

查看服务Service是否启动

测试访问nginx:

kube-proxy

kube-proxy的主要作用:

kube-proxy存在的3种模式:iptables、ipvs mode、userspace mode

kube-proxy制作了一个负载均衡器,使用iptables实现的(v1.2后)

kube-proxy同样可以使用ipvs mode(v1.8后)

参考文档: 基于 IPVS 的集群内部负载均衡 | Kubernetes

基于 IPVS 的集群内部负载均衡:

什么是 IPVS ?

为什么为 Kubernetes 选择 IPVS ?(为什么IPVS 比 iptables更好用)

基于 IPVS 的 Kube-proxy

ipvs的调度算法

IPVS 中有三种代理模式:NAT(masq),IPIP 和 DR。

只有 NAT 模式支持端口映射。 Kube-proxy 利用 NAT 模式进行端口映射。

kube-proxy同样可以使用userspace mode(v1.1,版本比较落后)


Service

Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。

Service API 是 Kubernetes 的组成部分,它是一种抽象,帮助你通过网络暴露 Pod 组合。 每个 Service 对象定义一个逻辑组的端点(通常这些端点是 Pod)以及如何才能访问这些 Pod 的策略。

Service 在 Kubernetes 中是一个对象 (与 Pod 或 ConfigMap 类似的对象)。你可以使用 Kubernetes API 创建、查看或修改 Service 定义。 通常你使用 kubectl 这类工具来进行这些 API 调用。

图中的六边形代表着Pod,圆圈代表着容器

Service将内部的pod暴露到外面,让用户可以访问

负载均衡策略:

RoundRobin轮询模式,即轮询将请求转发到后端的各个pod上(默认模式);

SessionAffinity:基于客户端IP地址进行会话保持的模式,第一次客户端访问后端某个pod,之后的请求都转发到这个pod上。(跟nginx上的ip-hash算法差不多)

删除service不会删除pod

Service 的类型:

service再暴露服务的时候,有几种类型:

我们主要使用 ClusterIP和NodePort这两种类型

我们也可以通过 kubectl get service来查看其中涉及到的类型

[root@master pod]# kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.0.0.1      <none>        443/TCP          26h
my-nginx     NodePort    10.6.55.120   <none>        8080:32465/TCP   7h32m
[root@master pod]# 

案例:Service服务发布案例

Service服务发布案例:(84条消息) Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务_Claylpf的博客-CSDN博客

创建完成后,查看是否启动了

[root@master pod]# kubectl get deploy
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
my-nginx   3/3     3            3           8h
[root@master pod]# 

扩展:我们在案例再加入一个探针的使用

探针:(84条消息) Kubernatas Pod卷 - Pod镜像的升级和回滚 - 探针_Claylpf的博客-CSDN博客

更改后的my_nginx.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 3
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 15
          periodSeconds: 20

创建Pod:

[root@master pod]# kubectl apply -f my_nginx.yaml 
deployment.apps/my-nginx configured
[root@master pod]# 

创建Service服务,暴露我们的nginx容器服务

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports:
    # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
  - port: 8090
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    run: my-nginx

创建Service服务

[root@master pod]# kubectl apply -f my_service.yaml 
service/my-nginx configured
[root@master pod]# 

查看服务Service是否启动

[root@master pod]# kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.0.0.1      <none>        443/TCP          27h
my-nginx     NodePort    10.6.55.120   <none>        8090:32465/TCP   7h59m
[root@master pod]# 

测试访问nginx:

[root@master pod]# kubectl get service -o wide
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE   SELECTOR
kubernetes   ClusterIP   10.0.0.1      <none>        443/TCP          27h   <none>
my-nginx     NodePort    10.6.55.120   <none>        8090:32465/TCP   8h    run=my-nginx
[root@master pod]# 

kube-proxy

负责在集群内部的各个节点上实现服务代理和负载均衡。(在service服务里做负载均衡的

kube-proxy的主要作用:

kube-proxy的主要作用包括以下几个方面:

  1. 服务发现:kube-proxy会监视Kubernetes集群中的Service对象的变化,并根据Service的定义创建相应的iptables或IPVS规则来实现服务发现。当有新的Service创建时,kube-proxy会自动更新规则,使得所有访问该Service的流量被正确地路由到后端的Pod实例。

  2. 负载均衡:通过为每个Service创建负载均衡规则kube-proxy能够将请求分发到后端的多个Pod实例上,实现负载均衡。它可以使用轮询(Round Robin)算法或最小连接数(Least Connections)等策略来平衡负载。

  3. 代理转发:kube-proxy还负责将来自集群内部和集群外部的请求转发到对应的Service或Pod。请求需要访问Service时,kube-proxy会将请求转发到Service的Cluster IP;当请求需要访问外部服务时kube-proxy会将请求转发到外部负载均衡器或代理服务器。

  4. 高可用性:kube-proxy支持运行模式为“用户空间模式”和“IPVS模式”。在用户空间模式下,kube-proxy使用自己的实现来处理流量代理和负载均衡,具有广泛的兼容性。而在IPVS模式下,kube-proxy使用Linux内核的IPVS功能来提供更高性能和更灵活的负载均衡选项。

总结来说,kube-proxy是Kubernetes集群中的一个网络代理组件,它为Service对象提供了服务发现、负载均衡和代理转发的功能。它的存在使得Kubernetes集群中的服务可以通过统一的入口进行访问,并能够自动实现负载均衡和故障转移,提高应用程序的可靠性和可伸缩性。

kube-proxy存在的3种模式:iptables、ipvs mode、userspace mode

kube-proxy制作了一个负载均衡器,使用iptables实现的(v1.2后)

查看:

[root@node1 ~]# curl localhost:10249/proxyMode
iptables[root@node1 ~]# 

kube-proxy同样可以使用ipvs mode(v1.8后)

参考文档: 基于 IPVS 的集群内部负载均衡 | Kubernetes

基于 IPVS 的集群内部负载均衡:

什么是 IPVS ?

IPVS (IP Virtual Server)是在 Netfilter 上层构建的,并作为 Linux 内核的一部分,实现传输层负载均衡。

IPVS 集成在 LVS(Linux Virtual Server,Linux 虚拟服务器)中,它在主机上运行,并在物理服务器集群前作为负载均衡器。IPVS 可以将基于 TCP 和 UDP 服务的请求定向到真实服务器并使真实服务器的服务在单个IP地址上显示为虚拟服务。 因此,IPVS 自然支持 Kubernetes 服务。

为什么为 Kubernetes 选择 IPVS ?(为什么IPVS 比 iptables更好用)

Kube-proxy 是服务路由的构建块,它依赖于经过强化攻击的 iptables 来实现支持核心的服务类型,如 ClusterIP 和 NodePort。 但是,iptables 难以扩展到成千上万的服务,因为它纯粹是为防火墙而设计的,并且基于内核规则列表。

尽管 Kubernetes 在版本v1.6中已经支持5000个节点,但使用 iptables 的 kube-proxy 实际上是将集群扩展到5000个节点的瓶颈。 一个例子是,在5000节点集群中使用 NodePort 服务,如果我们有2000个服务并且每个服务有10个 pod,这将在每个工作节点上至少产生20000个 iptable 记录,这可能使内核非常繁忙。

另一方面,使用基于 IPVS 的集群内服务负载均衡可以为这种情况提供很多帮助 IPVS 专门用于负载均衡,并使用更高效的数据结构(哈希表),允许几乎无限的规模扩张。

基于 IPVS 的 Kube-proxy

参数更改

参数: --proxy-mode 除了现有的用户空间和 iptables 模式,IPVS 模式通过--proxy-mode = ipvs 进行配置。

ipvs的调度算法

参数: --ipvs-scheduler

添加了一个新的 kube-proxy 参数来指定 IPVS 负载均衡算法,参数为 --ipvs-scheduler。 如果未配置,则默认为 round-robin(轮询) 算法(rr)。

  • rr: round-robin(轮询算法
  • lc: least connection(最小连接数
  • dh: destination hashing(基于目的地址的哈希算法
  • sh: source hashing(基于源IP的哈希算法 ip-hash
  • sed: shortest expected delay(最短时间数
  • nq: never queue(无须队列等待算法

IPVS 中有三种代理模式:NAT(masq),IPIP 和 DR。

只有 NAT 模式支持端口映射。 Kube-proxy 利用 NAT 模式进行端口映射。

IPVS默认的NAT模式        

kube-proxy同样可以使用userspace mode(v1.1,版本比较落后)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jar-protect Jar 包加壳工具

jar-protect 是 java 的 jar 加密加壳工具&#xff0c;对 class 文件进行加密防护&#xff0c;避免反编译破解。 java 本身是开放性极强的语言&#xff0c;代码也容易被反编译&#xff0c;没有语言层面的一些常规保护机制&#xff0c;jar 包很容易被反编译和破解。 受 classfi…

OpenCV 入门教程:自适应阈值处理

OpenCV 入门教程&#xff1a;自适应阈值处理 导语一、自适应阈值处理二、示例应用2.1 图像二值化2.2 图像去噪 总结 导语 自适应阈值处理是图像处理中常用的技术之一&#xff0c;它能够根据图像的局部特征自动调整阈值&#xff0c;从而提高图像的处理效果。在 OpenCV 中&#…

vue element select下拉框树形多选

components 文件下新建 SelectTree文件 index.vue SelectTree index.vue <!--* 下拉树形选择 组件--> <template><el-select ref"select" style"min-width: 260px" :value"value" v-model"valueName" collapse-tags :…

【LeetCode热题100】打卡第33天:环形链表LRU缓存

文章目录 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存⛅前言 环形链表&#x1f512;题目&#x1f511;题解 LRU缓存&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存 ⛅前言 大家好&#xff0c;我是知…

Chapter 3: Conditional | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Chapter 3: Conditional executionBoolean expressionsLogical operatorsConditional executionAlternative executionChained conditionalsNested conditionalsCatching exceptions using try and exceptShort-circuit evaluation of lo…

运维开发面试题第一期

1.tail -f和tail -F的区别是什么? tail -f 根据文件描述符进行追踪&#xff0c;当文件改名或被删除&#xff0c;追踪停止。 tail -F 根据文件名进行追踪&#xff0c;并保持重试&#xff0c;即该文件被删除或改名后&#xff0c;如果再次创建相同的文件名&#xff0c;会继续…

Tomcat相关

1. 运行项目 将java项目打包为war或者war所对应的文件夹&#xff0c;放置于tomcat的webapps目录下。其实tomcat运行时会解压war到项目中并运行class文件&#xff0c;延伸开来&#xff0c;为啥不能用jar包&#xff0c;因为jar可能可以表示项目但也能表示依赖&#xff0c;tomcat…

国产4 通道模拟复合视频解码芯片MIPI CSI 接口,XS9922B

XS9922B 是一款 4 通道模拟复合视频解码芯片&#xff0c;支持 HDCCTV 高清协议和 CVBS 标 清协议&#xff0c;视频制式支持 720P/1080P 高清制式和 960H/D1 标清制式。芯片将接收到的高清 模拟复合视频信号经过模数转化&#xff0c;视频解码以及 2D 图像处理之后…

git在工作中如何搭建和运用(巨详细!!)

最近有点闲&#xff0c;出一版git在实际公司上的一些运用 1&#xff0c;下载git&#xff0c; 下载git就不多说了&#xff0c;官方上下载安装就好了。 2&#xff0c;初始化 下载安装完成后&#xff0c;找个项目的空文件夹进去&#xff0c;右键点击git bash here &#xff0c;…

Android 视频直播提拉流 嵌入式硬件 流媒体开发详细内容

1 Linux 系统编程网络编程基础 2 Linux 网络编程流媒体服务器&#xff0c;客户端开发实践 3 Android流媒体客户端 FFmpeg OpenGL ES 开发实践 4 Android H.264 AAC 封装mp4开发实战 5 流媒体开发实战之Rtmp推流 6 流媒体开发实战之RTSP推流 7 流媒体开发实战之UDP 8 P2P点对点项…

培训报名小程序报名列表页开发

目录 1 创建页面2 组件搭建3 设置URL参数4 设置筛选条件5 首页跳转6 最终的效果总结 这节我们来开发报名列表功能&#xff0c;先看原型 1 创建页面 功能要在页面上呈现&#xff0c;需要先创建页面。打开我们的培训报名小程序&#xff0c;在页面区&#xff0c;点击创建页面的…

多元回归预测 | Matlab主成分分析PCA降维,PLS偏小二乘回归预测。PCA-PLS回归预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab主成分分析PCA降维,PLS偏小二乘回归预测。PCA-PLS回归预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warn…

CUDA+CUDNN+torch+torchvision安装

弄了好久&#xff0c;终于弄好了&#xff01;&#xff01;&#xff01; 原因&#xff1a;其实之前我是已经配置好pytorch的相关环境的了。但是这段时间&#xff0c;在跑GNN相关论文中的代码时&#xff0c;发现代码中的某个函数要求torch必须得是1.8 而我之前安装的是torch1.1…

《MySQL技术内幕》读书总结(一):MySQL体系结构和存储引擎

文章目录 前言&#xff1a;1、定义数据库和实例2、MySQL体系结构3、MySQL存储引擎InnoDBMyISAM 4、连接MySQL 前言&#xff1a; 该技术文章是我阅读《MySQL技术内幕 InnoDB存储引擎》第2版的总结梳理 我写这里文章的目的&#xff1a;书中的内容过于系统和繁琐&#xff0c;并不是…

C++学习 数组

目录 数组 一维数组 数组名 案例&#xff1a;冒泡排序 二维数组 数组名 数组 数组就是一个集合&#xff0c;里面存放了相同类型的数据元素。 下面的数字对应为数组的下标(索引)&#xff0c;可以看到索引范围为0~数组长度-1 特点&#xff1a; 数组中数据元素的数据类型相同。…

Unity3D 场景添加obj模型

有一个立方体的obj模型&#xff1b;将其拖到Assets文件夹节点上&#xff0c;在此节点放手&#xff0c;资源被加入项目&#xff1b; 在右侧显示出对象概览&#xff1b; 点击箭头&#xff0c;显示此模型下的子对象&#xff1b; 然后按住Assets面板中的cube1对象&#xff0c;拖动…

36.RocketMQ之Broker如何实现磁盘文件高性能读写

highlight: arduino-light Broker读写磁盘文件的核心技术:mmap Broker中大量的使用mmap技术去实现CommitLog这种大磁盘文件的高性能读写优化的。 通过之前的学习&#xff0c;我们知道了一点&#xff0c;就是Broker对磁盘文件的写入主要是借助直接写入os cache来实现性能优化的&…

【Java项目】Vue+ElementUI+Ceph实现多类型文件上传功能并实现文件预览功能

文章目录 效果演示前端后端Java 效果演示 先说一下我们的需求&#xff0c;我们的需求就是文件上传&#xff0c;之前的接口是只支持上传图片的&#xff0c;之后需求是需要支持上传pdf&#xff0c;所以我就得换接口&#xff0c;把原先图片上传的接口换为后端ceph&#xff0c;但是…

诚迈科技董事长、统信软件董事长王继平出席全球数字经济大会

7月5日&#xff0c;2023全球数字经济大会“数字未来新一代软件产业高质量发展论坛”在北京大兴隆重举行。论坛以“数字新高地&#xff0c;数创兴未来”为主题&#xff0c;共同探讨产业升级新路径&#xff0c;凝聚数字经济合作新共识&#xff0c;构建数字产业集聚发展新高地。诚…

基于Qt5 实现的简易慕课爬取程序

基于Qt5 实现的简易慕课爬取程序 一、项目概述二、源代码 一、项目概述 名称&#xff1a;MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com&#xff0c;也就是这个网站里面的卡片信息。然后做一定的分析和展示…