修改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 1metricsBindAddress: ""mode: ""			# 为空默认就是iptables, 如果是ipvs,此处就会配置成ipvsnodePortAddresses: null
    --extraArgs:authorization-mode: Node,RBACtimeoutForControlPlane: 4m0s
    --authorization:mode: Webhookwebhook:
    
  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
    EOFchmod 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 1metricsBindAddress: ""mode: "ipvs"		# 现在转发模式变成了ipvsnodePortAddresses: null
    --extraArgs:authorization-mode: Node,RBACtimeoutForControlPlane: 4m0s
    --authorization:mode: Webhookwebhook:
    

    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.mzph.cn/bicheng/3901.shtml

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

相关文章

利用blob对象于浏览器保存图片到本地

本文提供一种保存图片到本地的实现方法&#xff08;PCH5都可以&#xff09; 前置知识&#xff1a; 简介&#xff1a;Blob对象是一个表示大量不可变原始数据的容器。它主要用于处理二进制数据&#xff0c;如图片、音频、视频等文件。Blob 对象可以用于存储和操作大型数据集&…

SpringCloud系列(18)--将服务提供者Provider注册进Consul

前言&#xff1a;在上一章节中我们把服务消费者Consumer注册进了Zookeeper&#xff0c;并且成功通过服务消费者Consumer调用了服务提供者Provider&#xff0c;而本章节则是关于如何将服务提供者Provider注册进Consul里 准备环境&#xff1a; 先安装Consul&#xff0c;如果没有…

linux安装PyCharm

安装PyCharm PyCharm是一个流行的Python开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains提供。有两个版本&#xff1a;社区版&#xff08;免费&#xff09;和专业版&#xff08;付费&#xff09;。以下是安装社区版的方法&#xff1a; 使用snap包安装&#xff08…

ElasticSearch语句中must,must_not,should 组合关系

前言&#xff1a; 在实际应用中&#xff0c;发现当bool中同时使用must和should 没有达到想要的想过&#xff0c;而是只展示了must中的命中数据&#xff0c;所以打算探究一下bool中 三种逻辑关系的组合。 上述查询语句只展示了must的结果&#xff0c;没有should中的结果&#…

yolov8旋转目标检测输出的角度转化为适合机械爪抓取的角度

1. 机械爪抓取时旋转的角度定义 以X轴正方向&#xff08;右&#xff09;为零度方向&#xff0c;角度取值范围[-90&#xff0c;90)。 确认角度的方法&#xff1a; 逆时针旋转X轴&#xff0c;X轴碰到矩形框长边时旋转过的角度记为angleX&#xff1a; 1.如果angleX小于90&#xf…

RDD编程初级实践

参考链接 spark入门实战系列--8MLlib spark 实战_mob6454cc68310b的技术博客_51CTO博客https://blog.51cto.com/u_16099212/7454034 Spark和Hadoop的安装-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/138021948?spm1001.2014.3001.5501 1. spark-shell…

【介绍下如何使用CocoaPods】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Linux:服务器间同步文件的脚本(实用)

一、功能描述 比如有三台服务器&#xff0c;hadoop102、hadoop103、hadoop104&#xff0c;且都有atguigu账号 循环复制文件到所有节点的相同目录下&#xff0c;且脚本可以在任何路径下使用 二、脚本实现 1、查看环境变量 echo $PATH2、进入/home/atguigu/bin目录 在该目录下…

Redis 源码学习记录:字符串

redisObject Redis 中的数据对象 server/redisObject.h 是 Redis 对内部存储的数据定义的抽象类型其定义如下&#xff1a; typedef struct redisObject {unsigned type:4; // 数据类型&#xff0c;字符串&#xff0c;哈希表&#xff0c;列表等等unsigned encoding:4; …

文字PDF转图片PDF,适合pdf防复制

