Files
Deploy-Laboratory/docs/04-12-nodejs-TLS与证书.md
jack 8c43761962 feat: 按 doc_id 重组 ansible/files 与验证框架
- ansible/files 改为与文档 XX-YY 对齐的目录结构,更新相关 playbook 路径
- 新增 scripts/verify.sh 与 ansible/playbooks/verify/*.yml,移除单体 verify-matrix.yml
- 补充 docs/00-02 矩阵状态、00-05 验证框架与流程、00-04 环境与 ylc65 工作机说明
- 增加 k3s 存储准备、Longhorn、local-path 等 playbook 与辅助脚本

Made-with: Cursor
2026-03-26 07:01:14 +08:00

64 lines
2.8 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.
# 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/04-01-nodejs-demo/04-12-nodejs-demo.yaml`](../ansible/files/04-01-nodejs-demo/04-12-nodejs-demo.yaml) |
| 应用 | 先创建 TLS Secret见下`kubectl apply -f ansible/files/04-01-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)