iptables 全面解析:在 Kubernetes 中的应用与实例
·
一、什么是 iptables
iptables 是 Linux 系统中用户空间的命令行工具,用于配置内核中 Netfilter 框架的防火墙规则。它用于控制进出系统的网络流量,支持:
- 包过滤(Packet Filtering)
- 网络地址转换(NAT)
- 端口转发
- 流量限制
- 包记录(日志)
iptables 操作的四个主要表(tables):
| 表名 | 用途 |
|---|---|
filter | 默认表,用于控制包是否被允许 |
nat | 用于网络地址转换,如 DNAT、SNAT |
mangle | 用于修改数据包 |
raw | 用于配置不走连接跟踪的规则 |
二、iptables 能做什么?
- 防火墙规则:允许或拒绝特定 IP/端口/协议的数据包
- NAT:修改数据包源地址或目标地址(如端口映射)
- 流量控制:限制某些连接速率
- 网络隔离:不同网络或服务间通信隔离
- 端口转发:将一个端口流量转发到另一个主机或端口
三、Kubernetes 中 iptables 的作用
Kubernetes 使用 iptables 实现以下关键网络功能:
1. Service 的流量转发(ClusterIP)
K8s 会将对 Service IP 的访问通过 iptables 转发到对应的后端 Pod。
# 查看 Kube Proxy 安装的 iptables 规则
sudo iptables -t nat -L -n | grep KUBE
规则链示意(nat 表):
PREROUTING -> KUBE-SERVICES -> KUBE-SVC-xxxx -> KUBE-SEP-xxxx
其中:
KUBE-SERVICES:匹配所有服务 IP 的入口KUBE-SVC-*:为每个 Service 创建的规则KUBE-SEP-*:为每个 Pod 创建的规则,真实 IP:Port
2. NodePort 服务
K8s 使用 iptables 将宿主机某个端口(NodePort)映射到后端服务 Pod。
iptables -t nat -L -n | grep NODEPORT
3. 网络策略(NetworkPolicy)【若使用 iptables 实现的 CNI,如 Calico】
Calico 等插件可以通过 iptables 控制 Pod 与 Pod、Pod 与外部网络之间的访问权限。
4. DNS 拦截与处理
Kubernetes 的 DNS 请求也可能由 iptables 重定向至 CoreDNS。
四、举例说明:Service 流量转发(ClusterIP)
场景说明:
创建一个名为 my-nginx 的 Deployment,并暴露为 ClusterIP 服务。
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx
spec:
selector:
app: my-nginx
ports:
- port: 80
targetPort: 80
type: ClusterIP
查看 iptables 规则:
# 查找服务 IP 对应的 iptables 规则(假设服务 IP 为 10.96.0.100)
sudo iptables -t nat -L KUBE-SERVICES -n | grep 10.96.0.100
输出可能如下:
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:10.244.1.5:80
说明访问 10.96.0.100:80 会被重定向到实际 Pod(10.244.1.5:80)。
五、简要总结
| 功能 | iptables 在 K8s 中作用 |
|---|---|
| 服务转发 | 将 Service IP 映射到 Pod IP |
| 端口映射 | NodePort → Pod |
| 网络隔离 | NetworkPolicy 实现 |
| 路由选择 | 辅助 kube-proxy 实现服务发现 |
更多推荐
所有评论(0)