iptables 是什么?他有哪些能力,能详情介绍一下吗?
k8s service到pod默认使用的它,感觉它是linux的。
1 个回答
你要习惯任何人的忽冷忽然,也要看淡任何人的渐行渐远。朱八戒### **iptables 介绍** `iptables` 是 Linux 内核中的网络包过滤和地址转换(NAT)工具,基于 `netfilter` 框架。它用于管理和控制网络流量,常见功能包括: - 防火墙 - 网络地址转换(NAT) - 端口转发 - 流量控制 在 Kubernetes 中,`iptables` 主要由 `kube-proxy` 使用,用于 `Service` 负载均衡,将 `Service` IP 映射到 `Pod`。 ### **iptables 主要功能** `iptables` 通过 **表(tables)** 和 **链(chains)** 组合来管理数据包处理。 #### **1. 规则表** `iptables` 提供 5 种表,每种表适用于不同的场景: | 表名 | 作用 | |------------|------| | `filter` | 主要用于防火墙规则(允许或拒绝数据包)。 | | `nat` | 进行网络地址转换(NAT),修改数据包的源或目标地址。 | | `mangle` | 修改 IP 头信息,如 TTL(生存时间)。 | | `raw` | 控制连接跟踪(Connection Tracking)。 | | `security` | 配合 SELinux 进行安全策略管理。 | Kubernetes 主要使用 `nat` 表,实现 `Service` 负载均衡。 #### **2. 规则链** `iptables` 规则链定义数据包的处理方式: | 链名 | 作用 | |-------------|------| | `PREROUTING` | 进入 Linux 内核时处理(通常用于 DNAT)。 | | `INPUT` | 处理流向本机的数据包。 | | `FORWARD` | 处理需要转发的数据包(流经本机但不属于本机)。 | | `OUTPUT` | 处理本机生成的数据包。 | | `POSTROUTING` | 处理即将离开本机的数据包(通常用于 SNAT)。 | ### **iptables 工作机制** 当数据包进入 Linux 内核后,按照以下流程被 `iptables` 处理: ``` 数据包进入网络栈 ↓ ┌───────────────────┐ │ PREROUTING │ (修改目的地址) └───────────────────┘ ↓ ┌───────────────────┐ │ INPUT │ (流向本机) └───────────────────┘ ↓ 应用程序处理 ↓ ┌───────────────────┐ │ OUTPUT │ (本机发出) └───────────────────┘ ↓ ┌───────────────────┐ │ POSTROUTING │ (修改源地址) └───────────────────┘ ↓ 数据包离开网络栈 ``` ### **iptables 在 Kubernetes 中的作用** Kubernetes 依赖 `iptables` 进行 `Service` 负载均衡,`kube-proxy` 主要使用 **`nat` 表** 来完成 `Service` 到 `Pod` 的流量转发: 1. **`PREROUTING` 链**:拦截外部请求,将 `Service IP` 重定向到 `Pod IP`。 2. **`POSTROUTING` 链**:修改源地址,保证 Pod 正确响应请求。 示例: ```bash iptables -t nat -L KUBE-SERVICES -n -v ``` 输出: ```plaintext Chain KUBE-SERVICES (1 references) pkts bytes target prot opt in out source destination 100 6000 KUBE-SVC-XXXXX tcp -- * * 0.0.0.0/0 10.0.0.1 ``` 访问 `10.0.0.1`(`Service` 的 `ClusterIP`)的请求会被转发到 `Pod`。 ### **iptables 相关操作** #### **1. 查看规则** ```bash iptables -t nat -L -n -v # 查看 NAT 规则 iptables -t filter -L -n -v # 查看防火墙规则 ``` #### **2. 添加规则** ```bash iptables -A INPUT -p tcp --dport 80 -j ACCEPT ``` 允许 80 端口的 TCP 连接进入本机。 #### **3. 删除规则** ```bash iptables -D INPUT -p tcp --dport 80 -j ACCEPT ``` #### **4. 清空规则** ```bash iptables -F iptables -t nat -F ``` #### **5. 保存规则** ```bash iptables-save > /etc/iptables.rules ``` 重启后恢复: ```bash iptables-restore < /etc/iptables.rules ``` ### **iptables 与 IPVS 对比** Kubernetes `kube-proxy` 主要支持 `iptables` 和 `IPVS` 两种模式: | 模式 | 适用场景 | 优势 | |-----------|--------|------| | `iptables` | 适用于中小规模集群 | 简单稳定,默认开启 | | `IPVS` | 适用于大规模集群 | 性能更高,基于 `netfilter` | 切换到 `IPVS`: ```bash kubectl edit configmap -n kube-system kube-proxy ``` 修改: ```yaml mode: "ipvs" ``` 然后重启 `kube-proxy`: ```bash kubectl delete pod -n kube-system -l k8s-app=kube-proxy ``` ### **总结** - `iptables` 是 Linux 内核的防火墙和 NAT 工具。 - `iptables` 通过 **规则表** 和 **规则链** 管理数据包处理流程。 - Kubernetes 主要使用 `iptables` 的 `nat` 表进行 `Service` 负载均衡。 - `PREROUTING` 和 `POSTROUTING` 规则链负责流量转发。 - `IPVS` 是 `iptables` 的高性能替代方案,适用于大规模 Kubernetes 集群。发布于 2025-02-28 13:09 •IP属地 安徽举报评论收藏
公众号进入网站体验更佳

