一、整体架构
用户 → 云厂商SLB(四层负载均衡)
→ Ingress-Nginx 集群(七层网关入口)
域名路由、HTTPS、限流、安全、灰度、IP白名单
→ 微服务 ClusterIP Service
服务发现、内部负载均衡
→ Pod 副本组
这套配置解决的核心问题:
- 外部统一入口,不用每个服务开端口
- HTTPS 自动证书,不用手动续期
- 安全、限流、防攻击
- 灰度发布,上线不宕机
- 真实 IP 透传、日志可追溯
- 监控可观测、可告警
二、逐步详细作用
1)安装 Ingress-Nginx 控制器
命令
bash
kubectl apply -f ...deploy.yaml
作用
- 在 K8s 里部署 官方 Nginx 网关集群
- 负责处理所有 7 层 HTTP/HTTPS 流量
- 实现域名路由、负载均衡、反向代理
不装会怎样
- 无法统一域名入口
- 每个服务只能用 NodePort/LoadBalancer,端口混乱、不安全
2)给 Ingress 控制器设置资源限制
yaml
resources:
limits:
cpu: 1000m
memory: 1Gi
作用
- 限制网关占用的 CPU/内存
- 防止网关占满节点资源导致雪崩
- 保证高并发下稳定运行
不配会怎样
- 流量高峰时 OOM 杀死网关
- 整个平台对外入口宕机
三、安装 cert-manager(HTTPS 自动证书)
3.1 安装 CRD
作用
- 让 K8s 支持证书资源类型
- 自动向 Let's Encrypt 申请免费 SSL 证书
- 到期自动续期,不用人工维护
3.2 创建 ClusterIssuer
yaml
acme:
server: https://acme-v02.api.letsencrypt.org/directory
作用
- 指定证书颁发机构(Let's Encrypt 生产环境)
- http01 校验域名所有权
- 签发后自动保存为 K8s Secret
不配会怎样
- 必须手动买证书、手动上传、每年更新
- 容易过期导致全站 HTTPS 报错、业务不可用
四、微服务标准 Deployment + Service
4.1 Deployment
作用
- 管理 Pod 副本数(2 个实例高可用)
- 滚动更新、自动重启、自愈
- 健康检查( readinessProbe )
4.2 Service(ClusterIP)
作用
- 给一组 Pod 提供固定内部域名 + 固定IP
- 实现 K8s 服务发现
- 实现 内部四层负载均衡
不配 Service 会怎样
- Pod IP 漂移后无法访问
- 服务之间无法互相调用
- 无法接入 Ingress
五、企业级 Ingress 配置(核心中的核心)
5.1 基础标识
yaml
kubernetes.io/ingress.class: "nginx"
- 告诉 K8s 用 Ingress-Nginx 处理这条规则
5.2 正则 + URL 重写(企业必用)
yaml
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
作用
- 支持
/user/info→ 转发到服务/info - 统一网关前缀,服务内部不用带前缀
- 微服务架构标准路由模式
5.3 HTTPS 强制跳转 + HSTS
yaml
ssl-redirect: "true"
hsts: "true"
作用
- 强制 HTTP → HTTPS
- HSTS 告诉浏览器永远走 HTTPS
- 满足等保、安全合规要求
5.4 文件上传大小
yaml
proxy-body-size: "200m"
作用
- 默认只有 1M,上传文件会报 413
- 企业后台、图片、导入导出必须开大
5.5 超时控制
yaml
proxy-connect-timeout: "5"
proxy-read-timeout: "30"
作用
- 防止慢请求占连接
- 防止攻击、防止服务夯住
- 保护网关与后端服务稳定
5.6 真实 IP 透传(超级重要)
yaml
proxy-set-header:
X-Real-IP $remote_addr
X-Forwarded-For $proxy_add_x_forwarded_for
作用
- 让后端服务拿到真实用户IP
- 否则日志全是网关IP
- 风控、限流、审计都依赖它
5.7 限流(防刷、防爬虫、防CC)
yaml
limit-rps: 200
limit-connections: 100
作用
- 单 IP 每秒最多 200 请求
- 单 IP 最多 100 并发
- 公网业务必备防攻击
5.8 跨域 CORS
yaml
enable-cors: "true"
作用
- 前端 Vue/React 直接调用,不再跨域
- 统一在网关控制,不用每个服务配
5.9 安全防护头
yaml
xss-protection: "1; mode=block"
frame-options: "DENY"
server-tokens: "false"
作用
- 防 XSS 注入
- 防 iframe 嵌套点击劫持
- 隐藏 Nginx 版本,避免被攻击
- 安全扫描必过项
六、HTTPS 证书配置
yaml
tls:
- hosts:
- api.company.com
secretName: tls-cert-company
作用
- 网关开启 HTTPS
- cert-manager 自动匹配域名签发证书
七、路由规则 rules
yaml
- host: api.company.com
http:
paths:
- path: /user/(.*)
backend:
service:
name: user-service
作用
- 按域名 + 路径路由到不同微服务
- 实现统一入口、模块化拆分
八、灰度发布(金丝雀)配置
yaml
canary: "true"
canary-weight: "30"
作用
- 30% 流量到新版本 v2
- 70% 流量到老版本 v1
- 观察无异常再逐步切 100%
- 上线无 downtime、可快速回滚
九、IP 白名单(内部系统必配)
yaml
whitelist-source-range: "10.0.0.0/8,192.168.0.0/16"
作用
- 只允许公司内网/办公网访问
- 公网直接拒绝
- 管理后台、内部系统安全必备
十、Ingress 监控(Prometheus + Grafana)
yaml
--enable-prometheus-metrics=true
作用
- 暴露 QPS、延迟、状态码、异常请求
- 接入 Grafana 看板(9614)
- 可配置告警(5xx 告警、延迟告警)
十一、整套配置最终带来的企业级能力
1. 统一入口
- 一个公网IP + 多个域名
- 所有微服务统一接入
2. 七层网关能力
- 域名路由
- URL 重写
- HTTPS 自动证书
- 限流、跨域、安全、黑白名单
3. 高可用
- 多副本
- 自愈
- 滚动更新
- 灰度发布
4. 安全合规
- HTTPS + HSTS
- 防 XSS、点击劫持
- 真实IP日志
- IP白名单
5. 可观测
- QPS、延迟、异常率监控
- 可视化 Grafana 看板
- 可告警