Files
Deploy-Laboratory/docs/06-01-k3s-networkpolicy-故障排查.md
2026-03-27 16:58:41 +08:00

3.0 KiB
Raw Blame History

06-01-k3s NetworkPolicy 使用与故障排查

本文只负责 网络策略与连通性排障。 若你要做 Traefik 部署、ServiceLB 池配置,请看 01-02-k3s-工作节点.md

TL;DR

  • 自动化验收./scripts/verify.sh run 06-01
  • 关键前置:按本文「前置条件」准备环境变量/Secret/入口 IP
  • 成功判据:达到本文「预期」且 playbook 断言通过
  • 排障:见本文「排障」

前置条件

  • 已完成 01-02-k3s-工作节点.md
  • 已有至少一个后端服务(如 nginx/nodejs
  • 可执行 kubectl

三条先验结论

  1. 主链路看 Traefik -> Service,不是 Pod IP 直连。
  2. Pod 被 NetworkPolicy 选中后,该方向默认拒绝,需显式放行。
  3. 跨节点不通通常是“策略 + 主机防火墙 + 回包路径”叠加问题。

标准排查步骤

2.1 资源状态

kubectl get pod,svc,ing -A

2.2 入口可达性

curl -I --max-time 3 http://192.168.2.61:80
curl -I --max-time 3 http://192.168.2.62:80

2.3 快速检查命令

kubectl get pod,svc,ing -A
kubectl get networkpolicy -A
kubectl -n kube-system get pods -l app=svclb-traefik -o wide

2.4 全链路检查(手工)

# 从入口节点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 CIDR10.43.0.0/16
    • DNS53/udp53/tcp
  • 后端 ingress 策略要匹配 Traefik 来源(命名空间或 IP 段)

已验证修复Fedora/FCOS

4.1 手动修复

# 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
  • 02-05-nginx-验证矩阵-一键部署.md(入口与路由基线)
  • 04-01-k3s-nodejs-高级部署.md
  • scripts/README.md

下一步

  • 返回 00-00-构建总览.md按导航继续。

排障

  • 先看 playbook 输出:失败时先定位是 deploy/wait/http_check 哪一步。
  • 集群侧总览kubectl get nodes -o widekubectl -n kube-system get pods -o wide
  • 事件与日志kubectl -n <ns> describe ...kubectl -n <ns> logs ... --tail=200