# 06-01-k3s NetworkPolicy 使用与故障排查 > 本文只负责 **网络策略与连通性排障**。 > 若你要做 Traefik 部署、ServiceLB 池配置,请看 `01-02-k3s-工作节点.md`。 ## 前置条件 - 已完成 `01-02-k3s-工作节点.md` - 已有至少一个后端服务(如 nginx/nodejs) - 可执行 `kubectl` ## 三条先验结论 1. 主链路看 **Traefik -> Service**,不是 Pod IP 直连。 2. Pod 被 NetworkPolicy 选中后,该方向默认拒绝,需显式放行。 3. 跨节点不通通常是“策略 + 主机防火墙 + 回包路径”叠加问题。 ## 标准排查步骤 ### 2.1 资源状态 ```bash kubectl get pod,svc,ing -A ``` ### 2.2 入口可达性 ```bash curl -I --max-time 3 http://192.168.2.61:80 curl -I --max-time 3 http://192.168.2.62:80 ``` ### 2.3 快速检查命令 ```bash kubectl get pod,svc,ing -A kubectl get networkpolicy -A kubectl -n kube-system get pods -l app=svclb-traefik -o wide ``` ### 2.4 全链路检查(手工) ```bash # 从入口节点IP验证 HTTP 入口 curl -I --max-time 3 http://192.168.2.61:80 curl -I --max-time 3 http://192.168.2.62:80 ``` ## 关键策略建议 - Traefik egress 建议同时放行: - 目标命名空间后端端口 - Service CIDR(如 `10.43.0.0/16`) - DNS(`53/udp`、`53/tcp`) - 后端 ingress 策略要匹配 Traefik 来源(命名空间或 IP 段) ## 已验证修复(Fedora/FCOS) ### 4.1 手动修复 ```bash # 1) 临时生效(当前运行时) sudo firewall-cmd --zone=trusted --add-interface=flannel.1 sudo firewall-cmd --zone=trusted --add-interface=cni0 # 2) 持久化 sudo firewall-cmd --permanent --zone=trusted --add-interface=flannel.1 sudo firewall-cmd --permanent --zone=trusted --add-interface=cni0 # 3) 重载配置 sudo firewall-cmd --reload # 4) 验证 sudo firewall-cmd --zone=trusted --list-interfaces sudo firewall-cmd --get-active-zones ``` 预期:`trusted` 区域中能看到 `flannel.1 cni0`,跨节点回包不再被 `admin-prohibited` 拦截。 ## 本文不处理的内容 以下属于部署配置域,请转到 `01-02-k3s-工作节点.md`: - Traefik 节点标签与 `lbpool` 设计 - HelmChartConfig 配置写入方式 - Dashboard/ACME 等功能配置 ## 关联文档 - `01-02-k3s-工作节点.md` - `04-03-k3s-nginx-demo.md` - `04-01-k3s-nodejs-高级部署.md` - `scripts/README.md` ## 下一步 - 返回 00-00-构建总览.md,按导航继续。