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 规则,除非你在进行故障排查或高级定制配置。
相关推荐
独立开阀者_FwtCoder7 分钟前
深入解密Node共享内存:这个原生模块让你的多进程应用性能翻倍
前端·javascript·后端
Asthenia04129 分钟前
深入剖析 Spring Cloud Feign 的 Contract 组件:设计与哲学
后端
Asthenia041218 分钟前
Feign 原理:Client 的实现与选型(ApacheHttpClient/OkHttp)/Feign超时控制
后端
开心就好202519 分钟前
Flutter实战】文本组件及五大案例
后端
Ai 编码助手22 分钟前
Golang并发编程:Data Race检测与解决方案
开发语言·后端·golang
宦如云28 分钟前
Assembly语言的嵌入式调试
开发语言·后端·golang
Gvemis⁹1 小时前
Scala总结(三)
开发语言·后端·scala
一只小闪闪1 小时前
langchain4j搭建失物招领系统(五)---实现失物登记功能-大模型流式输出
java·人工智能·后端
SimonKing1 小时前
Kafka 4.0.0震撼来袭,彻底摒弃Zookeeper
java·后端·架构
Csss1 小时前
[抖音]用户首页分享链接获取视频数据,可选解析视频文案
后端