Appearance
Ingress流量管理
**本文引用的文件** - [baremetal-nginx-ingress.yaml](file://lemes-cloud/src/devops/k8s/baremetal-nginx-ingress.yaml) - [ingress-real-ip.yaml](file://lemes-cloud/src/devops/k8s/ingress-real-ip.yaml) - [gateway-ingress.yaml](file://lemes-cloud/src/devops/console/k8s/template/gateway-ingress.yaml) - [lemes-web.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-web.yaml) - [seaweedfs-ingress.yaml](file://lemes-cloud/src/devops/k8s/service/base/seaweedfs-ingress.yaml) - [secret.yaml](file://lemes-cloud/src/devops/k8s/service/base/secret.yaml) - [baseUrl.js](file://app/devicemate-app/config/baseUrl.js) - [request.js](file://app/devicemate-app/config/request.js) - [vue.config.js](file://app/devicemate-app/vue.config.js)目录
简介
本文件面向DeviceMate项目的Ingress流量管理,系统性阐述Nginx Ingress控制器的安装与配置、IngressClass与注解策略、TLS证书管理(含Secret创建与证书链)、路由规则(路径/主机名/重写)、中间件能力(限流/认证/CORS)以及HTTPS最佳实践(证书部署、HTTP/2与安全头部)。同时提供可直接参考的Ingress YAML示例与性能优化建议,帮助运维与开发团队在生产环境中稳定、安全地交付流量。
项目结构
DeviceMate的Ingress相关配置主要分布在以下位置:
- 控制器安装与RBAC:lemes-cloud/src/devops/k8s/baremetal-nginx-ingress.yaml
- 控制器运行参数与IngressClass:同上文件中的Deployment与args
- 实际业务Ingress示例:lemes-cloud/src/devops/console/k8s/template/*.yaml
- TLS证书Secret:lemes-cloud/src/devops/k8s/service/base/secret.yaml
- 客户端访问入口与代理配置:app/devicemate-app/config/*.js 与 app/devicemate-app/vue.config.js
图示来源
- baremetal-nginx-ingress.yaml:292-403
- gateway-ingress.yaml:19-42
- lemes-web.yaml:64-80
- seaweedfs-ingress.yaml:17-39
- ingress-real-ip.yaml:1-45
- secret.yaml:1-15
章节来源
- baremetal-nginx-ingress.yaml:1-654
- ingress-real-ip.yaml:1-45
- gateway-ingress.yaml:1-89
- lemes-web.yaml:1-80
- seaweedfs-ingress.yaml:1-39
- secret.yaml:1-15
核心组件
- Nginx Ingress控制器
- 通过Deployment运行,使用IngressClass“nginx”,并挂载证书Secret用于HTTPS。
- 默认监听80/443端口,可通过NodePort对外暴露。
- ConfigMap控制器配置
- 启用转发头计算、允许snippet注解、使用X-Forwarded-For等,确保后端能正确识别客户端真实IP。
- 业务Ingress
- lemes-gateway-ig:将前缀“/lemes-api”转发至网关服务,并设置超时与上传大小限制。
- lemes-web-ig:根路径“/”转发至Web服务。
- lemes-seaweedfs-ig:将“/lemes-oss”前缀转发至网关,实现OSS访问代理。
- TLS证书
- 使用Secret存储tls.crt与tls.key,供Ingress控制器加载以启用HTTPS。
章节来源
- baremetal-nginx-ingress.yaml:292-403
- ingress-real-ip.yaml:1-45
- gateway-ingress.yaml:19-42
- lemes-web.yaml:64-80
- seaweedfs-ingress.yaml:17-39
- secret.yaml:1-15
架构总览
下图展示从客户端到后端服务的完整流量路径,包括Ingress控制器、转发头处理与TLS终止:
图示来源
详细组件分析
Nginx Ingress控制器安装与IngressClass
- 安装要点
- 创建命名空间、ServiceAccount、ClusterRole/Role与绑定。
- 部署Service(NodePort暴露80/443)与Deployment(控制器镜像与args)。
- args中指定IngressClass为“nginx”,并挂载Webhook证书Secret。
- IngressClass
- 通过Deployment的启动参数设置,确保Ingress资源仅被该控制器处理。
- RBAC与准入控制
- 允许控制器读取ConfigMap、Secret、Endpoints等;启用ValidatingWebhook以校验Ingress合法性。
图示来源
章节来源
负载均衡与转发头(真实IP)
- 关键配置
- 在ConfigMap中开启“use-forwarded-headers”、“compute-full-forwarded-for”、“forwarded-for-header”等,使控制器在请求头中注入或透传X-Forwarded-For。
- 业务侧(如网关)据此解析真实客户端IP,便于审计与风控。
- 影响范围
- 所有经由该Ingress控制器的流量均受此影响。
图示来源
章节来源
路由规则与重写
- 前缀匹配
- lemes-gateway-ig:将“/lemes-api”前缀转发至网关服务,适合API聚合场景。
- lemes-web-ig:将“/”根路径转发至Web服务,适合静态站点或SPA。
- lemes-seaweedfs-ig:将“/lemes-oss”前缀转发至网关,再由网关内部重写到具体OSS接口。
- 重写规则
- 通过注解设置“rewrite-target”,实现路径重写,常用于多服务共享同一前缀的场景。
- 主机名匹配
- 当前示例未配置host字段,若需按域名分发,可在Ingress.spec.rules[*].host中添加。
图示来源
章节来源
注解配置(超时/上传大小/重写)
- 常用注解
- 代理连接/发送/读取超时:提升长连接与大文件传输稳定性。
- 代理body大小:避免上传过大导致失败。
- rewrite-target:实现路径重写,常配合前缀路由使用。
- 示例来源
- 网关Ingress示例展示了上述注解的典型用法。
章节来源
TLS证书管理(Secret创建与证书链)
- Secret结构
- 类型为kubernetes.io/tls,包含tls.crt与tls.key两个密钥。
- 可通过kubectl create secret tls命令或直接声明Secret资源创建。
- 证书链与自动续期
- 仓库中提供了Secret样例,但未包含自动签发/续期的Cert-Manager或类似机制配置。若需自动化,建议引入证书管理器并在Ingress中引用对应的证书资源。
- Ingress与Secret关联
- Ingress可引用TLS块中的secretName,控制器加载Secret以终止TLS。
图示来源
章节来源
中间件能力(限流/认证/CORS)
- 限流
- 可通过注解实现基于IP或路径的速率限制,建议结合IngressClass与第三方插件使用。
- 认证
- 支持Basic Auth或OIDC等认证方式,通常通过注解或专用Ingress扩展实现。
- CORS
- 可通过注解设置Access-Control-Allow-*头,或在后端服务统一处理。
- 注意
- 上述能力在当前仓库示例中未直接体现,建议结合业务需求在Ingress注解或后端服务中补充。
(本节为通用指导,不直接分析具体文件)
HTTPS配置指南(证书部署/HTTP/2/安全头部)
- 证书部署
- 使用kubernetes.io/tls类型的Secret,Ingress引用其secretName。
- HTTP/2
- 控制器默认启用HTTP/2,无需额外配置;如需禁用,可在ConfigMap中调整。
- 安全头部
- 可通过注解设置Security Headers(如Strict-Transport-Security、X-Content-Type-Options等),增强安全性。
- 客户端访问
- 前端通过相对路径访问后端API,开发环境使用本地代理将/lemes-api重写到后端。
章节来源
依赖关系分析
- 控制器依赖
- ServiceAccount与RBAC赋予控制器读取集群资源的能力。
- ConfigMap控制转发头与snippet注解等行为。
- Secret提供TLS证书,用于HTTPS终止。
- 业务依赖
- Ingress依赖对应Service(如lemes-gateway-svc、lemes-web-svc)。
- 前端通过相对路径与代理配置访问后端API。
图示来源
章节来源
性能考量
- 连接与超时
- 对长连接或大文件场景,适当提高proxy-connect-timeout、proxy-send-timeout、proxy-read-timeout与proxy-body-size。
- 负载均衡
- 合理设置副本数与资源请求,避免单点瓶颈;必要时启用亲和性与拓扑感知。
- 缓存与压缩
- 启用gzip/deflate与静态资源缓存,减少带宽占用。
- 健康检查
- 配置liveness/readiness探针,确保快速剔除不健康实例。
- 日志与监控
- 开启访问日志与指标导出,结合Prometheus/Grafana进行观测。
(本节为通用指导,不直接分析具体文件)
故障排查指南
- 无法解析真实IP
- 检查ConfigMap是否开启use-forwarded-headers与compute-full-forwarded-for。
- 证书加载失败
- 确认Secret类型为kubernetes.io/tls且包含tls.crt与tls.key;Ingress是否正确引用secretName。
- 路由不生效
- 确认IngressClass为nginx;检查Ingress注解语法与路径匹配规则。
- 超时或上传失败
- 检查proxy超时与body大小注解;确认后端服务处理能力。
- 前端跨域问题
- 在Ingress注解中设置CORS头,或在后端统一处理。
章节来源
结论
DeviceMate的Ingress流量管理以Nginx Ingress为核心,通过明确的IngressClass、合理的注解配置与TLS Secret,实现了对多业务路径的统一接入与安全终止。结合转发头配置与后端服务,可有效支撑真实IP识别与API聚合。建议后续引入证书自动化与中间件能力(限流/认证/CORS),并持续优化超时与缓存策略,以满足生产环境的高可用与高性能要求。
附录
- 实际可参考的Ingress YAML示例
- 网关Ingress:gateway-ingress.yaml:19-42
- Web Ingress:lemes-web.yaml:64-80
- OSS代理Ingress:seaweedfs-ingress.yaml:17-39
- 控制器安装与参数
- 控制器安装与IngressClass:baremetal-nginx-ingress.yaml:292-403
- TLS证书
- Secret样例:secret.yaml:1-15
- 前端访问配置
- 基础URL与请求配置:baseUrl.js:1-11、request.js:39-92
- 本地代理与路径重写:vue.config.js:1-53