Files
Deploy-Laboratory/docs/04-07-nodejs-Ingress与Traefik.md
2026-03-29 09:08:01 +08:00

3.8 KiB
Raw Permalink Blame History

04-07-nodejs-Ingress与Traefik

在 K3s 默认 Traefik 下,为 nodejs-demo 调整 路径、主机名、入口点;并了解标准 IngressIngressRouteCRD的差异入口。

TL;DR

  • 手动练习:复制本课目录 ansible/files/04-07/ 下清单到目标路径,按需改字段后按本文 kubectl/bash 操作(学习路径可不使用 verify
  • 自动化验收./ansible/bin/verify.sh run 04-07
  • 关键前置:按本文「前置条件」准备环境变量/Secret/入口 IP
  • 成功判据:达到本文「预期」且 playbook 断言通过
  • 排障:见本文「排障」

前置条件

  • 已部署 04-01 中的 Ingress;可选:03-01-k3s-traefik-dashboard.md 观察路由。

清单路径(本课分目录)

| 本篇完整清单(含 Ingress host + /api | ansible/files/04-07/04-07-nodejs-demo.yaml | | 应用 | kubectl apply -f ansible/files/04-07/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-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,无 hostpath /node host: app.example.localpath /api

注意:这与 04-01 只有 path、没有 host 的写法不同;用 IP 访问必须带 Host: app.example.local

pathType 说明

  • Prefix:前缀匹配(常用)。
  • ImplementationSpecific由控制器解释Traefik 有特定行为时需查官方文档。

IngressRouteCRD

Traefik 原生 CRD 可做中间件、多规则组合等;集群需已安装对应 CRD。与标准 Ingress 二选一或并存时注意不要 重复暴露同一路径 导致冲突。

部署与验证

kubectl apply -f ansible/files/04-07/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
  • 502Service 无 Endpoints04-02 端口对齐、04-05 探针与 Endpoints
  • 06-01-k3s-networkpolicy-故障排查.md
  • 集群级 Traefik03-0103-02

相关文档

排障

  • 先看 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