Kubernetes Ingress 网关深度解析

3 阅读4分钟

云原生架构的智能流量入口

在 Kubernetes 世界里,Ingress 就像一个智能交通调度系统,高效管理集群外部对内部服务的访问。它为 HTTP 和 HTTPS 路由提供了集中化、灵活的管理方案,让你根据域名和路径规则,精准地将流量 推送到 到不同的后端服务。Ingress 不仅简化了服务对外暴露,更凭借其诸多优势,成为生产环境不可或缺的关键组件。

1. Kubernetes Ingress 概览

什么是 Ingress?

Ingress 是 Kubernetes 集群的  “智能入口” ,充当反向代理和负载均衡器。你可以将 Ingress 配置定义为一系列规则,控制外部请求如何路由至集群内部服务。Ingress 控制器 (Ingress Controller)  负责真正实现流量转发。

Ingress 的价值

Ingress 解决了 Kubernetes 服务对外暴露的难题,相比传统的 NodePort 和 LoadBalancer 方式,Ingress 具有以下核心价值:

  • 统一流量入口:  集中管理所有入站流量,简化网络配置。
  • 智能路由导向:  基于域名和路径,精准 направлять 流量到不同服务。
  • 内置负载均衡:   自动实现后端服务负载分发。
  • SSL/TLS 集中卸载:   统一处理加密流量,减轻后端服务负担。

2. Ingress 的核心优势

使用 Ingress 网关为 Kubernetes 集群带来显著优势:

  • 简化服务暴露:   一个 Ingress 资源管理多个服务,无需为每个服务单独配置。
  • 精细化流量路由:   基于主机名、路径、Header 等条件,灵活 направлять 流量。
  • 提升负载均衡能力:   智能分发流量到后端 Pod 实例,提升性能和可用性。
  • 集中化 SSL/TLS 管理:   统一管理证书,简化流程,增强安全性。
  • 支持虚拟主机:   同一 Ingress 资源配置多个虚拟主机,管理多域名服务。

3. Ingress 控制器:核心组件

Ingress 控制器的作用

Ingress 资源只是规则定义,Ingress 控制器 才是规则的执行者。它是一个运行在 Kubernetes 集群中的 Pod,监听 Ingress 资源变化,并配置负载均衡器或反向代理服务器 (如 NGINX、Traefik、HAProxy)。

主流 Ingress 控制器

  • NGINX Ingress Controller:   最流行的选择,功能强大,性能卓越,配置灵活。NGINX Ingress Controller 官方文档
  • Traefik Ingress Controller:   现代化云原生边缘路由器,易于配置,自动发现服务,原生支持 Let's Encrypt。Traefik 官方文档
  • HAProxy Ingress Controller:   成熟稳定的负载均衡器,性能和可靠性极高。HAProxy Ingress Controller 官方文档

选择 Ingress 控制器需综合考虑需求、技术栈、性能和功能。

4. Ingress 资源配置详解

Ingress 配置通过定义 Ingress 资源对象实现。

基本 Ingress 示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / \# URL 重写
spec:
ingressClassName: nginx  \# 指定 IngressClass
rules:
  - host: example.com  \# 主机名
    http:
    paths:
      - path: /app1   \# 路径 /app1 前缀
        pathType: Prefix \# 前缀匹配
        backend:
        service:
        name: app1-service \# 后端 Service
        port: 80
      - path: /app2   \# 路径 /app2 前缀
        pathType: Prefix
        backend:
        service:
        name: app2-service
        port: 80

关键配置项

  • apiVersion & kind  API 版本和资源类型。
  • metadata.name  Ingress 资源名称。
  • metadata.annotations   Ingress 控制器注解,扩展配置。
  • spec.ingressClassName  指定 IngressClass,关联 Ingress Controller。
  • spec.rules   路由规则列表。
    • path  URL 路径。
    • pathType  路径类型 (PrefixExactImplementationSpecific)。
    • backend.service.name & port  后端 Service 名称和端口。
    • host  主机名路由规则。
    • http.paths  HTTP 路径规则列表。

IngressClass:控制器配置模板

IngressClass 定义 Ingress 控制器配置,ingressClassName 指定使用的 IngressClass,支持集群中使用多个 Ingress 控制器。

Annotations 注解:扩展配置

Annotations 提供灵活的配置参数,不同 Ingress 控制器支持不同注解,用于高级功能定制。

TLS 配置:HTTPS 访问



  • spec.tls  TLS 配置列表。
    • hosts  证书应用的主机名。
    • secretName  存储 TLS 证书的 Secret (类型 kubernetes.io/tls)。

Path Types 路径类型

  • Prefix (前缀匹配):  匹配路径前缀,常用类型。
  • Exact (精确匹配):  精确匹配 URL 路径。
  • ImplementationSpecific (实现自定义):   由 Ingress 控制器决定,通常类似 Prefix

5. 高级 Ingress 功能特性

  • URL 重写 (URL Rewriting):  修改请求 URL 路径再转发,常用于 API 网关。
  • 流量分割 / 金丝雀发布 (Traffic Splitting / Canary Deployments):   灰度发布,降低风险。
  • 请求速率限制 (Rate Limiting):   防止攻击或过载,保障服务稳定。
  • 健康检查 (Health Checks):   Ingress 控制器检查后端服务健康状态。
  • 身份认证与授权 (Authentication & Authorization):   集成 OAuth 2.0、JWT 等,增强 API 安全。

6. 总结与最佳实践

Kubernetes Ingress 网关是云原生应用的关键组件,简化外部访问管理,提供强大路由和负载均衡,支持丰富扩展功能。

最佳实践:

  • 选择合适的 Ingress 控制器:   根据需求选择。
  • 合理配置 Annotations:   精细化配置。
  • 关注安全性:   配置 TLS,考虑身份验证和速率限制。
  • 监控和日志:   监控 Ingress 运行状态,收集日志。

希望本文能帮助你更好地理解和使用 Kubernetes Ingress 网关。