31-k8s集群svc的代理模式-iptables修改为ipvs

本文讲述了在Kubernetes集群中,为什么选择将kube-proxy的代理模式从iptables切换到更高效的ipvs,以及如何查看和修改kube-proxy的工作模式,包括检查配置、修改cm资源、验证代理模式成功切换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、概述

        学到这里,我们都知道,k8s集群的外部网络分发,借助kube-proxy组件来完成;

问题:我们为什么要将代理模式修改为ipvs而不继续使用iptables呐?

因为:

        1,iptables底层使用四表五链完成网络代理,效率比较低,而ipvs是采用了iphash的方式实现代理的,效率比较高,因此才会采用ipvs作为生产环境中的网络代理;

        2,iptables不太适合【读】,可读性太低,很乱;

二、查看k8s中的kube-proxy的代理模式

1,查看kube-proxy

[root@k8s231 ingress]# kubectl get pods -n kube-system -o wide

2,查看kube-proxy的日志

        通过查看kube-proxy的日志,我们就知道了我们正在使用iptables还是ipvs为代理模式了;

[root@k8s231 ingress]# kubectl logs -n kube-system kube-proxy-nbt6h

3,【拓展】使用iptables查看svc资源

· 查看现有svc

[root@k8s231 ingress]# kubectl get svc

· 使用iptables查看其中一个svc

[root@k8s231 ingress]# iptables-save | grep 10.200.11.39

· 查看iptables查询出来的规则(往下查一层路由)

[root@k8s231 ingress]# iptables-save | grep KUBE-SVC-CL34MMSZRUFQFSPM

· 再往下查一层

[root@k8s231 ingress]# iptables-save | grep KUBE-SEP-YLLYZD7DXDNDFOFC

· 总结:

        通过一层一层的路由查询,我们就知道了目标地址的终点ip是什么;

三、查看kube-proxy工作模式

        从k8s的1.11版本之后,支持iptables和ipvs两种模式,如果ipvs没有开启,则自动降级为iptables。

1,yaml格式查看kube-proxy

[root@k8s231 ingress]# kubectl -n kube-system get pods kube-proxy-nbt6h -o yaml

可以看到有一个cm资源

查看这个cm资源

[root@k8s231 ingress]# kubectl describe cm -n kube-system kube-proxy

发现“”里面什么都没写,就代表是默认的iptables

四、开始修改代理模式为ipvs

1,k8s集群所有节点加载ipvs模块

yum -y install conntrack-tools ipvsadm.x86_64

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
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2,修改k8s集群的工作模式为ipvs

修改cm资源(kube-proxy)

[root@k8s231 ~]# kubectl -n kube-system  edit cm kube-proxy

切记,【i/a】修改后,要保存退出【:wq】

3,删除原有的kube-proxy的pod

        删除后会重新拉起,然后就修改成功了

[root@k8s231 ~]# kubectl get pods -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl -n kube-system delete pods

        等待重新拉起pod

4,查看是否修改成功

[root@k8s231 ~]# kubectl logs -n kube-system kube-proxy--4hjgr

5,拓展:使用ipvs查看svc路由

[root@k8s231 ~]# ipvsadm -ln | grep 10.200.0.1 -A 5

至此,咱们iptable升级ipvs的代理模式修改就学习完毕了;

### 查看 Kubernetes 使用的 iptables 规则 Kubernetes 通过 `iptables` 实现服务路由和网络策略,主要由 `kube-proxy` 组件负责管理。`kube-proxy` 会根据 Service 和 Endpoints 的定义自动生成相应的 `iptables` 规则,以实现集群内部的服务发现与负载均衡。[^1] #### 查看 iptables 规则的方法 1. **查看 Kubernetes 服务相关的 NAT 规则** Kubernetes 的服务规则主要集中在 `nat` 表中,尤其是 `KUBE-SERVICES` 链。可以使用以下命令查看: ```bash iptables -t nat -L KUBE-SERVICES -n -v ``` 此命令将列出所有指向 Kubernetes 服务 ClusterIP 的规则,包括目标地址、协议类型和端口等信息。例如,可以观察到 DNS 服务和 Dashboard 的访问规则。[^3] 2. **查看完整的 nat 表规则** 如果需要更全面地了解 `nat` 表的结构,可以使用: ```bash iptables -t nat -L -n -v ``` 这会显示所有链的规则,包括 Kubernetes 自动创建的链(如 `KUBE-POSTROUTING`、`KUBE-SERVICES`、`KUBE-SVC-*` 和 `KUBE-SEP-*` 等)。[^1] 3. **查看特定链的详细规则** 例如,要查看某个具体服务对应的规则链(如 `KUBE-SVC-XXXXXXX`),可以执行: ```bash iptables -t nat -L KUBE-SVC-XXXXXXX -n -v ``` 其中 `XXXXXXX` 是服务的哈希标识符,可以在 `KUBE-SERVICES` 链中找到对应的服务链名。 4. **查看 filter 表中的规则** 如果启用了网络策略(NetworkPolicy),还需要查看 `filter` 表中的规则,以确认 Pod 之间的访问控制策略是否生效: ```bash iptables -t filter -L -n -v ``` 特别是 `KUBE-FORWARD` 和 `KUBE-NWPOLICY` 链,它们用于实现网络策略的过滤功能。 5. **持久化保存 iptables 规则** 为了防止节点重启后规则丢失,可以使用以下命令保存当前规则: ```bash iptables-save > /etc/iptables/rules.v4 ``` 在 Debian/Ubuntu 系统中,可以安装 `iptables-persistent` 包来管理持久化规则。 #### 查看 kube-proxy 使用的模式 Kubernetes 支持 `iptables` 和 `IPVS` 两种模式来实现服务的负载均衡。可以通过以下命令查看当前使用的模式: ```bash kubectl get configmap -n kube-system kube-proxy -o yaml ``` 在输出的 `mode` 字段中可以看到当前是 `iptables` 还是 `ipvs` 模式。如果使用的是 `ipvs`,则需要使用 `ipvsadm` 工具查看负载均衡规则: ```bash ipvsadm -Ln ``` 该命令会列出所有虚拟服务(VS)和实际服务(RS)的映射关系。[^4] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心机の之蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值