基本框架

This commit is contained in:
2026-03-21 04:36:06 +08:00
commit de1be1dbe5
125 changed files with 10302 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
# 04-12-nodejs-TLS与证书
> 为 `nodejs-demo` 的 **Ingress** 启用 **HTTPS**`spec.tls` + 证书 **Secret**。集群侧 Traefik **ACME 自动证书** 以 [`03-02-k3s-traefik-acme.md`](03-02-k3s-traefik-acme.md) 为主;本篇侧重 **应用 Ingress 如何声明 TLS** 与验证。
## 前置条件
- 已完成 `03-02`推荐Traefik 已配置 `websecure` 与证书解析器;或你已手动/其他方式准备好 TLS Secret。
- 已能 **从客户端访问** 到 Traefik 的 443或你环境中的 HTTPS 入口)。
## 清单路径(唯一真源)
| 本篇完整清单Ingress 已切 **websecure** + `spec.tls`**不含** Secret 内容) | [`ansible/files/nodejs-demo/04-12-nodejs-demo.yaml`](../ansible/files/nodejs-demo/04-12-nodejs-demo.yaml) |
| 应用 | 先创建 TLS Secret见下`kubectl apply -f ansible/files/nodejs-demo/04-12-nodejs-demo.yaml` |
**证书 Secret**:使用命令创建(不提交私钥到 Git
```bash
kubectl create secret tls nodejs-demo-tls \
--cert=path/to/fullchain.pem \
--key=path/to/privkey.pem \
-n default
```
`spec.tls.hosts` / `rules.host` 须与证书 SAN 一致(清单默认为 **app.example.local**)。
## 场景说明(白话)
- **集群怎么收 HTTPS**:多半由 Traefik 终结 TLS`03-02`);应用侧要在 Ingress 上声明「用哪个证书、哪个域名」。
- **Secret 里有什么**:通常是 **`tls.crt`(完整链)** + **`tls.key`(私钥)**,类型为 `kubernetes.io/tls`
### 相对 `04-11` 的变更(原文 → 新文)
| 位置 | 原文(`04-11` | 新文(`04-12` |
|------|-----------------|-----------------|
| Ingress 注解 `router.entrypoints` | `web` | `websecure` |
| Ingress `spec.tls` | (无) | `hosts: [app.example.local]``secretName: nodejs-demo-tls` |
若使用 **ACME**Secret 可能由 cert-manager 或 Traefik 自动生成;此时 `secretName` 填控制器生成的名称即可。
## 验证
```bash
kubectl describe ing nodejs-demo -n default
curl -vk --max-time 5 https://app.example.local/api/
```
预期TLS 握手成功;证书 CN/SAN 与域名匹配(自签或测试环境会有告警属正常)。
## HTTP 重定向
可由 Traefik 全局中间件或 Ingress 注解实现 `web``websecure`;细节见 `03-02` / Traefik 文档。
## 失败排查
- **证书不匹配**Secret 中证书与 `rules.host` 不一致。
- **default backend 404**`router.entrypoints` 与 Traefik 监听不一致;或仍走 `web` 访问 HTTPS 路径。
- `06-01-k3s-networkpolicy-故障排查.md`
- 集群证书:`03-02-k3s-traefik-acme.md``03-03-k3s-traefik-dashboard-acme.md`
## 相关文档
- [`04-10-nodejs-Ingress与Traefik.md`](04-10-nodejs-Ingress与Traefik.md)
- [`04-01-k3s-nodejs-高级部署.md`](04-01-k3s-nodejs-高级部署.md)