企业内部生产级 Ingress 七层网关完整拆解

一、整体架构

复制代码
用户 → 云厂商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 看板
  • 可告警
相关推荐
恼书:-(空寄1 天前
Ingress 网关 + 微服务模板 + HTTPS 自动证书 + 监控 + 安全限流 + 白名单
微服务·ingress
小毅&Nora2 个月前
【云计算】【Kubernetes】⑥ 流量入口大解析:从 Nginx 到 Ingress 再到 Gateway API
kubernetes·ingress·gatewayapi
ygqygq23 个月前
Kubernetes Gateway API 与 Envoy Gateway 部署使用指南
kubernetes·gateway·envoy·ingress
木二_3 个月前
附056.Kubernetes_v1.34.3三节点集群-CentOS版
云原生·容器·kubernetes·centos·containerd·ingress·longhorn
岚天start7 个月前
K8s Ingress Annotations参数使用指南
nginx·kubernetes·k8s·ingress·ingress控制器
岚天start7 个月前
在公用同一公网IP和端口的K8S环境中,不同域名实现不同访问需求的解决方案
kubernetes·k8s·白名单·访问控制·ingress·ingress控制器·annotations
菠萝炒饭pineapple-boss10 个月前
Nginx-Ingress-Controller自定义端口实现TCP/UDP转发
tcp/ip·nginx·udp·ingress
bruce12810 个月前
应用无法获取用户真实ip问题排查
nginx·kubernetes·ingress
AquaPluto1 年前
kubernetes的Service与服务发现
云原生·kubernetes·服务发现·ingress