路由概述
在Kubernetes中,服务的访问管理是确保集群内外部流量高效、安全流动的关键。Kubernetes 的Service基于TCP和UDP协议进行流量转发,主要用于集群内部的服务发现和负载均衡,但它缺乏对HTTP/HTTPS的原生支持,无法直接处理复杂的路由规则、基于域名的访问控制、TLS终止等需求。为解决这一问题,Kubernetes集群提供另一种基于HTTP/HTTPS协议的访问方式——Ingress。Ingress是Kubernetes集群中一种独立的资源,通过ingress,用户可以根据域名和路径对转发规则进行自定义,完成对访问流量的细粒度划分。
在Kubernetes中,Ingress资源本身是一个规则的集合,并不会直接处理流量,需要依赖Ingress Controller完成流量的转发,具体概念如下:
- Ingress资源:一组基于域名或路径把请求转发到指定Service实例的访问规则,是Kubernetes的一种资源对象,通过接口服务实现增、删、改、查的操作。
- Ingress Controller:请求转发的执行器,用以实时监控资源对象Ingress、Service、Endpoint、Secret(主要是TLS证书和Key)、ConfigMap的变化,解析Ingress定义的规则并负责将请求转发到相应的后端Service。
Ingress工作流程
Ingress可以将外部的HTTP/HTTPS流量路由到集群内部的Service中,具体工作流程如下:
- 外部客户端发起HTTP/HTTPS请求。
- 请求到达Ingress管理的负载均衡器,负载均衡器将请求转发到集群中的Ingress Controller。
- Ingress Controller接收到请求后,会根据请求的域名和路径匹配Ingress资源中定义的规则。根据匹配的规则,Ingress Controller将请求转发至对应的Service,Service通过标签选择器找到对应的Pod。
- Service根据负载均衡策略(如轮询)将请求转发到后端的Pod。
- Pod处理请求并返回响应,响应经过 Service、Ingress Controller以及负载均衡器,最终返回给用户。

Ingress Controller类型
- ELB Ingress Controller:部署在控制节点(Autopilot集群托管),与集群所在VPC下的弹性负载均衡器(ELB)绑定,能够基于弹性负载均衡服务(ELB)实现流量转发,所有策略配置和转发行为均在ELB侧完成,具体参见ELB Ingress Controller工作原理。
- Nginx Ingress Controller:部署在工作节点(Autopilot集群托管),并通过容器端口对外提供访问,外部流量经过Nginx组件转发到集群内其他业务,流量转发行为及转发对象均在集群内部,具体请参见Nginx Ingress Controller工作原理。
特性 |
ELB Ingress Controller |
Nginx Ingress Controller |
---|---|---|
运维 |
免运维 |
自行安装、升级、维护 |
性能 |
一个Ingress支持一个ELB实例 |
多个Ingress只支持一个ELB实例 |
使用企业级LB,高性能高可用,升级、故障等场景不影响业务转发 |
性能依赖pod的资源配置 |
|
支持配置动态加载 |
|
|
组件部署 |
控制节点(Autopilot集群托管) |
工作节点(Autopilot集群托管),Nginx组件存在运行成本 |
路由重定向 |
支持 |
支持 |
SSL配置 |
支持 |
支持 |
代理HTTPS协议的后端服务 |
支持 |
支持,可通过backend-protocol: "HTTPS"注解实现 |
ELB Ingress Controller工作原理
CCE Autopilot集群仅支持使用独享型ELB直接连接Pod。创建集群外部访问的Ingress时,可使用ELB对接ClusterIP服务,直接将Pod作为ELB监听器的后端服务器,外部流量可以通过容器端口直接访问集群中的Pod。ELB Ingress Controller的工作原理请参见图2 ELB Ingress直通容器原理,实现步骤如下:
- 用户创建Ingress资源,在Ingress中配置流量访问规则,包括负载均衡器、访问路径、SSL以及访问的后端Service端口等。
- Ingress Controller监听到Ingress资源发生变化时,就会根据其中定义的流量访问规则,在ELB侧重新配置监听器以及后端服务器路由。
- 当用户进行访问时,流量根据ELB中配置的转发策略转发到关联的各个工作负载。
Nginx Ingress Controller工作原理
在CCE Autopilot集群中创建Nginx Ingress时,仅支持使用独享型弹性负载均衡(ELB)和ClusterIP类型的Service。在创建Nginx Ingress前,需确保集群已安装NGINX Ingress控制器插件。Nginx Ingress将弹性负载均衡(ELB)作为流量入口,并通过Nginx Ingress控制器实现流量的负载均衡和访问控制。
由于Nginx Ingress Controller部署在工作节点(Autopilot集群托管)上,因此引入了相应的运维成本和Nginx组件运行成本。关于Nginx Ingress Controller的工作原理,请参见图3 Nginx Ingress Controller工作原理,具体实现步骤如下:
- 当用户更新Ingress资源后,Ingress Controller就会将其中定义的转发规则写入到Nginx的配置文件(nginx.conf)中。
- 内置的Nginx组件进行reload,加载更新后的配置文件,完成Nginx转发规则的修改和更新。
- 在流量访问集群时,首先被已创建的负载均衡实例转发到集群内部的Nginx组件,然后Nginx组件再根据转发规则将其转发至对应的各个工作负载。