Day 10 - 网络策略与 CNI 原理
📘 Day 10:网络策略与 CNI 原理
🎯 今日目标
- 理解 Calico CNI 的基本原理
- 能创建 NetworkPolicy 实现 Pod 间访问控制
- 掌握 namespaceSelector 和 podSelector
- 能配置 ingress 和 egress 规则
- 能通过 NetworkPolicy 实现零信任网络
🧠 理论精讲(30 分钟)
CNI 工作流程
1 | 1. kubelet 创建 Pod → |
Calico 数据路径
1 | Pod-A (veth) ←→ Host-A (cali-xxx) ←→ BGP/IPIP ←→ Host-B (cali-yyy) ←→ Pod-B (veth) |
NetworkPolicy 核心概念
1 | # 默认规则:所有流量允许(无 NetworkPolicy 时) |
选择器组合
| 选择器 | 作用域 |
|---|---|
podSelector |
选 Pod |
namespaceSelector |
选命名空间 |
ipBlock |
选 IP CIDR |
🔧 动手实操(120 分钟)
练习 10.1:Deny-All 策略
1 | # 1. 创建测试命名空间和 Pod |
练习 10.2:精确允许 Ingress
1 | # 1. 只允许特定标签的 Pod 访问 web |
练习 10.3:namespaceSelector 跨命名空间控制
1 | # 1. 创建第二个命名空间 |
练习 10.4:Egress 出站控制
1 | # 1. 限制 Pod 只能访问特定外部地址 |
练习 10.5:ipBlock 白名单
1 | # 允许来自特定 IP 段的访问 |
🐛 排错练习(30 分钟)
场景:NetworkPolicy 导致服务不可用
1 | # 问题:创建 NetworkPolicy 后某些服务突然不可用 |
🏆 赛题模拟(40 分钟)
⚠️ 严格限时 40 分钟
题目:零信任网络策略
1 | 【初始环境】 |
🧹 环境清理
1 | kubectl delete ns netpol-test netpol-external |
📋 命令速查
| 命令 | 功能 | 注解 |
|---|---|---|
kubectl get networkpolicy |
列出所有 NetworkPolicy | short name: netpol |
kubectl get networkpolicy -o yaml |
查看 NetworkPolicy 详细规则 | 查看 podSelector、ingress/egress 规则、policyTypes |
kubectl describe networkpolicy <name> |
NetworkPolicy 详情 | 包含规则匹配的 Pod 和流向 |
kubectl get pods -n kube-system -l k8s-app=calico-node |
查看 Calico node Pod | Calico 在每个节点运行一个 agent |
kubectl -n kube-system logs -l k8s-app=calico-node --tail=50 |
查看 Calico 日志 | NetworkPolicy 不生效时首要排查 |
calicoctl get ippool -o wide |
查看 IP 地址池 | 确认 Pod CIDR 与 kubeadm init 一致 |
calicoctl get felixconfiguration |
查看 Calico Felix 配置 | Felix 是每个节点的策略执行引擎 |
calicoctl get networkpolicy |
查看 Calico 层面的网络策略 | 比 kubectl get netpol 更底层 |
kubectl run test --image=busybox --rm -it --labels="app=test" -- wget -O- --timeout=3 http://<svc> |
携带标签测试连通性 | NetworkPolicy 基于标签匹配,运行测试 Pod 时需带正确的 labels |
kubectl exec <pod> -- nc -zv <target-ip> <port> |
测试 TCP 端口通断 | 比 curl/wget 更底层的连通性测试 |
kubectl get nodes -o wide | awk '{print $6}' |
提取所有节点 CIDR | Calico IPAM 基于节点 CIDR 分配 Pod IP |
kubectl exec <pod> -- ip route |
查看 Pod 内路由表 | 理解 Pod 出站流量路径 |
📚 参考来源
| 来源 | 链接 / 说明 |
|---|---|
| Kubernetes 官方:NetworkPolicy | https://kubernetes.io/docs/concepts/services-networking/network-policies/ |
| Kubernetes 官方:声明 Network Policy | https://kubernetes.io/docs/tasks/administer-cluster/declare-network-policy/ |
| Calico 官方文档 | https://docs.tigera.io/calico/latest/about/ |
| Calico 网络策略指南 | https://docs.tigera.io/calico/latest/network-policy/ |
| CNI 规范 | https://github.com/containernetworking/cni/blob/master/SPEC.md |
| Calico IPAM 原理 | https://docs.tigera.io/calico/latest/networking/ipam/ |