Files
Deploy-Laboratory/docs/04-12-nodejs-TLS与证书.md
2026-03-27 16:58:41 +08:00

3.3 KiB
Raw Blame History

04-12-nodejs-TLS与证书

nodejs-demoIngress 启用 HTTPSspec.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 终结 TLS03-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

若使用 ACMESecret 可能由 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 注解实现 webwebsecure;细节见 03-02 / Traefik 文档。

失败排查

  • 证书不匹配Secret 中证书与 rules.host 不一致。
  • default backend 404router.entrypoints 与 Traefik 监听不一致;或仍走 web 访问 HTTPS 路径。
  • 06-01-k3s-networkpolicy-故障排查.md
  • 集群证书:03-02-k3s-traefik-acme.md03-03-k3s-traefik-dashboard-acme.md

相关文档

排障

  • 先看 playbook 输出:失败时先定位是 deploy/wait/http_check 哪一步。
  • 集群侧总览kubectl get nodes -o widekubectl -n kube-system get pods -o wide
  • 事件与日志kubectl -n <ns> describe ...kubectl -n <ns> logs ... --tail=200