graph LR
subgraph node1["Node 1"]
POD1["Pod A 10.244.1.2"]
POD2["Pod B 10.244.1.3"]
end
subgraph node2["Node 2"]
POD3["Pod C 10.244.2.2"]
POD4["Pod D 10.244.2.3"]
end
POD1 <--> |"直接通信"| POD2
POD1 <--> |"跨节点"| POD3
POD2 <--> |"跨节点"| POD4
sequenceDiagram
participant PodA as Pod A 10.244.1.2
participant VethA as veth-a
participant Host as Host 路由
participant VethB as veth-b
participant PodB as Pod B 10.244.1.3
PodA->>VethA: 发送到 10.244.1.3
VethA->>Host: 进入 host netns
Host->>Host: 查路由表 10.244.1.3 → veth-b
Host->>VethB: 转发
VethB->>PodB: 进入 Pod B netns
sequenceDiagram
participant PodA as Pod A 10.244.1.2
participant Host1 as Node 1
participant Network as 物理网络
participant Host2 as Node 2
participant PodB as Pod B 10.244.2.2
PodA->>Host1: 发送到 10.244.2.2
Host1->>Host1: 路由查找 10.244.2.0/24 via Node2
Host1->>Network: 转发(源IP不变)
Network->>Host2: 路由到 Node 2
Host2->>Host2: 路由查找 10.244.2.2 → veth-b
Host2->>PodB: 送达
sequenceDiagram
participant PodA as Pod A 10.244.1.2
participant Host1 as Node 1
participant Tunnel as 隧道接口
participant Network as 物理网络
participant Host2 as Node 2
participant PodB as Pod B 10.244.2.2
PodA->>Host1: 原始包 src=10.244.1.2 dst=10.244.2.2
Host1->>Tunnel: 封装 外层: Node1→Node2 内层: Pod A→Pod B
Tunnel->>Network: 发送封装后的包
Network->>Host2: 送达 Node 2
Host2->>Host2: 解封装
Host2->>PodB: 原始包送达
sequenceDiagram
participant Pod as Client Pod 10.244.1.2
participant IPT as iptables/eBPF
participant Backend as Backend Pod 10.244.2.3
Pod->>IPT: dst=ClusterIP:80
Note over IPT: DNAT 转换 ClusterIP → 10.244.2.3
IPT->>Backend: dst=10.244.2.3:8080
Backend->>IPT: src=10.244.2.3:8080
Note over IPT: 反向 NAT
IPT->>Pod: src=ClusterIP:80
# Calico 节点的典型路由表$ ip route
# 默认路由default via 192.168.1.1 dev eth0
# 本节点 Pod 路由10.244.1.2 dev cali12345 scope link
10.244.1.3 dev cali67890 scope link
10.244.1.4 dev caliabc12 scope link
# 其他节点 Pod 路由(BGP 学习,路由模式)10.244.2.0/24 via 192.168.1.101 dev eth0 proto bird
10.244.3.0/24 via 192.168.1.102 dev eth0 proto bird
# 或者隧道模式# 10.244.2.0/24 via 192.168.1.101 dev tunl0 proto bird onlink# 10.244.3.0/24 via 192.168.1.102 dev tunl0 proto bird onlink
# 创建测试 Podkubectl run test-pod --image=nginx --restart=Never
# 查看 Pod IPkubectl get pod test-pod -o wide
# 进入 Pod 查看网络kubectl exec -it test-pod -- sh
# 在 Pod 内执行ip addr # 查看接口ip route # 查看路由cat /etc/resolv.conf # 查看 DNS