【Kubernetes】虚拟 IP 与 Service 的代理模式

news2024/11/17 1:32:31

虚拟 IP 与 Service 的代理模式

  • 1.userspace 代理模式
  • 2.iptables 代理模式
  • 3.IPVS 代理模式

由于 Service 的默认发布类型是 ClusterlP,因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时,每个节点上运行的 kube-proxy 会自动为 Service 分配一个虚拟 IP 地址,即通过 转发代理 kube-proxy 来实现 路由转发功能kube-proxy 在具体实现 流量代理转发负载均衡 时,有 3 3 3 种模式:

  • userspace 代理模式
  • iptables 代理模式
  • IPVS 代理模式

Cluster IP 地址是一个虚拟的 IP 地址,它是 Kubermetes 集群拥有的独立网络空间。它具有以下 3 3 3 个特征:

  • 1️⃣ Cluster IP 地址仅作用于 Kubernetes 的 Service 对象,并由 Kubernetes 进行管理和分配。
  • 2️⃣ Cluster IP 地址无法被直接访问,也没有实体的网络元素与其对应。
  • 3️⃣ 不同 Service 中的 Pod 在集群内部可以通过 Cluster IP 地址进行相互访问。

1.userspace 代理模式

userspace 代理模式下,访问 Service 的请求首先访问 Node 节点的 iptable 表,再回到 Kubernetes 的命名空间中被 kube-proxy 转发到后端的 Pod 中。在默认情况下,userspace 代理模式下的 kube-proxy 通过轮询算法选择后端的 Pod。

在这里插入图片描述

🚀 userspace 代理模式最大的问题是:请求会存在一次状态转换过程(即从 Node 节点的命名空间到 Kubermetes 命名空间的转换),从而有性能上的损耗。

2.iptables 代理模式

iptables 代理模式是目前 Service 实现代理的默认方式。iptables 代理模式是通过 添加或移除 iptable 表中的路由规则 ,从而实现路由转发功能。在这种模式下,kube-proxy 会通过 API Server 监听集群中 Service 对象和 Endpoint 对象的创建和删除,从而创建 iptable 表中的规则,以实现将访问 Service 的请求重定向到后端的一组 Pod 中。

iptables 代理模式的工作机制如下图所示。iptables 代理模式的默认重定向策略会使用随机选择一个后端的 Pod。Kubernetes 也允许用户将 .service.spec.sessionAffinity 字段的值设置为 ClientIP,以实现基于客户端会话的 IP 地址亲和性的重定向策略。

在这里插入图片描述
由于在 iptables 中记录了路由的规则,因此 iptables 代理模式会占用较少的系统资源。当 kube-proxy 运行在 iptables 代理模式下且与后端的 Pod 连接失败时,它会自动对后端的其他 Pod 进行连接重试。

接下来以一个示例来验证 iptables 代理模式。

使用 Deployment 控制器来部署应用,创建文件 service-demo1.yaml,并在其中输入以下内容。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx 
  name: nginx
spec:
  replicas: 3 
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        imagePullPolicy: IfNotPresent

创建 Service:编辑文件 service-demo2.yaml,在其中输入以下内容。

apiVersion: v1
kind: Service
metadata:
  name: service-demo2
  namespace: default
spec:
  # 这里使用 NodePort 类型的 Service 将应用程序暴露给外部
  type: NodePort 
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  # 定义标签选择器,将服务 Service 与匹配便签的一组 Pod 关联起来
  selector:     
    app: nginx

执行以下语句创建 Deployment 和 Service。

kubectl apply -f service-demo1.yaml
kubectl apply -f service-demo2.yaml

查看 Service 的信息。

kubectl get svc

输出的信息如下:

在这里插入图片描述

查看节点的 iptable 表中的路由规则。

iptables-save | grep 10.107.186.32

输出的 iptable 表中的路由规则信息如下:

在这里插入图片描述

删除 Service。

kubectl delete -f service-demo2.yaml

重新查看节点的 iptable 表中的路由规则。

iptables-save | grep 10.107.186.32

这时在 iptable 表中没有任何路由信息了。

在这里插入图片描述

iplables 代理模式尽管使用简单,占用的资源也较少。但它却有以下的不足:

  • ⭕ 当存在大量的 Service 时,需要在 iptable 表中创建大量的路由规则,从而难以维护。
  • ⭕ 在 iplable 表中进行路由规则匹配时,可能会造成转发的延时。

这时可以将 kube-proxy 运行在 IPVS 代理模式下。

3.IPVS 代理模式

iptables 代理模式一样,IPVS 代理模式通过 API Server 监听集群中 Service 对象和 Endpoint 对象的创建和删除,从而创建 IPVS 路由转发规则,并定期与 Service 对象和 Endpoint 对象同步 IPVS 路由转发规则,以达到路由转发的目的。请求在访问 Service 时,会被重定向到后端的一个 Pod 中。

