feat: CoreDNS IPv4 上游、03-03 Tomcat 修复、HAProxy 与验证脚本
- Ansible: 部署时自动配置 CoreDNS forward 为 IPv4,避免 ACME 解析失败 - 01-01/01-07: 文档增加 CoreDNS 设置说明 - 03-03: Tomcat webapps.dist 复制、HTTP/HTTPS 双 Ingress、显式 Dashboard IngressRoute - traefik-dashboard-acme: tomcat-acme.yaml、404 排查说明 - HAProxy: 健康检查与 PROXY 配置拆分,18080/18443 部署与验证脚本 Made-with: Cursor
This commit is contained in:
@@ -20,7 +20,7 @@ kubectl -n kube-system create secret generic cloudflare-api-token \
|
||||
|
||||
> 说明:Traefik 的 `HelmChartConfig` 只能有一份,Dashboard 与 ACME 需合并在同一文件中。**ACME 配置基于 03-03 实机验证**(递归 DNS、propagation 等待、ping、PROXY protocol、nodeSelector)。
|
||||
|
||||
创建 `traefik-dashboard-acme.yaml`,推荐放入 K3s manifests 目录(路径同 03-02)。**唯一真源**:[HelmChartConfig 完整 YAML](../../ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml),复制后替换 `<YOUR_REAL_EMAIL>` 等占位符;或在仓库根执行 `kubectl apply -f ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml`。
|
||||
创建 `traefik-dashboard-acme.yaml`,推荐放入 K3s manifests 目录(路径同 03-02)。**唯一真源**:[HelmChartConfig 完整 YAML](../ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml),复制后替换 `<YOUR_REAL_EMAIL>` 等占位符;或在仓库根执行 `kubectl apply -f ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml`。
|
||||
|
||||
> 将 `<YOUR_REAL_EMAIL>` 替换为你的邮箱。正式上线前删除 `caserver` 该行即切回生产 Let's Encrypt。**ACME 排障**(DNS 解析错误、证书解析器不存在等)见 `03-02-k3s-traefik-acme.md` 中「常见问题」与「排查」小节。
|
||||
|
||||
@@ -42,12 +42,29 @@ kubectl -n kube-system logs deploy/traefik --tail=100 | grep -i acme || true
|
||||
|
||||
## 4. 验证
|
||||
|
||||
**Dashboard 访问**(推荐经 IngressRoute,与 03-01 一致):
|
||||
|
||||
```bash
|
||||
# 经入口 IP 访问(直连节点或经 HAProxy 18080)
|
||||
curl -I http://192.168.2.61/dashboard/
|
||||
# 或经 HAProxy:http://<OpenWrt-IP>:18080/dashboard/
|
||||
# 浏览器打开上述地址
|
||||
```
|
||||
|
||||
若 80 由 HAProxy 18080 代理,使用 `http://<OpenWrt-IP>:18080/dashboard/` 即可。
|
||||
|
||||
**备选**:端口转发(需在可执行 kubectl 且与浏览器同机时使用):
|
||||
|
||||
```bash
|
||||
# Dashboard:临时端口转发访问
|
||||
kubectl -n kube-system port-forward deploy/traefik 9000:9000
|
||||
# 浏览器打开 http://127.0.0.1:9000/dashboard/
|
||||
```
|
||||
|
||||
# ACME 日志
|
||||
> **9000 不可达时**:优先用 IngressRoute 路径 `/dashboard/`。部分 Traefik/Helm 版本可能将 dashboard 放在 8080,可尝试 `port-forward ... 8080:8080`。
|
||||
|
||||
**ACME 日志**:
|
||||
|
||||
```bash
|
||||
kubectl -n kube-system logs deploy/traefik --tail=100 | grep -i acme
|
||||
```
|
||||
|
||||
@@ -59,12 +76,12 @@ kubectl -n kube-system logs deploy/traefik --tail=100 | grep -i acme
|
||||
|
||||
> 本节给出一个**完整、独立**的 Tomcat 示例:包含 Deployment + Service + Ingress(三段 YAML),域名为 `test05.jackadam.top`。前提是已经按本页前文配置并成功加载了 ACME(`traefik-acme.yaml` 或 `traefik-dashboard-acme.yaml`)。
|
||||
|
||||
1. **唯一真源**:[`ansible/files/traefik-dashboard-acme/tomcat-acme-test05.yaml`](../../ansible/files/traefik-dashboard-acme/tomcat-acme-test05.yaml)。将其中域名改成你实际解析到集群入口 IP 的 FQDN。
|
||||
1. **唯一真源**:[`ansible/files/traefik-dashboard-acme/tomcat-acme.yaml`](../ansible/files/traefik-dashboard-acme/tomcat-acme.yaml)。将其中域名改成你实际解析到集群入口 IP 的 FQDN。
|
||||
|
||||
2. 应用并查看 ACME 日志 + 访问验证:
|
||||
|
||||
```bash
|
||||
kubectl apply -f ansible/files/traefik-dashboard-acme/tomcat-acme-test05.yaml
|
||||
kubectl apply -f ansible/files/traefik-dashboard-acme/tomcat-acme.yaml
|
||||
|
||||
# 查看 ACME 相关日志(证书申请、签发情况)
|
||||
kubectl -n kube-system logs deploy/traefik --tail=200 | grep -i acme || true
|
||||
@@ -75,6 +92,21 @@ curl -Iv https://test05.jackadam.top --resolve test05.jackadam.top:443:192.168.2
|
||||
|
||||
若 ACME 与 Cloudflare 配置正确,Traefik 日志中将看到针对 `test05.jackadam.top` 的证书申请与成功信息;`curl -Iv` 输出中应展示 Let's Encrypt 证书,浏览器访问 `https://test05.jackadam.top` 时会看到 Tomcat 默认首页。
|
||||
|
||||
**Tomcat 404 排查**:
|
||||
|
||||
- **区分是谁返回 404**:页面只有简短英文 **「404 page not found」**、无「Apache Tomcat」字样 → 多为 **Traefik** 未匹配到路由(Ingress 未生效、Host 不对、或需 `ingressClassName: traefik`)。页面带 **Tomcat** 说明 → 已到后端,多为 **webapps 未从 webapps.dist 复制**(模板已用 `cp -a webapps.dist/. webapps/` 修复,请重新 apply 并重建 Pod)。
|
||||
- **Ingress**:`kubectl describe ingress tomcat-test05-acme -n default`,确认 ADDRESS、规则与 Traefik 已加载。
|
||||
- **直连集群 443 验证**(绕过 HAProxy):`curl -Iv https://test05.jackadam.top --resolve test05.jackadam.top:443:192.168.2.61`(IP 换为任一 K3s 节点)。
|
||||
|
||||
| 现象 | 原因 | 处理 |
|
||||
|------|------|------|
|
||||
| 404 | 使用 `http://` 访问 18443 | 18443 是 HTTPS,必须用 `https://test05.jackadam.top:18443/` |
|
||||
| 404 | 域名未解析到 HAProxy | 确保 `test05.jackadam.top` 解析到 OpenWrt/HAProxy IP(或内网用 hosts) |
|
||||
| 404 | Pod/Ingress 未就绪 | `kubectl get pods -l app=tomcat-test05`、`kubectl get ingress tomcat-test05-acme` |
|
||||
| 404 | ACME 证书未签发 | `kubectl -n kube-system logs deploy/traefik --tail=200 \| grep -i acme` 查看申请日志 |
|
||||
|
||||
经 HAProxy 18080/18443 访问时,URL 为 `https://test05.jackadam.top:18443/`(不是 http)。
|
||||
|
||||
---
|
||||
|
||||
## 6. 删除部署与文件
|
||||
|
||||
Reference in New Issue
Block a user