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-modeipvs

    示例配置:

    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:8010.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:8010.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 规则,除非你在进行故障排查或高级定制配置。
相关推荐
IT_陈寒2 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
易协同低代码3 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo3 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志4 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..4 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects4 小时前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰4 小时前
一些基础和问题解决
后端
陈随易5 小时前
前端项目部署只要30秒
前端·后端·程序员
YIAN5 小时前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp
Imchendiana5 小时前
《狂人日记NO.9》— 前后端一把梭,我的全栈实录
前端·后端