1. 实战概述
在容器化应用部署中,Kubernetes网络通信是最基础也是最复杂的部分之一。很多刚接触K8s的开发者经常会困惑:为什么Pod内的容器可以通过localhost互相访问?不同节点上的Pod如何实现跨主机通信?Service又是如何将请求转发到后端Pod的?这些问题的答案都藏在Kubernetes精心设计的网络模型中。
这次实战我将带大家深入Kubernetes网络通信的底层实现,通过一系列实验验证从Pod内部通信到Service访问的全链路流程。不同于大多数教程只停留在概念层面,我们会实际创建Pod、Service等资源,并通过抓包、查看路由表等方式,观察数据包在Kubernetes网络中的真实流向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 实验环境搭建
为了完整演示Kubernetes网络通信,我们需要准备以下环境:
- 一个至少包含两个工作节点的Kubernetes集群(建议使用kubeadm部署)
- 安装网络插件(这里使用Calico作为CNI插件)
- 准备必要的工具:
- kubectl:Kubernetes命令行工具
- tcpdump:网络抓包工具
- iproute2:网络配置工具集
- curl/httpie:HTTP测试工具
bash复制# 检查集群节点状态
kubectl get nodes -o wide
# 检查Calico组件运行状态
kubectl get pods -n kube-system | grep calico
2.2 测试应用部署
我们将使用nginx作为测试应用,通过不同的部署方式来验证各种网络通信场景:
yaml复制# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
3. Kubernetes网络基础
3.1 Kubernetes网络模型解析
Kubernetes网络模型遵循几个基本原则:
- 每个Pod拥有唯一的IP
