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

news2024/9/19 10:18:32

目录

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,版本比较落后)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGLM2-6B发布,C-Eval超GPT4,支持32k上下文!

自清华大学数据挖掘实验室&#xff08;THUDM&#xff09;3月开源ChatGLM-6B已经过去了3个多月&#xff0c;最近他们又带来了性能全面提升的“船新”版本-ChatGLM2-6B。别看名字变化小&#xff0c;其实更新的模型性能是又有量又实用。不了解ChatGLM的小伙伴可以看我这篇文章&…

Java基础之五 反射

通过Java反射机制&#xff0c;可以在程序中访问已经装载到JVM中的Java对象的描述&#xff0c;实现访问、检测和修改描述Java对象本身信息的功能。 通过反射可以访问的主要描述信息 访问成员变量 常用方法&#xff1a;getFields()、getField(String name)、getDeclaredFields()…

第 353 场LeetCode周赛

A 找出最大的可达成数字 签到题 class Solution { public:int theMaximumAchievableX(int num, int t) {return numt*2;} };B 达到末尾下标所需的最大跳跃次数 动态规划: 定义 p i p_i pi​为跳至 i i i处所需的最大跳跃次数, 有状态转移方程 p i m a x { p j 1 ∣ 0 ≤ j &…

文档管理:PaperPort Professional 14.7 Crack

文档管理变得简单 PaperPort Professional 快速、轻松地访问重要文档对于保持组织平稳运行至关重要。与其浪费时间在文件夹中搜索所需的文件&#xff0c;不如在PC上扫描&#xff0c;转换&#xff0c;组织&#xff0c;组装和共享文档和图像&#xff0c;或者更好的是&#xff0c;…

vue对于数组的数据监听变化和object是不一样的吗?

我们知道vue对于数组的数据监听变化和object是不一样的&#xff0c;因为我们常说的Object.defineProperty是对象上面的方法&#xff0c;所以对于array数组需要实现另外一套变化侦测机制。 今天我们就来研究下。 在哪里收集依赖 array数据设计了新的变化侦测机制&#xff0c;…

阿里云服务器架构X86计算、ARM、GPU/FPGA、裸金属和超级计算集群

阿里云服务器架构有什么区别&#xff1f;X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别&#xff1f;阿里云服务器网分享云服务器ECS架构详细说明&#xff1a; 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…

第八章:L2JMobius学习 – 游戏服务GameServer讲解

本章节我们来讲解GameServer服务&#xff0c;首先来查看它的文件结构 ai&#xff1a;游戏角色自动化处理&#xff0c;比如说&#xff0c;自动攻击。 cache&#xff1a;数据缓存&#xff0c;里面就一个HtmCache.java类&#xff0c;缓存HTML文件内容。 communitybbs&#xff1a;b…

【C语言】1-Visual C++ 2010 的简单使用和第一个 C 语言程序

1. Visual C++ 2010 的简单使用 1.1 面板介绍 1.2 新建C语言项目 打开 Visual C++ 2010,点击 New Project 根据下面的图示进行操作,其中需要注意 ③:这里输入的为项目名(建议和我的命名保持一致) ④:这里是项目存放的位置,可以自己选择,最好不要有中文路径(只要是使…

苹果用户要留意?女子FaceTime通话面临巨额骗局,损失高达160万

FaceTime通话是苹果提供的一项服务&#xff0c;可以让使用iOS、iPadOS设备或Mac电脑的用户进行视频或音频通话。只要知道对方的Apple ID&#xff0c;世界各地的苹果设备都可以通过该ID进行呼叫。 据报道&#xff0c;一名居住在上海金山的女性最近遭受了一种新型诈骗&#xff0c…

js逆向补环境-调试工具vscode与nodejs使用之无环境联调

目录 一、啊哈一、Nodejs安装1、nodejs最新版本的安装&#xff08;windows&#xff09;2、旧版nodejs更新成最新版本&#xff08;windows&#xff09;3、nodejs安装&#xff08;linux&#xff09; 二、vscode安装使用(windows)1、下载安装vscode2、vscode运行插件Code Runner安…

多元分类预测 | Matlab基于K近邻算法(KNN)的数据分类预测,多特征输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于K近邻算法(KNN)的数据分类预测,多特征输入模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代优化图,混淆矩阵图。 部分源码

MAYA粒子爆炸

创建粒子替代 中心归零 只有一种石头 particleShape1.shitourand(0,5); 设置石头大小 等比例变小 particleShape1.daxiao<<0.2,0.2,0.2>>; 使用变量代替 float $daxiaorand(0.2,0.5); particleShape1.daxiao<<$daxiao,$daxiao,$daxiao>>; 非等比例缩…

【国家标准】GB 7713-87 科学技术报告、学位论文和学术论文编写格式

目 录 1 引言 2 定义 2.1 科学技术报告 2.2 学位论文 2.3 学术论文 3 编写要求 4 编写格式 5 前置部分 5.1 封面 5.2 封二 5.3 题名页 5.4 变异本 5.5 题名 5.6 序或前言 5.7 摘要 5.8 关键词 5.9 目次页 6 主体部分 6.1 格式 6.2 序号 6.3 引言(或绪论)…

基于stm32单片机的智能家居环境监控系统

​一.硬件方案 智能家居环境监控系统的整体电路主要由stm32单片机最小系统&#xff0c;光MQ-2烟雾传感器电路&#xff0c;红外人体检测电路&#xff0c;DS18B20温度传感器&#xff0c;LCD1602显示电路&#xff0c;水泵驱动电路&#xff0c;风扇驱动电路&#xff0c;LED指示灯&…

传输方式的分类【图解TCP/IP(笔记五)】

文章目录 传输方式的分类面向有连接型和无连接型面向有连接型面向无连接型 电路交换与分组交换根据接收端数量分类单播&#xff08;Unicast&#xff09;广播&#xff08;Broadcast&#xff09;多播&#xff08;Multicast&#xff09;任播&#xff08;Anycast&#xff09; 传输方…

ModaHub魔搭社区:Zilliz Cloud快速开始教程(一)

目录 前提条件 创建 Collection 查看 Collection 插入数据 本教程涵盖以下 Zilliz Cloud 集群操作指南: 创建 Collection查看 Collection插入数据向量搜索、向量查询、通过 ID 获取 Entity删除 Entity删除 Collection 前提条件 在本文档中,我们将使用 Milvus 的 SDK。…

FL Studio21中文版DAW宿主软件

FL Studio21让你的计算机就像是全功能的录音室&#xff0c;漂亮的大混音盘&#xff0c;先进的创作工具&#xff0c;让你的音乐突破想象力的限制。你有着满腔的音乐才华&#xff0c;想要自己在家里发片吗&#xff1f;还是听 MOBY 的电子舞曲不过瘾&#xff0c;要再帮他做做 REMI…

Mybatis-plus——增删改查相关+id生成策略+多数据操作(删除)+逻辑删除+乐观锁+代码生成器

项目文件总览 Dao层中 domain层中 测试类中含有三个测试方法&#xff0c;分别对应&#xff0c;插入删除和修改 id生成策略 针对不同的场景使用不同的id,用到提供的一个注解TableId 在实体类中使用Tablefiled注解时可以看见有如下的多种策略 使用第一个AUTO策略 运行插入方法得…

Nuxt3 loyouts公共页面布局

1.目录结构 2.在app.vue入口处添加代码 注意&#xff1a;Header首字母我是大写的&#xff0c;然而页面并没有显示头部&#xff0c;只显示尾部 改为首字母小写才会有效

SWAT模型18项典型案例实践、EFDC模型建模方法

SWAT模型“十八般武艺”高阶研修 以18项典型的案例为主线&#xff0c;不仅能够从技术层系统掌握&#xff0c;还能更好的拓展与相关学科的融合创新应用&#xff0c;解决实际的问题&#xff0c;内容讲解具有技术深度与系统、普遍需求、热点创新、实际问题解决等特点&#xff0c;…