IPVS 代理模式的工作机制如下图所示。
在这里插入图片描述

  • IPVS 代理模式创建的是 IPVS 路由转发规则,而不是 iptables 路由转发规则。
  • kube-proxy 会定期与 Service 对象和 Endpoints 对象同步 IPVS 路由转发规则。

以下步骤将在 Kubernetes 集群中使用 Service 的 IPVS 代理模式。

在所有节点上安装 IPVS 模块。

apt install ipvsadm

在这里插入图片描述

让所有节点启用 IPVS 模块。

创建一个配置文件 /etc/sysconfig/modules/ipvs.modules,并写入以下内容。

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack

然后,将配置文件设置为可执行,并运行它,以加载所需的内核模块:

chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules

最后,您可以使用以下命令检查加载的内核模块:

lsmod | grep -e ip_vs -e nf_conntrack

在这里插入图片描述

修改 kube-proxy 的配置文件。

kubectl edit configmap kube-proxy -n kube-system

mode 字段改为以下形式(默认 mode: "" 为空,使用 iptables)。

mode: "ipvs"

在这里插入图片描述

重启 kube-proxy

kubectl get pod -n kube-system --show-labels | grep kube-proxy

在这里插入图片描述

kubectl delete pod -n kube-system -l k8s-app=kube-proxy

在这里插入图片描述

编辑 service-ipvs.yaml 文件创建 Service 和 Deployment。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx 
  name: nginx
spec:
  replicas: 3 
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
  name: service-ipvs
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:     
    app: nginx

执行 kubectl apply -f 命令。

kubectl apply -f service-ipvs.yaml

查看 Pod 和 Service 的信息。

kubectl get pod,svc -o wide

输出的信息如下:

在这里插入图片描述

查看 IPVS 路由转发规则。

ipvsadm -Ln

输出的信息如下:

在这里插入图片描述

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

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

相关文章

百度地图SDK Android版开发 6 显示覆盖物

百度地图SDK Android版开发 6 显示覆盖物 前言地图类中覆盖物的接口覆盖物类Marker示例Polyline示例Polygon示例Arc示例Circle示例Text示例效果图 Marker的更多属性常用属性交互碰撞动画其它属性 折线的更多属性常用属性交互其它 多边形的更多属性常用属性交互其它 Arc的更多属…

keepalive原理详解及应用

目录 一、高可用集群 1.1 什么是keepalived 1.2 什么是VRRP协议 二、Keepalived 部署 2.1 keepalived 简介 2.2 keepalived 框架 2.3 实验环境搭建 2.4 Keepalived 安装 2.5 Keepalived 配置 2.5.1 虚拟路由配置 2.5.2 独立日志 2.5.3 独立子配置文件 三、Keepali…

Unity动画模块 之 3D Rig页签

​本文仅作笔记学习和分享,不用做任何商业用途本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ 1.Rig页签 Rig 选项卡 - Unity 手册,rig是设置骨骼与替身系统的,工作流程如下 Avatar是什么…

【算法】弗洛伊德(Floyd)算法求最短路径

