修改k8s kube-proxy转发为ipvs

  1. 查看kube-proxy目前使用的转发模式
    a. 通过查看kube-proxy Pod日志来确定

    [root@k8s-master ~]# kubectl -n kube-system get pod -o wide | grep kube-proxy
    kube-proxy-bt2lf                     1/1     Running   0          3m26s   192.168.44.148   k8s-master   <none>           <none>
    [root@k8s-master ~]# kubectl -n kube-system logs kube-proxy-bt2lf
    I0426 04:28:51.345337       1 server_others.go:69] "Using iptables proxy"		# 可以看出kube-proxy转发模式为iptables 
    I0426 04:28:51.354294       1 node.go:141] Successfully retrieved node IP: 192.168.44.148
    I0426 04:28:51.355978       1 conntrack.go:52] "Setting nf_conntrack_max" nfConntrackMax=131072
    I0426 04:28:51.385423       1 server.go:632] "kube-proxy running in dual-stack mode" primary ipFamily="IPv4"
    I0426 04:28:51.387180       1 server_others.go:152] "Using iptables Proxier"
    I0426 04:28:51.387205       1 server_others.go:421] "Detect-local-mode set to ClusterCIDR, but no cluster CIDR for family" ipFamily="IPv6"
    I0426 04:28:51.387212       1 server_others.go:438] "Defaulting to no-op detect-local"
    I0426 04:28:51.387279       1 proxier.go:251] "Setting route_localnet=1 to allow node-ports on localhost; to change this either disable iptables.localhostNodePorts (--iptables-localhost-nodeports) or set nodePortAddresses (--nodeport-addresses) to filter loopback addresses"
    I0426 04:28:51.387658       1 server.go:846] "Version info" version="v1.28.0"
    I0426 04:28:51.387670       1 server.go:848] "Golang settings" GOGC="" GOMAXPROCS="" GOTRACEBACK=""
    I0426 04:28:51.389066       1 config.go:188] "Starting service config controller"
    I0426 04:28:51.389113       1 shared_informer.go:311] Waiting for caches to sync for service config
    I0426 04:28:51.389136       1 config.go:97] "Starting endpoint slice config controller"
    I0426 04:28:51.389140       1 shared_informer.go:311] Waiting for caches to sync for endpoint slice config
    I0426 04:28:51.389746       1 config.go:315] "Starting node config controller"
    I0426 04:28:51.389754       1 shared_informer.go:311] Waiting for caches to sync for node config
    I0426 04:28:51.491116       1 shared_informer.go:318] Caches are synced for node config
    I0426 04:28:51.491122       1 shared_informer.go:318] Caches are synced for service config
    I0426 04:28:51.491134       1 shared_informer.go:318] Caches are synced for endpoint slice config
    

    b. 通过查看kube-proxy 的ConfigMap查看

    [root@k8s-master ~]# kubectl -n kube-system get configmap | grep kube-proxy
    kube-proxy                                             2      151m
    [root@k8s-master ~]# kubectl -n kube-system get configmap -o yaml | grep  mode -C 1
          metricsBindAddress: ""
          mode: ""			# 为空默认就是iptables, 如果是ipvs,此处就会配置成ipvs
          nodePortAddresses: null
    --
            extraArgs:
              authorization-mode: Node,RBAC
            timeoutForControlPlane: 4m0s
    --
          authorization:
            mode: Webhook
            webhook:
    
  2. 修改kube-proxy转发模式为 ipvs
    2.1、 首先所有节点需要安装ipvs软件(master和node节点)

    # 所有节点安装
     yum -y install ipvsadm ipset
    
    # 加载内核模块,所有节点执行
    cat > /etc/sysconfig/modules/ipvs.modules << EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
     
    chmod 755 /etc/sysconfig/modules/ipvs.modules
    source /etc/sysconfig/modules/ipvs.modules
    
    # 查看内核模块是否被加载
    [root@k8s-master ~]# lsmod | grep ip_vs
    ip_vs_sh               12688  0 
    ip_vs_wrr              12697  0 
    ip_vs_rr               12600  8 
    ip_vs                 145458  14 ip_vs_rr,ip_vs_sh,ip_vs_wrr
    nf_conntrack          139264  10 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_nat_masquerade_ipv6,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
    libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack
    

    2.2、修改kube-proxy 的configmap配置, mode: "" 改成 mode: "ipvs"

    [root@k8s-master ~]# kubectl -n kube-system edit configmap kube-proxy
    configmap/kube-proxy edited
    [root@k8s-master ~]# kubectl -n kube-system get configmap -o yaml | grep  mode -C 1
          metricsBindAddress: ""
          mode: "ipvs"		# 现在转发模式变成了ipvs
          nodePortAddresses: null
    --
            extraArgs:
              authorization-mode: Node,RBAC
            timeoutForControlPlane: 4m0s
    --
          authorization:
            mode: Webhook
            webhook:
    

    2.3、现在只需要重新发布DaemonSet kube-proxy 即可

    kube-proxy Pod是由DaemonSet 控制器管理。所以会在每个节点上都部署一个 kube-proxy Pod,重新发布 DaemonSet 会将所有节点的 kube-proxy Pod更新。

    # 查看 DaemonSet 
    [root@k8s-master ~]# kubectl -n kube-system get DaemonSet 
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    kube-proxy   1         1         1       1            1           kubernetes.io/os=linux   166m
    # 重新发布 daemonSet kube-proxy
    [root@k8s-master ~]# kubectl -n kube-system rollout restart daemonSet kube-proxy
    daemonset.apps/kube-proxy restarted
    
  3. 查看现在kube-proxy Pod使用的转发模式

    [root@k8s-master ~]# kubectl -n kube-system logs kube-proxy-qhmw2
    I0426 05:33:18.817382       1 node.go:141] Successfully retrieved node IP: 192.168.44.148
    I0426 05:33:18.820228       1 conntrack.go:52] "Setting nf_conntrack_max" nfConntrackMax=131072
    I0426 05:33:18.869417       1 server.go:632] "kube-proxy running in dual-stack mode" primary ipFamily="IPv4"
    I0426 05:33:18.880584       1 server_others.go:218] "Using ipvs Proxier"		# 可以看出现在使用的转发模式是 ipvs
    I0426 05:33:18.880629       1 server_others.go:421] "Detect-local-mode set to ClusterCIDR, but no cluster CIDR for family" ipFamily="IPv6"
    I0426 05:33:18.880650       1 server_others.go:438] "Defaulting to no-op detect-local"
    E0426 05:33:18.880922       1 proxier.go:354] "Can't set sysctl, kernel version doesn't satisfy minimum version requirements" sysctl="net/ipv4/vs/conn_reuse_mode" minimumKernelVersion="4.1"
    I0426 05:33:18.881005       1 proxier.go:408] "IPVS scheduler not specified, use rr by default"
    E0426 05:33:18.881105       1 proxier.go:354] "Can't set sysctl, kernel version doesn't satisfy minimum version requirements" sysctl="net/ipv4/vs/conn_reuse_mode" minimumKernelVersion="4.1"
    I0426 05:33:18.881160       1 proxier.go:408] "IPVS scheduler not specified, use rr by default"
    I0426 05:33:18.881179       1 ipset.go:116] "Ipset name truncated" ipSetName="KUBE-6-LOAD-BALANCER-SOURCE-CIDR" truncatedName="KUBE-6-LOAD-BALANCER-SOURCE-CID"
    I0426 05:33:18.881190       1 ipset.go:116] "Ipset name truncated" ipSetName="KUBE-6-NODE-PORT-LOCAL-SCTP-HASH" truncatedName="KUBE-6-NODE-PORT-LOCAL-SCTP-HAS"
    I0426 05:33:18.881651       1 server.go:846] "Version info" version="v1.28.0"
    I0426 05:33:18.881661       1 server.go:848] "Golang settings" GOGC="" GOMAXPROCS="" GOTRACEBACK=""
    I0426 05:33:18.882958       1 config.go:188] "Starting service config controller"
    I0426 05:33:18.883031       1 shared_informer.go:311] Waiting for caches to sync for service config
    I0426 05:33:18.883080       1 config.go:97] "Starting endpoint slice config controller"
    I0426 05:33:18.883085       1 shared_informer.go:311] Waiting for caches to sync for endpoint slice config
    I0426 05:33:18.884445       1 config.go:315] "Starting node config controller"
    I0426 05:33:18.884471       1 shared_informer.go:311] Waiting for caches to sync for node config
    I0426 05:33:18.984240       1 shared_informer.go:318] Caches are synced for endpoint slice config
    I0426 05:33:18.984331       1 shared_informer.go:318] Caches are synced for service config
    I0426 05:33:18.984497       1 shared_informer.go:318] Caches are synced for node confi
    
    # 也可以通过 ipvsadm -Ln 查看 ipvs hash表来查看是否能成功转发流量,观察一下 ipvs hash表
    # 查看node IP : 192.168.44.148
    [root@k8s-master ~]# kubectl get node -o wide
    NAME         STATUS   ROLES           AGE    VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIM
    k8s-master   Ready    control-plane   3h5m   v1.28.2   192.168.44.148   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.7.15
    # 查看Pod IP : 10.244.0.4 
    [root@k8s-master ~]# kubectl get pod -o wide
    NAME    READY   STATUS    RESTARTS   AGE    IP           NODE         NOMINATED NODE   READINESS GATES
    nginx   1/1     Running   0          153m   10.244.0.4   k8s-master   <none>           <none>
    # 查看service IP:10.104.68.184  可以看出 service 模式为NodePort,外部端口为 30305
    [root@k8s-master ~]# kubectl get svc
    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        3h3m
    nginx        NodePort    10.104.68.184   <none>        80:30305/TCP   153m
    # 查看ipvs hash表
    [root@k8s-master ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.44.148:30305 rr
      -> 10.244.0.4:80                Masq    1      0          0         
    TCP  10.96.0.1:443 rr
      -> 192.168.44.148:6443          Masq    1      0          0         
    TCP  10.96.0.10:53 rr
      -> 10.244.0.2:53                Masq    1      0          0         
      -> 10.244.0.3:53                Masq    1      0          0         
    TCP  10.96.0.10:9153 rr
      -> 10.244.0.2:9153              Masq    1      0          0         
      -> 10.244.0.3:9153              Masq    1      0          0         
    TCP  10.104.68.184:80 rr
      -> 10.244.0.4:80                Masq    1      0          0         
    TCP  10.244.0.0:30305 rr
      -> 10.244.0.4:80                Masq    1      0          0         
    TCP  10.244.0.1:30305 rr
      -> 10.244.0.4:80                Masq    1      0          0         
    UDP  10.96.0.10:53 rr
      -> 10.244.0.2:53                Masq    1      0          0         
      -> 10.244.0.3:53                Masq    1      0          
    

参考: https://blog.csdn.net/ss810540895/article/details/127264891
https://blog.csdn.net/LONG_Yi_1994/article/details/131459025
https://blog.csdn.net/qq_36807862/article/details/106068871

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

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

相关文章

vue elementui el-table 表格里边展示四分位图

vue elementui el-table 表格里边展示四分位图 直接上代码&#xff08;效果图在文章末尾&#xff09;&#xff1a; 父组件&#xff1a; <template> <el-table size"small":header-cell-style"headerCellStyle()"style"width: 100%;"…

Linux平台Unity下RTMP|RTSP低延迟播放器技术实现

技术背景 国产操作系统对于确保信息安全、促进技术创新、满足特定需求以及推动经济发展等方面都具有重要意义&#xff0c;多以Linux为基础二次开发。2014年4月8日起&#xff0c;美国微软公司停止了对Windows XP SP3操作系统提供支持&#xff0c;这引起了社会和广大用户的广泛关…

Spark 基础

/* Why Spark一、MapReduce编程模型的局限性1、繁杂&#xff1a;只有Map和Reduce两个操作&#xff0c;复杂的逻辑需要大量的样板代码2、处理效率低&#xff1a;2.1、Map中间结果写磁盘&#xff0c;Reduce写HDFS&#xff0c;多个Map通过HDFS交换数据2.2、任务调度与启动开销大3、…

C++中的queue(容器适配器)

目录 一、成员函数 一、构造函数 二、入栈 push 三、出栈 pop 四、判空 empty 五、队列大小 size 六、取队头元素 front 七、取队尾元素 back 八、入栈 emplace 九、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 swap C中的queue不再是容…

HWOD:单词倒排

一、知识点 此题&#xff0c;笔者自己写的代码中flag的设置极为精妙 二、题目 1、描述 对字符串中的所有单词进行倒排。 说明&#xff1a; (1)、构成单词的字符只有26个大写或小写英文字母&#xff1b; (2)、非构成单词的字符均视为单词间隔符&#xff1b; (3)、要求倒…

Visual Studio 对 C++ 头文件和模块的支持

在 C 编程领域&#xff0c;头文件和模块的管理有时候确实比较令人头疼。但是&#xff0c;有许多工具和功能可以简化此过程&#xff0c;提高效率并减少出错的可能性。下面是我们为 C 头文件和模块提供的几种工具的介绍。 构建明细 通过菜单栏 Build > Run Build Insights&a…

uni-app中配置自定义条件编译

前提&#xff1a;官网提供的自定义编译不满足条件 package.json | uni-app官网 下文&#xff1a;不详细写&#xff0c;主要写关键思路 package.json文件 主要看scripts的执行命令&#xff0c;其他依赖就是用vue-cli方式创建uni-app项目生成的 {"name": "un…

命令行启动pytest自动化程序时,程序卡住不动了,不继续往下执行了

一、问题描述 在执行pytestallure自动化测试工具的时候&#xff0c;命令行启动程序时&#xff0c;程序卡住不继续往下执行&#xff0c;如下图所示。 代码主函数如下&#xff1a; 二、解决方法 测试客户项目时遇到2次此类问题&#xff0c;2次问题原因不一样。 原因一&#xf…

3d合并的模型为什么没有模型---模大狮模型网

在3D建模中&#xff0c;合并模型是常见的操作&#xff0c;它可以将多个模型合并成一个整体。然而&#xff0c;有时候在合并后却发现部分模型消失了&#xff0c;这可能会让人感到困惑和失望。本文将探讨为什么合并的3D模型中会出现没有模型的情况&#xff0c;并提供一些解决方法…

API和微服务设计的优化方式有哪些?

在构建响应迅速、用户体验良好的应用程序中&#xff0c;API性能的优化至关重要。在构建高性能的API时&#xff0c;采取综合策略是至关重要的。通过采用一系列策略&#xff0c;我们可以确保API在处理请求时高效运行&#xff0c;提供流畅的服务。 一、API和微服务设计的优化可以…

Edge下载文件提示无法安全下载的解决方法

问题描述&#xff1a;最近Edge在下载文件时总是提示&#xff1a;无法安全下载&#xff0c;本文记录一下解决方法。 提示截图&#xff1a; 解决方式一&#xff1a; 1. 点击下图红框的三个点&#xff0c;选择保留 2. 选择仍然保留 解决方式二&#xff1a; 第一种方式每下载一次…

MySQL双层游标嵌套循环方法

文章目录 1、需求描述2、思路3、创建存储过程 1、需求描述 1、在项目中&#xff0c;需要将A表中主键id&#xff0c;逐个取出&#xff0c;作为条件&#xff0c;在B表中去逐一查询&#xff0c;将B表查询到的结果集&#xff08;A表B表关系&#xff1a;一对多&#xff09;&#xf…

Qt下使用OpenCV截取图像并在QtableWidget表格上显示

文章目录 前言一、在QLabel上显示图片并绘制矩形框二、保存矩形框数据为CSV文件三、保存截取图像四、将截取图像填充到表格五、图形视图框架显示图像六、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV截取绘制的矩形框图像&#xff0c;并将矩形框数据保存为CSV文件&a…

【经验分享】MySQL集群部署一:主从模式

目录 前言一、基本介绍1.1、概念1.2、执行流程 二、部署2.1、通用配置2.2、主节点配置2.3、从节点配置2.4、主从测试2.5、谈一谈主节点历史数据同步问题 前言 MySQL的部署模式常见的包括以下几种&#xff1a; 独立服务器部署主从复制部署高可用性集群&#xff08;HA&#xff…

Angular创建项目

Angular创建项目 文章目录 Angular创建项目1. 创建项目1.1 直接安装1.2 跳过npm i安装 2. 运行程序 1. 创建项目 ng new 项目名称 1.1 直接安装 ng new angulardemo --同时会安装依赖包&#xff0c;执行的命令就是npm i 1.2 跳过npm i安装 ng new angulardemo --skip-inst…

【数据结构7-2】-二叉排序树(建立、遍历、查找、增加、删除)

目录 1 基础说明2 基本思路-二叉树的创建和插入2.1 节点存储结构的建立2.2 二叉树创建函数的设计2.3 二叉树插入函数的设计2.4 简单的进行二叉树的检测看看插入的对不对&#xff1a;2.5 整体代码&#xff1a; 3 二叉树的遍历3.1 中序遍历3.2 程序代码&#xff1a;3.3 程序结果&…

RFID技术引领3C手机镜头模组产线智能化转型

RFID技术引领3C手机镜头模组产线智能化转型 应用背景 随着智能手机市场的快速发展与技术创新&#xff0c;手机镜头模组作为影像功能的核心组件&#xff0c;其生产精度、效率及供应链管理的重要性日益凸显。面对复杂多变的市场需求、严格的品质要求以及激烈的市场竞争&#xf…

MySQL数据库总结

作者&#xff1a;爱塔居-CSDN博客 专栏&#xff1a;数据库 目录 前言 一、数据库操作 1.1 创建数据库 1.2 显示当前数据库 1.3 使用数据库 1.4 删除数据库 二、表的操作 2.1 查看表结构 2.2 创建表 2.3 删除表 三、表的增删改查操作&#xff08;CRUD) 3.1 新增 3.…

改ip地址软件手机怎么弄?分享操作指南与注意事项

随着移动互联网的普及&#xff0c;手机已成为我们日常生活中不可或缺的工具。在某些情况下&#xff0c;我们可能需要更改手机的IP地址&#xff0c;以满足特定的网络需求或实现某些功能。然而&#xff0c;对于许多用户来说&#xff0c;如何在手机上更改IP地址可能是一个相对陌生…

clickhouse与oracle传输数据

参考 https://github.com/ClickHouse/clickhouse-jdbc-bridge https://github.com/ClickHouse/clickhouse-jdbc-bridge/blob/master/docker/README.md clickhouse官方提供了一种方式&#xff0c;可以实现clickhouse与oracle之间传输数据&#xff0c;不仅仅是oracle&#xff0…
最新文章