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 规则,除非你在进行故障排查或高级定制配置。
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发3 天前
软件工程SOLID 五大设计原则
后端·软件工程