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-nginxreplicas: 3template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80livenessProbe:tcpSocket:port: 80initialDelaySeconds: 15periodSeconds: 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-nginxlabels:run: my-nginx
spec:type: NodePortports:# 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。- port: 8090targetPort: 80protocol: TCPname: httpselector: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.hqwc.cn/news/18793.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Langchain 新手完全指南

Langchain 可能是目前在 AI 领域中最热门的事物之一&#xff0c;仅次于向量数据库。 它是一个框架&#xff0c;用于在大型语言模型上开发应用程序&#xff0c;例如 GPT、LLama、Hugging Face 模型等。 它最初是一个 Python 包&#xff0c;但现在也有一个 TypeScript 版本&…

Linux常用命令——env命令

在线Linux命令查询工具 env 显示系统中已存在的环境变量 补充说明 env命令用于显示系统中已存在的环境变量&#xff0c;以及在定义的环境中执行指令。该命令只使用"-“作为参数选项时&#xff0c;隐藏了选项”-i"的功能。若没有设置任何选项和参数时&#xff0c;…

webpack笔记一

文章目录 什么是webpack安装webpack一、创建配置项二、安装webpack局部安装(推荐)全局安装 三、安装webpack-cli(可选) 核心概念入口(entry)出口(output)loader插件(plugin)模式(mode) 项目实例webpack基本使用 html打包插件&#xff1a;html-webpack-plugin文件拷贝插件&#…

[sqoop]导入数据

一、覆盖导入 例如维度表&#xff0c;每次导入的数据需要覆盖上次导入的数据。 hive-overwrite参数&#xff1a;实现覆盖导入 hive-import参数&#xff1a;表示向hive表导入 hive-table参数&#xff1a;指定目标hive库表 sqoop import \ --connect jdbc:mysql://hadoop1:3…

基于单片机的老人防摔倒的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;通过LCD1602液晶显示屏显示当前的经纬度及时间的信息&#xff1b;温度传感器采集当前体温&#xff1b;通过GPS接收模块获得当前位置的位置的经度、纬度、时间和高度等信息&#xff1b;通过ADXL345检测老人摔倒的一瞬间重力加速度通…

【opencv之cv::Mat数据深拷贝和浅拷贝探讨】

cv::Mat数据深拷贝和浅拷贝 cv::Mat 拷贝方法实验测试1.matA matSrc2.matB(matSrc)3.matC matSrc.clone()4.matSrc.copyTo(matD) 很多时候写程序除了一个强大的架构&#xff0c;细节也很重要&#xff0c;俗话说的话细节决定成败嘛&#xff0c;在使用cv::Mat做图片处理的时候发…

VSCODE 设置同步network Error 问题

前言 这个问题等解决方法如下&#xff1a; 获取到github以及vscode-auth.github.com的ip&#xff0c;添加到host&#xff0c;随后使用命令行刷新host&#xff0c;重新认证即可 第一步&#xff0c;查看log文件&#xff0c; 打开 vscode&#xff0c;使用快捷指令ctrl(command)…

虹科分享 | 如何基于IO-Link wireless方案实现工厂数据采集和状态监测

数据和数字化是工业4.0变革的关键驱动因素。从整个工厂的传感器获取数据&#xff0c;除了优化制造计划和流程外&#xff0c;还能实现强大的分析和决策。目前&#xff0c;基于数据的应用正在催生更多智能解决方案&#xff0c;以提高制造业的灵活性和敏捷性&#xff0c;进而提高效…

B端原型设计太复杂?看这一篇轻松入门

近年来&#xff0c;B端市场前景展现广阔&#xff0c;B端产品经理也成为了炙手可热的高薪岗位。作为负责管理和推动B端产品开发和生命周期的负责人&#xff0c;B端产品经理在企业市场中发挥着重要作用&#xff0c;因此他们往往也是具备全局能力框架的专业人员。 然而&#xff0…

服务端研发提测模板

test环境分支自测通过 提测邮件标注test环境分支 【xxxxxx需求】服务端研发提测了&#xff0c;快去测试吧!

Matplotlib---3D图

1. 3D图 # 3D引擎 from mpl_toolkits.mplot3d.axes3d import Axes3D fig plt.figure(figsize(8, 5)) x np.linspace(0, 100, 400) y np.sin(x) z np.cos(x)# 三维折线图 axes Axes3D(fig, auto_add_to_figureFalse) fig.add_axes(axes) axes.plot(x,y,z) plt.savefi…

在vite创建的vue3项目中使用Cesium加载czml路径信息和无人机模型

在vite创建的vue3项目中使用Cesium加载czml路径信息和无人机模型 用到的区域文件、地图标记文件、路径信息文件、模型文件 提取码&#xff1a;99jq 使用vite创建vue3项目 npm create vitelatestcd到创建的项目文件夹中 npm install安装Cesium npm i cesium vite-plugin-cesium…