kube-proxy怎么修改ipvs规则

在 Kubernetes 中,kube-proxy 使用 IPVS 模式时,流量转发是通过 Linux 内核的 IP Virtual Server (IPVS) 来实现的。kube-proxy 会动态地根据 Kubernetes 服务(Service)和 Endpoints 的变化来更新 IPVS 规则。

修改 IPVS 规则

通常情况下,kube-proxy 会自动管理 IPVS 规则,你可以通过以下方式修改或查看 IPVS 规则:

1. 启用 IPVS 模式

在 Kubernetes 中启用 IPVS 模式,需要在启动 kube-proxy 时进行配置。你可以通过修改 kube-proxy 的配置文件或命令行参数来启用 IPVS 模式。

  • 修改 kube-proxy 配置文件(通常是 /etc/kubernetes/manifests/kube-proxy.yaml) ,并设置 proxy-mode 为 ipvs。

    示例配置:

    yaml 复制代码
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: kube-proxy
      namespace: kube-system
    spec:
      template:
        spec:
          containers:
            - name: kube-proxy
              image: k8s.gcr.io/kube-proxy:v1.23.0
              command:
                - /bin/sh
                - -c
                - |
                  # 修改 kube-proxy 启动参数
                  /usr/local/bin/kube-proxy --proxy-mode=ipvs

    这个配置确保了 kube-proxy 启动时会使用 IPVS 模式。

  • 如果你使用的是 kubeadm 部署的集群,也可以通过配置文件 /etc/kubernetes/kube-proxy-config.yaml 来设置。

    vbnet 复制代码
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    mode: "ipvs"

修改完配置后,kube-proxy 会重启并切换到 IPVS 模式。

2. 查看 IPVS 规则

你可以使用 ipvsadm 工具来查看当前的 IPVS 规则。该工具显示的是当前节点上 IPVS 路由的配置。

  • 在每个节点上,执行以下命令来查看当前的 IPVS 规则:

    复制代码
    ipvsadm -L -n

    这个命令将列出当前的 IPVS 负载均衡规则。输出示例:

    diff 复制代码
    TCP  10.96.0.1:80 rr 1 1 1
    -> 10.244.0.2:80  masq
    -> 10.244.0.3:80  masq
  • 解释:

    • 10.96.0.1:80 是 Service 的虚拟 IP 和端口。
    • 后面跟的是实际 Pod 的 IP 地址和端口(如 10.244.0.2:80 和 10.244.0.3:80),它们是该 Service 后端的 Pod。
    • masq 表示使用源地址伪装。

3. 手动修改 IPVS 规则

如果你需要手动修改 IPVS 规则(例如,调整负载均衡策略或进行故障排查),可以使用 ipvsadm 工具。

添加一条新的 IPVS 规则:

css 复制代码
ipvsadm -A -t 10.96.0.1:80 -s rr
ipvsadm -a -t 10.96.0.1:80 -r 10.244.0.2:80 -m
ipvsadm -a -t 10.96.0.1:80 -r 10.244.0.3:80 -m

这会向 IPVS 中添加一个新的服务,绑定虚拟 IP 10.96.0.1:80,并将流量均匀地负载到两个 Pod(10.244.0.2:80 和 10.244.0.3:80)上,采用轮询负载均衡策略(-s rr)。

删除 IPVS 规则:

复制代码
ipvsadm -D -t 10.96.0.1:80

这会删除虚拟 IP 10.96.0.1:80 的规则。

4. 修改负载均衡策略

如果你希望修改负载均衡算法,可以通过 ipvsadm 工具来更改负载均衡策略。

  • 修改为

    最少连接数

    :

    css 复制代码
    ipvsadm -A -t 10.96.0.1:80 -s lc
  • 修改为

    基于源 IP 的哈希

    :

    css 复制代码
    ipvsadm -A -t 10.96.0.1:80 -s sh

-s 参数后跟的负载均衡策略选项:

  • rr: 轮询 (Round Robin)
  • lc: 最少连接数 (Least Connections)
  • sh: 源地址哈希 (Source Hashing)

5. 重新应用 IPVS 规则

由于 kube-proxy 会自动更新 IPVS 规则,修改规则后需要确保 kube-proxy 重新加载配置并应用新的规则。

  • 你可以通过重新启动

    复制代码
    kube-proxy

    来确保它重新加载和应用新的 IPVS 配置:

    perl 复制代码
    kubectl -n kube-system rollout restart daemonset kube-proxy

总结

  • kube-proxy 使用 IPVS 模式时,负责在集群节点上配置和管理 IPVS 规则来实现负载均衡。
  • 通过 ipvsadm 工具,可以查看、修改和删除 IPVS 规则。
  • 如果需要修改 kube-proxy 的行为或负载均衡策略,可以通过修改配置文件来实现。
  • 一般情况下,不建议手动修改 kube-proxy 的 IPVS 规则,除非你在进行故障排查或高级定制配置。
相关推荐
程序猿DD18 分钟前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne5 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF5 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
upala6 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna6 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构
码事漫谈7 小时前
因为太想讨好你,所以AI会骗你
后端