pods到pods流程

## 🚀 **Kubernetes Pod 通信完整路径(发包 + 回包)**  
👉 本流程覆盖:  
✅ Pod → Pod(同节点)  
✅ Pod → Pod(跨节点)  
✅ 涉及完整的 iptables 表和链  
✅ 涉及 Flannel VXLAN 封装和解封  

---

## 🌟 **完整通信流程总览**  
```text
[Pod A] → [Flannel VXLAN 封装] → [物理机路由表] → 
[iptables: PREROUTING → INPUT] → [Pod B]  
[Pod B] → [iptables: OUTPUT → POSTROUTING] → [Flannel VXLAN 封装] → 
[物理机路由表] → [Pod A]
```

---

## ✅ **1. 发包路径(Pod A → Pod B)**  
👉 **流量方向:Pod A → Pod B**  
👉 **同节点通信** 和 **跨节点通信** 的区别:  
- **同节点**:直接通过本地网络路由  
- **跨节点**:通过 Flannel VXLAN 隧道封装  

---

### 🚀 **(1) Pod A → Pod B(同节点)**  
```text
[Pod A]  
     │  
     ▼  
[flannel0(VXLAN 隧道)] → 本地路由表直接送达  
     │  
     ▼  
【raw 表】 → PREROUTING 链 → 连接跟踪初始化(conntrack)  
     │  
     ▼  
【mangle 表】 → PREROUTING 链 → 标记和修改  
     │  
     ▼  
【nat 表】 → PREROUTING 链 → DNAT(目标 NAT)  
     │  
     ▼  
【filter 表】 → INPUT 链 → 规则匹配  
     │  
     ├── 匹配到规则:放行  
     └── 无匹配:DROP 或 REJECT  
     │  
     ▼  
[Pod B]   →   # Pod B 接收数据包  
```

---

### 🚀 **(2) Pod A → Pod B(跨节点)**  
```text
[Pod A]  
     │  
     ▼  
[flannel0(VXLAN 隧道)] → 隧道封装  
     │  
     ▼  
[物理机路由表] → 通过 VXLAN 发送到目标节点  
     │  
     ▼  
【raw 表】 → PREROUTING 链 → 连接跟踪初始化  
     │  
     ▼  
【mangle 表】 → PREROUTING 链 → 标记和修改  
     │  
     ▼  
【nat 表】 → PREROUTING 链 → DNAT(目标 NAT)  
     │  
     ▼  
【filter 表】 → INPUT 链 → 规则匹配  
     │  
     ├── 匹配到规则:放行  
     └── 无匹配:DROP 或 REJECT  
     │  
     ▼  
[Pod B]   →   # Pod B 接收数据包  
```

---

### 🏆 **完整 iptables 规则(发包路径)**  

👉 **(1) `raw` 表 - PREROUTING 链(初始化)**  
```bash
iptables -t raw -I PREROUTING 1 -p tcp --dport 80 -j MARK --set-mark 101
iptables -t raw -I PREROUTING 2 -m mark --mark 101 -j LOG --log-prefix "RAW-HIT-80:"
```

👉 **(2) `mangle` 表 - PREROUTING 链(标记和修改)**  
```bash
iptables -t mangle -I PREROUTING 1 -p tcp --dport 80 -j MARK --set-mark 102
iptables -t mangle -I PREROUTING 2 -m mark --mark 102 -j LOG --log-prefix "MANGLE-HIT-80:"
```

👉 **(3) `nat` 表 - PREROUTING 链(DNAT)**  
> DNAT 将目标 IP 替换为目标 Pod IP  
```bash
iptables -t nat -I PREROUTING 1 -p tcp --dport 80 -j DNAT --to-destination 10.244.1.5:80
iptables -t nat -I PREROUTING 2 -m mark --mark 102 -j LOG --log-prefix "DNAT-HIT-80:"
```

👉 **(4) `filter` 表 - INPUT 链(放行)**  
```bash
iptables -t filter -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables -t filter -I INPUT 2 -m mark --mark 102 -j LOG --log-prefix "INPUT-HIT-80:"
```

---

## ✅ **2. 回包路径(Pod B → Pod A)**  
👉 **流量方向:Pod B → Pod A**  
👉 **同节点通信** 和 **跨节点通信** 的区别:  
- **同节点**:直接通过本地路由表  
- **跨节点**:需要通过 VXLAN 隧道封装  

---

### 🚀 **(1) Pod B → Pod A(同节点)**  
```text
[Pod B]  
     │  
     ▼  
【mangle 表】 → OUTPUT 链 → 标记和修改  
     │  
     ▼  
【nat 表】 → POSTROUTING 链 → 直接返回(不封装)  
     │  
     ▼  
[物理机路由表] → 直接路由回 Pod A  
     │  
     ▼  
[Pod A]   →   # Pod A 接收回包  
```

---

### 🚀 **(2) Pod B → Pod A(跨节点)**  
```text
[Pod B]  
     │  
     ▼  
【mangle 表】 → OUTPUT 链 → 标记和修改  
     │  
     ▼  
【nat 表】 → POSTROUTING 链 → SNAT + VXLAN 封装  
     │  
     ▼  
[物理机路由表] → 通过 VXLAN 发送到源节点  
     │  
     ▼  
[flannel0(VXLAN 隧道)] → 封装解析  
     │  
     ▼  
[Pod A]   →   # Pod A 接收回包  
```

---

### 🏆 **完整 iptables 规则(回包路径)**  

👉 **(1) `mangle` 表 - OUTPUT 链(标记)**  
```bash
iptables -t mangle -I OUTPUT 1 -p tcp --sport 80 -j MARK --set-mark 201
iptables -t mangle -I OUTPUT 2 -m mark --mark 201 -j LOG --log-prefix "OUTPUT-HIT-80:"
```

👉 **(2) `nat` 表 - OUTPUT 链(记录日志)**  
```bash
iptables -t nat -I OUTPUT 1 -p tcp --sport 80 -j MARK --set-mark 202
iptables -t nat -I OUTPUT 2 -m mark --mark 202 -j LOG --log-prefix "OUTPUT-SNAT-80:"
```

👉 **(3) `nat` 表 - POSTROUTING 链(SNAT + VXLAN 封装)**  
> 如果是跨节点通信,需要通过 `flannel.1` 接口封装  
```bash
iptables -t nat -A POSTROUTING -p tcp --sport 80 -j MARK --set-mark 203
iptables -t nat -A POSTROUTING -m mark --mark 203 -j LOG --log-prefix "POSTROUTING-HIT-80:"
iptables -t nat -A POSTROUTING -o flannel.1 -p tcp --sport 80 -j MASQUERADE
```

---

## ✅ **3. Flannel VXLAN 路由配置**  
👉 **配置路由规则**  
```bash
ip route add 10.244.2.0/24 via 192.168.1.12 dev flannel.1
```

✅ **解释:**  
- `10.244.2.0/24` → 目标 Pod 的 CIDR  
- `192.168.1.12` → 目标节点 IP  
- `flannel.1` → VXLAN 接口  

---

## 🏆 **完整了!发包路径 + 回包路径 + Flannel 封装,全链路覆盖!** 😎

  

posted on 2025-03-17 18:24  吃草的青蛙  阅读(30)  评论(0)    收藏  举报

导航