在Kubernetes集群中,Ingress对集群服务(Service)中外部可访问的API对象进行管理,提供七层负载均衡能力。本文介绍Ingress基本概念、工作原理和使用说明。

Ingress基本概念

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。

Ingress资源仅支持配置HTTP流量的规则,无法配置一些高级特性,例如负载均衡的算法、Sessions Affinity等,这些高级特性都需要在Ingress Controller中进行配置。

Nginx Ingress Controller

当前Kubernetes官方维护的是Nginx Ingress Controller,ACK基于社区版的Nginx Ingress Controller进行了优化。当在创建ACK集群时,您选择安装的Nginx Ingress Controller组件即为ACK定制版的Nginx Ingress Controller组件。

工作原理

为了使得Nginx Ingress资源正常工作,集群中必须要有个Nginx Ingress Controller来解析Nginx Ingress的转发规则。Nginx Ingress Controller收到请求,匹配Nginx Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中Service、Nginx Ingress与Nginx Ingress Controller有着以下关系:
  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Nginx Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service所对应的Pod上。例如根据请求中不同的Host和URL路径,让请求落到不同Service所对应的Pod上。
  • Nginx Ingress Controller是一个反向代理程序,负责解析Nginx Ingress的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller会及时更新自己相应的转发规则,当Nginx Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。
Nginx Ingress Controller通过API Server获取Ingress资源的变化,动态地生成Load Balancer(例如Nginx)所需的配置文件(例如nginx.conf),然后重新加载Load Balancer(例如执行nginx -s load重新加载Nginx)来生成新的路由转发规则。S2

Nginx Ingress Controller可通过配置LoadBalancer类型的Service来创建SLB,因此可以从外部通过SLB访问到Kubernetes集群的内部服务。根据Nginx Ingress配置的不同规则来访问不同的服务。

相关文档

ALB Ingress Controller

ALB Ingress基于阿里云应用型负载均衡ALB(Application Load Balancer)之上提供更为强大的Ingress流量管理方式,兼容Nginx Ingress,具备处理复杂业务路由和证书自动发现的能力,支持HTTP、HTTPS和QUIC协议,完全满足在云原生应用场景下对超强弹性和大规模七层流量处理能力的需求。

警告 为Ingress服务的ALB是由Controller完全托管的,您不能自行在ALB控制台上面进行配置,否则可能造成Ingress服务的异常。关于ALB额度的更多信息,请参见使用限制

工作原理

ALB Ingress Controller通过API Server获取Ingress资源的变化,动态地生成AlbConfig,然后依次创建ALB实例、监听、路由转发规则以及后端服务器组。Kubernetes中Service、Ingress与AlbConfig有着以下关系:

  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service上。例如:根据请求中不同的Host和URL路径,让请求转发到不同的Service上。
  • AlbConfig是在ALB Ingress Controller提供的CRD资源,使用AlbConfig CRD来配置ALB实例和监听。一个AlbConfig对应一个ALB实例。
ALB Ingress

相关文档

MSE云原生网关(MSE Ingress Controller)

MSE Ingress Controller是MSE云原生网关提供的一个组件,该组件核心功能是方便用户使用常规的K8s Custom Resource来管理MSE云原生网关实例的生命周期以及Ingress资源的监听选项。

MSE云原生网关是阿里云推出的下一代网关,具备低成本、安全、高集成和高可用的产品优势。将传统的流量网关和微服务网关合并,在降低资源成本的同时为用户提供了精细化的流量治理能力,支持ACK容器服务、Nacos、Eureka、固定地址、FaaS等多种服务发现方式,支持多种认证登录方式快速构建安全防线,提供全方面、多视角的监控体系,如指标监控、日志分析以及链路追踪,并且支持解析单、多K8s集群模式下的标准Ingress资源,满足云原生应用场景下以声明式进行统一流量治理的诉求。

使用K8s Custom Resource来管控MSE云原生网关,整体方案架构可以分为两部分,即部署在用户集群的MSE Ingress Controller组件和托管的MSE云原生网关实例。

组成部分

  • MSE Ingress Controller (可选):由用户通过Helm包管理的形式自行安装到ACK集群中,通过使用该组件提供的MseIngressConfig的CRD资源以声明式设计模式配置的方式来管理云原生网关实例,以及设置网关对Ingress资源的监听选项。您也可以通过MSE控制台来关联ACK集群并进行Ingress相关配置。目前该组件已发布到容器服务的应用市场中。
  • MSE云原生网关:由控制面(Control Panel)和数据面(Data Panel)组成。
    • 控制面(Control Panel):控制面主要用来监听MSE管控下发的流量治理配置,以及监听用户关联的ACK集群中的Service、Node、Ingress和IngressClass等资源,经内部解析之后实时下发给网关数据面。
    • 数据面(Data Panel): 数据面是流量治理配置的实施者,按照控制面下发的治理规则处理外部请求,并转发到后端目标服务。

工作原理

MSE Ingress Controller负责监听集群中用户创建的MseIngressConfig资源,实时动态维护该资源对应的云原生网关实例的生命周期以及网关与ACK集群的关联性。

MSE云原生网关的控制面通过关联的ACK集群的API Server获取Ingress资源的变化,然后动态更新MSE云原生网关的路由规则。当MSE云原生网关收到请求时,匹配Ingress转发规则转发请求到后端Service所对应的Pod。

Kubernetes中Service、Ingress和MSE Ingress Controller有着以下关系:

  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Ingress是反向代理规则,用来规定HTTP和HTTPS请求应该被转发到哪个Service上。例如:根据请求中不同的Host和URL路径,让请求转发到不同的Service上。
  • MseIngressConfig是由MSE Ingress Controller提供的CRD来描述云原生网关实例基本信息。
  • MSE Ingress Controller负责监听集群中的MseIngressConfig资源,实时动态维护该资源对应的云原生网关实例的生命周期以及网关与ACK集群的关联性。

下图是MSE云原生网关在ACK多集群模式下Ingress的应用场景:

MSE云原生网关在ACK多集群模式下Ingress的应用场景