完整代码已传至github平台&#xff1a; https://github.com/yaunsine/text_pdf_to_image_pdf 分成两步操作&#xff1a; 1、将文字pdf输出成图片 2、将所有图片合成为pdf 将PDF文件输出为图片的形式 """pdf转图片 """ def pyMuPDF_fitz(pdfPa…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时&#xff0c;提示语闪太快&#xff0c;导致无法获取元素的问题 解决办法 步骤一&#xff1a; F12---》控制台输入debugger 步骤二&#xff1a;对于需要定位的部分&#xff0c;在控制台的debugger处回车&#xff0c;可以定住页面 步骤三&#xff1a;正常定…

Impala系统架构理解

1 impalad&#xff08;含3个模块&#xff0c;执行hbase或hdfs中的数据&#xff0c;数据的底层存储为hdfs&#xff09; 当用户通过用户接口提出查询或分析请求时&#xff0c;Impala会选择一个Impalad实例作为协调者&#xff08;Coordinator&#xff09;来负责整个查询过程的协调…

Android NDK开发 CMAKE 相关总结

预设变量含义介绍 工程结构组织&#xff1a; 代码目录 ├── CMakeLists.txt ├── a │ ├── CMakeLists.txt │ └── a.cpp └── b├── CMakeLists.txt├── b.cpp└── b.h路径相关&#xff1a; CMAKE_SOURCE_DIR&#xff1a;最顶层 CMakceLists.txt 所在…

【Python快速上手(六)】

目录 Python快速上手&#xff08;六&#xff09;Python3 列表和元组Python3 列表1.创建列表2.访问列表元素3.列表切片4.修改列表元素5.列表方法6.列表操作符注意事项 Python3 元组1.创建元组2.访问元组元素3.元组切片4.元组内置函数5.元组运算符注意事项 Python快速上手&#x…

【CTF Web】CTFShow web14 Writeup(PHP+switch case 穿透+SQL注入+文件读取)

web14 5 解法 <?php include("secret.php");if(isset($_GET[c])){$c intval($_GET[c]);sleep($c);switch ($c) {case 1:echo $url;break;case 2:echo A;break;case 555555:echo $url;case 44444:echo "A";break;case 3333:echo $url;break;case 222…

python网络爬虫爬取需要的数据

要爬取网站的数据&#xff0c;你可以使用 Python 的 requests 库来发送 HTTP 请求&#xff0c;并使用 BeautifulSoup 库来解析返回的 HTML 内容。但是&#xff0c;在此之前&#xff0c;你需要检查该网站的 robots.txt 文件&#xff0c;以确认是否允许爬虫抓取特定页面的数据。 …

win11 安装qt5.14.2 、qtcreator、vs编译器 。用最小安装进行 c++开发qt界面

系统 &#xff1a;win11 一、安装vs生成工具 &#xff0c;安装编译器 下载visualstudio tools 生成工具&#xff1a; 安装编译器 和 windows sdk&#xff1a; 安装debug 调试器&#xff1a; 二、Qt5.14.2下载 下载链接: Index of /archive/qt/5.14/5.14.2 安装qt 三、配置QT/…

ChuanhuChatGPT集成百川大模型

搭建步骤&#xff1a; 拷贝本地模型&#xff0c;把下载好的Baichuan2-7B-Chat拷贝到models目录下 修改modules\models\base_model.py文件&#xff0c;class ModelType增加Baichuan Baichuan 16 elif "baichuan" in model_name_lower: model_type ModelType.Ba…

短视频矩阵营销系统 poihuoqu 任意文件读取漏洞复现

0x01 产品简介 短视频矩阵营销系统是由北京华益云数据科技有限公司开发的一款产品,这家公司专注于抖音短视频矩阵营销系统的研发,致力于为企业提供全方位的短视频营销解决方案。华益云抖销短视频矩阵系统可以帮助企业快速搭建多个短视频账号,实现内容的批量制作和发布,提高…

PostgreSQL的扩展(extensions)-常用的扩展之pg_stat_kcache

PostgreSQL的扩展&#xff08;extensions&#xff09;-常用的扩展之pg_stat_kcache pg_stat_kcache 是一个第三方的 PostgreSQL 扩展&#xff0c;它用于收集来自操作系统内核的查询级别的缓存使用和 I/O 统计信息。这个扩展提供了一个机制来补充 PostgreSQL 自带的统计信息&am…