一、Ingress诞生背景

1、K8S集群内SVC不支持外部访问;

2、通过NodePort方式不易于后续管理;

3、应用层面需要更高级别的路由功能和负载平衡;

二、Ingress基本概念

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,几乎承载着集 群内服务访问的所有流量。

Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。

通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。

三、Ingress Controller工作原理

Ingress Controller用于解析Ingress的转发规则。Ingress Controller收到请求,匹配 Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中 Service、Ingress与Ingress Controller有着以下关系:

  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。

  • Ingress是反向代理规则,用来规定HTTP、HTTPS请求应该被转发到哪个Service所对应的Pod上。

  • Ingress Controller是一个反向代理程序,负责解析Ingress的反向代理规则。如果 Ingress有增删改的变动,Ingress Controller会及时更新自己相应的转发规则,当 Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。

Ingress Controller通过API Server获取Ingress资源的变化,并动态地更新Nginx配置文件,实现HTTP(S)的负载均衡及路由转发。

Aspose.Words.35773ace-034f-476d-9a7d-cde46e0c6276.003

总结下:Kubernetes 的 Ingress 资源对象需要配合 Ingress Controller 才能实现外部流 量的转发和路由。Ingress Controller 是 Ingress 资源的实际执行者,负责根据定义的路 由规则配置网络代理。(Ingress / Ingress Controller千万不要弄混)

四、主流的Ingress Controller

  1. Nginx Ingress Controller: 基于Nginx的Ingress控制器,提供了广泛的功能和配置选项。
  2. Traefik Ingress Controller: Traefik是一个流行的反向代理和负载均衡器, Traefik Ingress Controller提供了灵活的配置选项和自动发现服务的功能。
  3. Istio Ingress Gateway: Istio是一种服务网格,它提供了基于Envoy代理的Ingress Gateway来管理入站和出站流量。
  4. Kong Ingress Controller: Kong是一个API网关,提供了可扩展的路由和服务管理功能。