目录 1.弗洛伊德(Floyd)算法介绍 2.弗洛伊德算法图解分析 2.1思路: 2.2图和矩阵的准备 2.3弗洛伊德算法的步骤: 2.4疑问 3.弗洛伊德算法的代码实现 3.1创建图并显示距离表与前驱表 3.2完整代码 1.弗洛伊德(Flo…

数据结构stack (笔记)

文章目录 1. 概念理解易混淆内容 2. 时间复杂度3. 实现方式4. 应用5. 内容出处 1. 概念理解 stack(中文名:堆栈、栈):虽然它叫堆栈,但是它其实指的是栈,跟堆没啥关系。 栈的特性:先进后出、后进先出(这个过程就…

【STL】红黑树(插入、删除底层实现)

目录 红黑树简介 红黑树框架构建 构造函数 析构函数 四种旋转逻辑(左单旋,右单旋,左右双旋,右左双旋) 左右双旋与右左双旋 左单旋 右单旋 红黑树的插入 Insert 插入节点的颜色 红黑树插入的三种情况 代码…

Datawhale X 魔搭 AI夏令营第四期 魔搭-AIGC方向 task03笔记

Datawhale官方的Task3链接:Task03 往期Task1、Task2链接:Task01, Task02 【学习者手册】:链接直达 【QA文档】:链接直达 【赛事官网】:链接直达 ComfyUI ComfyUI是一个基于深度学习的图像生成软件&…

鸿萌数据恢复服务:SQL Server 中的“PFS 可用空间信息不正确”错误

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份、网络及终端数据安全等解决方案与服务。 同时,鸿萌是国际主流数据恢复软件(Stellar、UFS、R-Studio、ReclaiMe Pro 等)的授权代理商,为专…

【教学类-58-10】黑白三角拼图08(参考图+操作卡+黑白块,适合个别化)

背景需求: 前期做了一套适合集体操作的绘画“黑白三角” 【教学类-58-09】黑白三角拼图07(1页3张黑白的白点卡片,一种宫格36张,适合一个班级一次操作)-CSDN博客文章浏览阅读1k次,点赞30次,收藏…

面向自动驾驶保证车辆转向稳定性的模型预测控制

摘 要 车辆智能化是当前和未来汽车发展的主要方向和核心技术之一。随着车辆智能化水 平的提高,自动驾驶等级从无自动驾驶向完全自动驾驶提升。在自动驾驶的人机协同控制 和完全自动驾驶阶段,由于人类驾驶员在动态驾驶任务中的参与程度不同,…

23. 机盒通信

1. 概述 耳机和充电盒,采用机盒通信的方式,完成通信和充电。受限于耳机上的触电,机盒通信采用单线模式。 注:耳机只做应答,不主动发起通信 2. 硬件连接 由于bes2700外置SY5501的电源管理芯片,实际上串口通信,通过SY5501进行转发。 充电盒 -> SY5501 -> bes27…

windows安装boost后没有b2.exe(无法执行b2)

原因:如果你是在官网下载的.exe文件进行的boost安装,那么就不需要再执行bootstrap.bat,也因此不会有b2.exe 链接:官方网址下载 通过.exe安装boost并配置环境变量之后就可以直接使用了 如果你仍希望有b2.exe,那么双击执…

2024“钉耙编程”中国大学生算法设计超级联赛(9)hdu7529 树异或价值(树形dp+贪心)

题目 t(t<20)组h里&#xff0c;每次给定一棵n(n<2e5)个点的&#xff0c;点1为根的有根树&#xff0c; 定义树的价值为&#xff0c; 其中&#xff0c;&#xff0c;dep为深度&#xff0c;1号点的深度为0 而a数组待确定&#xff0c;对于所有的种方案&#xff0c;你要使树…

Leetcode每日刷题之118.杨辉三角

1.题目解析 杨辉三角作为一个经典的数学模型&#xff0c;其基本原理相信大家已经耳熟能详&#xff0c;这里主要是在学习了vector之后&#xff0c;对于本题有了新的解法&#xff0c;更加简便。关于vector的基本使用详见 面向对象程序设计(C)之 vector&#xff08;初阶&#xff0…

Selenium + Python 自动化测试17(数据驱动-文本操作)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 之前有一篇我们讨论了使用模块化测试来优化我们的测试脚本&#xff0c;今天我们试着进一步深入学习数据驱动。 本篇文章我们讨论一下数据驱动思想&#xff0c;如何将数据和脚本…

Zookeeper的在Ubuntu20.04上的集群部署

安装资源 官方安装包下载地址&#xff1a;https://zookeeper.apache.org/releases.html 懒得找版本的可以移步下载zookeeper3.84稳定版本&#xff1a; https://download.csdn.net/download/qq_43439214/89646735 安装方法 创建安装路径&&解压安装包 # 创建路径 m…

机器学习之ROC曲线

机器学习之ROC曲线 1.TPR与FPR计算2.TPR、FPR与分类阈值的关系3.生成ROC曲线4.AUC计算参考文献本博客主要参考了https://www.evidentlyai.com/classification-metrics/explain-roc-curve。 1.TPR与FPR计算 真阳率TPR(True Positive rate),又称召回率recall rate。 假阳率F…

AtCoder Beginner Contest 367(ABCDEF题)视频讲解

A - Shout Everyday Problem Statement In the Kingdom of AtCoder, residents are required to shout their love for takoyaki at A A A o’clock every day. Takahashi, who lives in the Kingdom of AtCoder, goes to bed at B B B o’clock and wakes up at C C C o’…

flink车联网项目前篇:项目设计(第64天)

系列文章目录 车联网项目设计 5.1 数仓分层 5.2 数仓主题数据建模数据仓库建模方法论 2.1 关系建模 2.1.1 ER模型 2.1.2 关系模式范式 文章目录 系列文章目录前言5. 车联网项目设计5.1 数仓分层5.2 数仓主题 1. 数据建模2. 数据仓库建模方法论2.1 关系建模2.1.1 ER模型2.1.2 关…

[Meachines] [Medium] TartarSauce Wordpress-gwolle-gb-RFI+tar权限提升+定时器备份文件权限提升

信息收集 IP AddressOpening Ports10.10.10.88TCP:80 $ nmap -p- 10.10.10.88 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open tcpwrappedWordpress & gwolle-gb & RFI $ feroxbuster --url http://10.10.10.88/ $ wpscan --url http://10.…