Linux 系统网络全景:从本机数据面到 Docker / Kubernetes
1. 本机身份
先看机器是谁:
- interface:lo / eth0 / wlan0 / tun / veth
- IP / prefix / scope
- route / rule
- namespace 边界
第一批命令:ip -br addr、ip route get。
2. 名字解析
域名问题不要和网络连通性混在一起。
/etc/hostsnsswitch.confresolv.conf- systemd-resolved
- Docker / K8s 内部 DNS
先测:getent hosts。
3. 路由与邻居
路由决定从哪张网卡、哪个源地址、哪个网关出去。
同网段还要 ARP / NDP 找 MAC。
关键命令:
ip route get <ip>
ip neigh
4. Socket / 端口
服务不只是“开端口”:
- 进程是否监听
- 监听 127.0.0.1、0.0.0.0 还是具体 IP
- TCP 状态是 SYN-SENT、ESTAB、RST 还是 TIME-WAIT
核心命令:ss -lntup。
5. 防火墙 / NAT / conntrack
Linux 数据包经常被规则改写或拦截。
- nftables / iptables
- ufw / firewalld
- SNAT / DNAT / MASQUERADE
- conntrack 状态
Docker 和 K8s 都会改这里。
6. 虚拟网络积木
这些是容器、VPN、虚拟机网络的共同地基:
- network namespace
- veth pair
- Linux bridge
- tun / tap
- vxlan / overlay
- qdisc / tc
看不懂它们,就容易误解 Docker / K8s。
7. Docker 对照
Docker 网络 = Linux 网络能力的自动化封装。
container netns -> veth -> bridge -> NAT / filter -> Host / Internet。
-p 本质是宿主机端口到容器端口的数据面转发。
8. Kubernetes 对照
K8s 把 Linux 网络对象化、集群化:
Pod netns、CNI、Service VIP、EndpointSlice、kube-proxy/eBPF、NetworkPolicy、Ingress/Gateway。
排障仍要回到底层:DNS、路由、监听、规则、抓包。