对齐文件规范

This commit is contained in:
2026-03-27 16:58:41 +08:00
parent 231b6713c4
commit 31709425e2
235 changed files with 5433 additions and 2850 deletions

View File

@@ -0,0 +1,85 @@
# 04-07-nodejs-Ingress与Traefik
> 在 K3s 默认 **Traefik** 下,为 `nodejs-demo` 调整 **路径、主机名、入口点**;并了解标准 `Ingress` 与 **IngressRoute**CRD的差异入口。
## TL;DR
- **自动化验收**`./scripts/verify.sh run 04-07`
- **关键前置**:按本文「前置条件」准备环境变量/Secret/入口 IP
- **成功判据**:达到本文「预期」且 playbook 断言通过
- **排障**:见本文「排障」
## 前置条件
- 已部署 `04-01` 中的 `Ingress`;可选:`03-01-k3s-traefik-dashboard.md` 观察路由。
## 清单路径(唯一真源)
| 本篇完整清单(含 Ingress `host` + `/api` | [`ansible/files/04-01/04-07-nodejs-demo.yaml`](../ansible/files/04-01/04-07-nodejs-demo.yaml) |
| 应用 | `kubectl apply -f ansible/files/04-01/04-07-nodejs-demo.yaml` |
`host` / `path` 可按环境修改清单;`curl` 用 IP 访问时需带 **`Host`** 头。
## 场景说明(白话)
- **Ingress**:告诉 Traefik「哪个域名、哪条 URL 转到哪个 Service」。
- **`router.entrypoints: web`**:走集群里 Traefik 的 **HTTP 入口**(名字一般是 `web`)。
- **和 HTTPS 的关系**:要上证书、走 443通常改用 **`websecure`**,见 [`04-12-nodejs-TLS与证书.md`](04-12-nodejs-TLS与证书.md)。
## 04-01 对照
- 注解 `traefik.ingress.kubernetes.io/router.entrypoints: web` 将路由绑定到 **HTTP** 入口(常见名 `web`)。
- HTTPS 入口通常为 **`websecure`**,与 TLS 配合见 `04-12`
### 相对 `04-06` 的变更(原文 → 新文)
| 位置 | 原文(`04-06` | 新文(`04-07` |
|------|-----------------|-----------------|
| Ingress `spec.rules` | 仅 `http.paths`,无 `host`path `/node` | `host: app.example.local`path **`/api`** |
**注意**:这与 `04-01` **只有 path、没有 host** 的写法不同;用 IP 访问必须带 **`Host: app.example.local`**。
## pathType 说明
- `Prefix`:前缀匹配(常用)。
- `ImplementationSpecific`由控制器解释Traefik 有特定行为时需查官方文档。
## IngressRouteCRD
Traefik 原生 CRD 可做中间件、多规则组合等;集群需已安装对应 CRD。与标准 `Ingress` 二选一或并存时注意不要 **重复暴露同一路径** 导致冲突。
## 部署与验证
```bash
kubectl apply -f ansible/files/04-01/04-07-nodejs-demo.yaml
kubectl describe ing nodejs-demo -n default
# --- 情况 A仍是 04-01 的 Ingress无 rules.hostpath=/node---
# 用节点 IP 直接访问即可,一般不需要 Host 头:
curl -s -o /dev/null -w "%{http_code}\n" --max-time 3 http://<节点IP>/node/
# --- 情况 B已换成上文示例有 host=app.example.localpath=/api---
# 用 IP 访问时必须带 Host且路径改为 /api与 path 一致):
curl -s -o /dev/null -w "%{http_code}\n" --max-time 3 \
-H "Host: app.example.local" \
"http://<节点IP>/api/"
```
## 失败排查
- **404**:路径/host 与规则不一致Traefik 未加载该 Ingressnamespace、ingressClass
- **502**Service 无 Endpoints`04-02` 端口对齐、`04-05` 探针与 Endpoints
- `06-01-k3s-networkpolicy-故障排查.md`
- 集群级 Traefik`03-01``03-02`
## 相关文档
- [`04-12-nodejs-TLS与证书.md`](04-12-nodejs-TLS与证书.md)
- [`04-02-nodejs-端口与Service.md`](04-02-nodejs-端口与Service.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`