Kubernetes 网络动手实验
通过实际操作来深入理解 Kubernetes 网络原理。以下实验将帮助你探索 Pod 网络、Service 网络、Ingress 和 CNI 插件的工作原理。
实验环境准备
在开始实验之前,你需要准备一个 Kubernetes 集群。可以使用以下工具之一:
- Minikube:单节点 Kubernetes 集群,适合本地开发和测试
- Kind:在 Docker 容器中运行的 Kubernetes 集群
- K3s:轻量级 Kubernetes 发行版,适合边缘计算和 IoT
- 云服务商提供的 Kubernetes 服务:如 GKE、AKS、EKS 等
确保你已经安装了 kubectl 命令行工具,用于与 Kubernetes 集群交互:
实验 1:探索 Pod 网络
1.1 创建并检查 Pod 网络接口
在这个实验中,我们将创建一个 Pod 并检查其网络接口。
创建一个简单的 Nginx Pod:
等待 Pod 运行:
检查 Pod 的 IP 地址:
进入 Pod 并检查网络接口:
在节点上查看与 Pod 相关的网络接口(需要 SSH 到节点):
1.2 测试 Pod 之间的通信
在这个实验中,我们将创建多个 Pod 并测试它们之间的通信。
创建第二个 Pod:
获取两个 Pod 的 IP 地址:
从 busybox Pod 访问 nginx Pod:
使用 tcpdump 捕获 Pod 之间的通信(需要 SSH 到节点):
实验 2:探索 Service 网络
2.1 创建并检查 Service
在这个实验中,我们将创建一个 Service 并检查其工作原理。
为 nginx Pod 创建一个 Service:
检查 Service 详情:
检查 Service 的 Endpoints:
通过 Service 访问 nginx Pod:
检查与 Service 相关的 iptables 规则(需要 SSH 到节点):
2.2 测试 Service 负载均衡
在这个实验中,我们将创建一个具有多个 Pod 的 Deployment,并测试 Service 的负载均衡功能。
创建一个 Deployment:
为 Deployment 创建一个 Service:
检查 Service 的 Endpoints:
修改 Nginx 的默认页面,使每个 Pod 显示不同的内容:
多次访问 Service,观察负载均衡效果:
2.3 创建不同类型的 Service
在这个实验中,我们将创建不同类型的 Service,包括 ClusterIP、NodePort 和 LoadBalancer。
创建 NodePort 类型的 Service:
获取 NodePort 端口号:
通过节点 IP 和 NodePort 访问服务:
创建 LoadBalancer 类型的 Service(在支持的环境中):
检查 LoadBalancer Service 状态:
注意:在 Minikube 环境中,LoadBalancer 类型的 Service 不会获得外部 IP。可以使用 minikube tunnel 命令来模拟 LoadBalancer 功能。
实验 3:探索 Ingress
3.1 部署 Ingress 控制器
在这个实验中,我们将部署 Nginx Ingress 控制器并创建 Ingress 资源。
在 Minikube 中启用 Ingress 插件:
验证 Ingress 控制器是否运行:
创建两个示例应用:
创建 Ingress 资源:
检查 Ingress 资源:
测试 Ingress 路由:
3.2 配置 TLS
在这个实验中,我们将为 Ingress 配置 TLS。
生成自签名证书:
创建 TLS Secret:
更新 Ingress 配置,添加 TLS:
测试 HTTPS 访问:
实验 4:探索 CNI 插件
4.1 检查 CNI 配置
在这个实验中,我们将检查 Kubernetes 集群中的 CNI 配置。
SSH 到 Kubernetes 节点:
检查 CNI 配置文件:
检查 CNI 插件二进制文件:
检查 Pod CIDR 分配:
4.2 分析 CNI 插件工作原理
在这个实验中,我们将分析 CNI 插件的工作原理。
查看 kubelet 日志中与 CNI 相关的部分:
检查网络接口和路由:
检查 iptables 规则:
创建一个新的 Pod 并观察网络变化:
实验 5:网络策略
5.1 创建并测试网络策略
在这个实验中,我们将创建网络策略并测试其效果。注意:此实验需要支持网络策略的 CNI 插件(如 Calico)。
创建测试命名空间和 Pod:
测试连通性(所有客户端都应该能够访问服务器):
创建网络策略,只允许客户端 A 访问服务器:
再次测试连通性(只有客户端 A 应该能够访问服务器):
清理资源:
总结
通过以上实验,你应该对 Kubernetes 网络的工作原理有了更深入的理解。这些实验涵盖了 Pod 网络、Service 网络、Ingress 和 CNI 插件等核心概念,帮助你将理论知识应用到实践中。
在实际工作中,你可能会遇到更复杂的网络场景,如多集群网络、混合云网络等。建议你继续深入学习 Kubernetes 网络,探索更高级的主题。
返回首页