在K8S中,ingress 有何作用?

在 Kubernetes 中,Ingress 是一个至关重要的 API 对象,它的核心作用是管理从集群外部到集群内部服务的 HTTP 和 HTTPS 流量访问。它充当了集群入口流量的“智能路由器”和“流量管家”的角色。

以下是 Ingress 的主要作用详解:

  1. 提供统一的外部访问入口:

    • 在没有 Ingress 之前,通常需要为每个需要外部访问的服务创建 LoadBalancer 类型的 Service(云厂商提供的外部负载均衡器)或 NodePort 类型的 Service(需要手动管理防火墙规则和外部负载均衡器)。这种方式成本高且管理复杂。
    • Ingress 解决了这个问题: 你只需要一个(或少量)Ingress 资源(通常配合一个 LoadBalancer Service 或 NodePort 暴露给外部),它就能根据规则将外部请求路由到集群内不同的后端服务。这大大简化了外部访问的配置和管理,降低了成本(特别是使用云负载均衡器时)。
  2. 基于主机名(Host)和路径(Path)的路由:

    • 这是 Ingress 最核心的功能。它允许你定义规则,根据 HTTP 请求的 Host 头(域名)和 URL Path 来决定将流量转发到哪个后端 Service 和 Port。
    • 示例:
      • www.example.com -> 路由到前端 Web 应用的 Service。
      • api.example.com -> 路由到后端 API 的 Service。
      • example.com/static -> 路由到静态文件存储的 Service。
      • example.com/users -> 路由到用户管理微服务的 Service。
    • 这使得在同一个 IP 地址和端口上(通常是 80 和 443)可以托管多个基于域名的应用或服务的不同部分。
  3. 负载均衡:

    • Ingress 控制器(后面会讲)在将流量路由到后端 Service 时,会自动执行负载均衡,将请求分发到该 Service 背后的健康 Pod 上。它通常支持多种负载均衡算法(如轮询、最少连接数等)。
  4. TLS/SSL 终止:

    • Ingress 可以配置 TLS 证书(存储在 Kubernetes Secret 中),用于终止 HTTPS 连接。这意味着:
      • 客户端与 Ingress 控制器之间建立加密的 HTTPS 连接。
      • Ingress 控制器解密请求,根据规则路由到后端 Service。
      • 后端服务(Pod)内部通常使用 HTTP,简化了后端应用的配置(无需处理 TLS)。
    • 这集中管理了证书,提高了安全性并简化了后端服务的配置。
  5. 虚拟主机支持:

    • 基于 Host 头的路由本质上实现了虚拟主机的功能,允许多个域名共享同一个入口 IP。
  6. 其他高级路由功能(取决于控制器):

    • 不同的 Ingress 控制器实现(如 Nginx Ingress Controller, Traefik, HAProxy Ingress, AWS ALB Ingress Controller 等)提供了丰富的扩展功能,例如:
      • 重写规则(URL Rewriting): 修改请求的路径后再转发给后端。
      • 会话保持(Session Affinity/Sticky Sessions): 确保来自同一用户的请求发送到同一个后端 Pod。
      • 流量切分(Canary Releases/A/B Testing): 将一部分流量路由到新版本的服务进行测试。
      • 基于请求头、Cookie 或客户端 IP 的路由: 实现更复杂的灰度发布或金丝雀部署策略。
      • 认证和授权: 集成 Basic Auth、OAuth、JWT 等。
      • 速率限制: 控制访问频率。
      • 请求超时和重试: 配置超时时间和重试策略。
      • WebSocket 和 gRPC 支持: 路由非 HTTP(S) 流量。

Ingress 的核心组件和工作原理:

  1. Ingress 资源(API 对象):

    • 这是你(用户/管理员)在 Kubernetes 中创建的 YAML 文件。
    • 它定义了路由规则host, path, backend service/port)和 TLS 配置(证书)。
    • 它本身只是一个配置声明,不会处理任何流量!
  2. Ingress 控制器(Ingress Controller):

    • 这是一个实际运行在集群中的 Pod(通常是 Deployment + Service)
    • 它负责监控集群中 Ingress 资源的创建和变化。
    • 它根据 Ingress 资源定义的规则,动态配置一个真正的负载均衡器/反向代理服务器(如 Nginx、Envoy、HAProxy、云厂商的负载均衡器等)。
    • 这个控制器 Pod 本身需要被暴露到集群外部(通常通过 LoadBalancerNodePort 类型的 Service)。外部流量首先到达这个控制器。
    • 不同的控制器实现了不同的功能集和特性。 你需要根据需求选择合适的控制器并部署它(Kubernetes 本身不提供默认控制器)。

总结 Ingress 的作用:

Ingress 为 Kubernetes 集群提供了一个强大、灵活且可配置的外部 HTTP(S) 流量入口管理方案。它通过:

  1. 统一入口点: 简化外部访问配置,降低成本。
  2. 智能路由: 基于域名和路径将请求精准分发到不同的内部服务。
  3. 负载均衡: 确保流量在后端 Pod 间合理分配。
  4. TLS 卸载: 集中管理 SSL/TLS 证书,简化后端服务。
  5. 扩展性强: 借助丰富的 Ingress 控制器实现各种高级流量管理功能(重写、限流、认证、灰度发布等)。

简而言之,Ingress 是你将外部用户流量引入 Kubernetes 集群内部服务,并进行精细化路由和管理的关键基础设施。 它是构建现代化、微服务化 Web 应用不可或缺的部分。

posted @ 2025-08-17 15:24  天道酬勤zjh  阅读(45)  评论(0)    收藏  举报