ingress

我的理解简单就是处理外部流量,和按规则把流量指向指定服务,以及提供SSL终止。什么是SSL终止,可以简单的理解为一个外包,现在在互联网上很多的流量都使用了TLS/SSL协议继续加密,但是这也会增加服务器的负担,因此SSL终止可以理解成外包一个机器处理这个问题。一般这个外包工作会给到负载均衡器和反向代理。

为什么需要ingress的存在,Service不是已经提供了流量路由的功能了吗?

  • 好像就是因为service不够用:dog:所以才有了ingress的存在,而且似乎ingress在处理HTTP和HTTPS流量的能力上十分出色。
  • 除此之外ingress跳脱到应用层进行负载和流量路由的功能,大大减少统一访问策略和路由规则:boom:
  • 而且ingress似乎为每一个集群提供了单一入口,流量能够精准投送。:fish:

ingress 配置冲突

不同团队或租户尝试使用相同的域名来暴露他们的应用程序时,可能会发生的问题。简单来说,就是两个团队都想用同一个域名,比如app.bearcanoe.com,来让外界访问他们的应用程序。这会导致冲突,因为Ingress控制器(管理这些网络流量的组件)不明确如何处理这种情况

解决方案

  1. 准入控制器:在配置被应用到集群之前,验证并确保域名的唯一性。可以使用开放策略代理(OPA)来实现这个功能。
  2. Contour Ingress 控制器:使用HTTPProxy自定义资源,创建一个根HTTPProxy资源,分配给特定团队。这种方法将域名管理集中化,避免冲突。

Ingress控制器

是用来实现Ingress资源定义的路由规则和流量管理的组件,以Pod的形式存在运行,负责解析Ingress资源,配置底层反向代理或负载均衡以处理HTTP和HTTPS流量 。

  1. 解析 Ingress 资源:Ingress 控制器会监视 :eye: Kubernetes API,解析和处理定义在 Ingress 资源中的路由规则和配置。
  2. 配置反向代理/负载均衡器:根据解析到的 Ingress 规则,Ingress 控制器会动态配置底层的反向代理(如 NGINX、HAProxy)或云 :cloud: 提供商的负载均衡器(如 AWS ELB、GCP Load Balancer)。
  3. 管理外部访问:Ingress 控制器 :control_knobs: 负责将外部请求路由到集群内相应的服务,管理 HTTP/HTTPS 流量的转发、负载均衡以及 SSL/TLS 终止等功能。
  4. 支持高级特性:许多 Ingress 控制器支持高级功能,如基于 Cookie 的会话保持、限速、访问控制和基于 IP 的访问限制等。

流量模式

HTTP代理

:question:什么是HTTP代理呢,想象一下你需要借一本书,但是这本书在一个封闭的空间内,你不能够直接自己拿到,这个时候你就需要一个中间人来帮你去借。这个时候这个中间人就可以理解成代理人。就是当客户进行一个HTTP请求,这个请求会通过代理服务器转发到目标服务器。反向代理也是这么理解,目标服务器的资源通过代理服务器传输出去。

:boy:ingress处理HTTP流量很简单,就是通过host头进行路由转发

HTTPS代理

:question:HTTPS流量处理的有些特别,ingress在获取流量的时候进行SSL终止,然后建立新的HTTP请求进行转发。

但是特殊情况为了安全起见。ingress也会进行SSL终止之后再进行TLS加密与后端pod建立连接。

OCI 3/4层代理

:calendar:不懂往后点再研究…….

控制器

:control_knobs:nginx ingress controller

常用于HTTP和反向代理

  • 支持SSL/TLS终止
  • 基于主机名和路径的路由
  • 支持URL重写和重定向

:control_knobs:Istio ingress Gateway

Istio Ingress Gateway 是 Istio 服务网格中的一个组件,专门用于管理进入服务网格的外部 HTTP 和 HTTPS 流量。与传统的 Kubernetes Ingress 不同,Istio Ingress Gateway 提供了更多的高级流量管理和安全功能,如细粒度的流量控制、策略管理和监控。

Istio Ingress Gateway 组件
  1. :door: Gateway:定义哪些外部流量可以进入服务网格,以及如何路由这些流量。
  2. VirtualService:定义流量的具体路由规则,可以包含多种匹配条件和路由行为。

:control_knobs: HAProxy Ingress

高性能和高级路由功能,路由灵活,低延迟,负载均衡算法