一、核心概述

1. 定义

Ingress 是 K8s 集群中管理七层(HTTP/HTTPS)外部流量的核心资源对象,是 Service 之上的流量路由抽象层,主要用于替代多个 NodePort、LoadBalancer 服务,实现集群服务的统一入口访问。

2. 核心作用

  • 统一流量入口:多个微服务共用一个外网入口,避免端口混乱

  • 智能路由转发:基于域名、URL 路径匹配,将流量分发到不同后端 Service

  • 集中 HTTPS 管理:统一实现 SSL/TLS 证书终止,后端服务可使用纯 HTTP 通信

  • 虚拟主机能力:同一公网 IP 可托管多个不同域名的业务服务

  • 丰富扩展能力:支持路径重写、限流、超时、认证授权等高级配置

3. 关键误区(必考)

Ingress 资源本身只负责定义路由规则,不处理流量、不监听端口,必须依赖 Ingress Controller 才能生效。

二、核心组成架构

1. Ingress 资源(yaml 定义)

用户通过 yaml 创建的 K8s 资源,仅存储路由、TLS、域名等规则,无实际流量处理能力。

2. Ingress Controller(核心载体)

实际运行的 Pod 应用(Nginx/Traefik/Envoy),通过监听 APIServer,实时感知 Ingress 规则变化,自动更新反向代理配置,实现流量转发。

三、完整工作原理

  1. 规则定义:用户编写 Ingress yaml,创建路由、域名、证书等规则并提交到集群

  2. 监听感知:Ingress Controller 通过 Watch 机制实时监控 Ingress 资源变更

  3. 配置渲染:控制器将 K8s 规则转换为 Nginx 等代理的本地配置文件

  4. 流量转发:外部流量访问控制器入口,根据配置匹配规则,转发至对应 Service,最终到达业务 Pod

四、核心配置详解

1. 固定 API 版本

K8s 1.19+ 稳定版本:networking.k8s.io/v1(废弃旧版本 extensions/v1beta1、networking/v1beta1)

2. 核心字段说明

  • ingressClassName:指定绑定的 Ingress 控制器(如 nginx),多控制器集群必备

  • spec.rules:核心路由规则,支持域名(host)+ 路径(path)匹配

  • spec.tls:HTTPS 证书配置,关联集群 Secret 资源存储证书秘钥

  • pathType:路径匹配规则,三种固定类型(核心考点)

3. pathType 匹配规则对照表

类型

匹配规则

示例(path: /api)

Exact

精确完整匹配,区分大小写

仅匹配 /api,不匹配 /api/、/api/user

Prefix

前缀匹配,默认常用规则

匹配 /api、/api/、/api/list、/api/123

ImplementationSpecific

由控制器自主决定匹配逻辑

不同控制器行为不一致,生产不推荐

五、高频实战 YAML 模板

1. 极简基础版(HTTP 单路径)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-ingress
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-svc  # 后端业务service名称
            port:
              number: 80   # 后端service端口

2. 生产完整版(多路径 + HTTPS)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prod-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /  # 路径重写
    nginx.ingress.kubernetes.io/proxy-body-size: 20m # 限制请求体大小
spec:
  ingressClassName: nginx
  # HTTPS证书配置
  tls:
  - hosts:
    - blog.xxx.com
    secretName: blog-tls-secret # 提前创建的证书secret
  # 路由规则
  rules:
  - host: blog.xxx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: blog-web-svc
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: blog-api-svc
            port:
              number: 8080

六、Nginx-Ingress 常用注解(生产高频)

注解是控制器扩展配置,仅对应 Nginx Ingress 生效,其他控制器不兼容

  • nginx.ingress.kubernetes.io/rewrite-target: /:URL 路径重写,适配后端接口根路径

  • nginx.ingress.kubernetes.io/proxy-body-size: 10m:设置最大上传文件大小

  • nginx.ingress.kubernetes.io/ssl-redirect: "true":强制 HTTP 跳转 HTTPS

  • nginx.ingress.kubernetes.io/connection-proxy-header: keep-alive:开启长连接

七、日常实操命令

# 查看所有ingress资源
kubectl get ingress
# 查看ingress详细规则、状态、报错
kubectl describe ingress 资源名
# 应用ingress配置
kubectl apply -f ingress.yaml
# 删除ingress资源
kubectl delete ingress 资源名
# 查看ingress控制器日志(排错核心)
kubectl logs -n ingress-nginx 控制器pod名

八、主流 Ingress Controller 选型对比

  • Nginx Ingress:社区成熟、稳定、功能全面,生产最常用,通用场景首选

  • Traefik:云原生自动发现、配置动态更新、自带 UI,轻量化易用

  • Envoy:高性能、可观测性强,适配大规模微服务、服务网格场景

  • HAProxy:四层/七层性能优异,适合高并发、TCP 流量转发场景

九、生产最佳实践 & 避坑总结

  1. 必须安装控制器:仅创建 Ingress 资源无任何效果,控制器是流量核心

  2. 规范匹配规则:优先使用 Prefix/Exact,禁止乱用 ImplementationSpecific

  3. 证书统一管理:使用 Cert-Manager 自动签发、续期证书,避免手动维护过期

  4. 资源隔离:按命名空间划分业务 Ingress,避免域名、路由规则冲突

  5. 配置资源限制:为 Ingress Controller 设置 CPU/内存限制,防止单点过载

  6. 开启监控告警:监控流量、错误率、延迟,及时发现路由异常

十、拓展:Ingress 与 Gateway API

K8s 官方新一代流量标准 Gateway API 正在逐步替代传统 Ingress:

  • 优势:角色权限分离、支持 TCP/UDP/gRPC、更精细的流量治理、扩展性更强

  • 现状:旧项目兼容 Ingress,新项目、云原生集群推荐使用 Gateway API

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