3.3 KiB
3.3 KiB
04-12-nodejs-TLS与证书
为
nodejs-demo的 Ingress 启用 HTTPS:spec.tls+ 证书 Secret。集群侧 Traefik ACME 自动证书 以03-02-k3s-traefik-acme.md为主;本篇侧重 应用 Ingress 如何声明 TLS 与验证。
TL;DR
- 自动化验收:
./scripts/verify.sh run 04-12 - 关键前置:按本文「前置条件」准备环境变量/Secret/入口 IP
- 成功判据:达到本文「预期」且 playbook 断言通过
- 排障:见本文「排障」
前置条件
- 已完成
03-02(推荐):Traefik 已配置websecure与证书解析器;或你已手动/其他方式准备好 TLS Secret。 - 已能 从客户端访问 到 Traefik 的 443(或你环境中的 HTTPS 入口)。
清单路径(唯一真源)
| 本篇完整清单(Ingress 已切 websecure + spec.tls;不含 Secret 内容) | ansible/files/04-01/04-12-nodejs-demo.yaml |
| 应用 | 先创建 TLS Secret(见下),再 kubectl apply -f ansible/files/04-01/04-12-nodejs-demo.yaml |
证书 Secret:使用命令创建(不提交私钥到 Git):
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 填控制器生成的名称即可。
验证
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
相关文档
排障
- 先看 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。