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

112 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 资源状态
```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`
- `02-05-nginx-验证矩阵-一键部署.md`(入口与路由基线)
- `04-01-k3s-nodejs-高级部署.md`
- `scripts/README.md`
## 下一步
- 返回 00-00-构建总览.md按导航继续。
## 排障
- **先看 playbook 输出**:失败时先定位是 deploy/wait/http_check 哪一步。
- **集群侧总览**`kubectl get nodes -o wide``kubectl -n kube-system get pods -o wide`
- **事件与日志**`kubectl -n <ns> describe ...``kubectl -n <ns> logs ... --tail=200`