K8S:ingress 负载均衡

发布时间 2023-10-11 15:37:06作者: ShineLe

学习自:Kubernetes进阶 -- ingress 负载均衡服务详解_ingress负载均衡-CSDN博客

k8s-负载均衡流量(ingress-nginx)-阿里云开发者社区

官网:https://kubernetes.github.io/ingress-nginx/

1、简介

1)Ingress是什么?

一种全局的,为代理不同后端Service而设置的负载均衡服务

2)Ingress组成部分?

Ingress Controller + Ingress

Ingress:K8S中的一个资源对象,作用是定义前端请求如何转发到Service规则

Ingress Controller:具体实现反向代理和负载均衡的程序,对Ingress规则进行解析,根据配置的规则实现请求转发,实现方式有很多,如Nginx、Contor等

Ingress Controller会根据定义的Ingress对象,提供对应的代理能力。业界常用的各种反向代理项目,如Nginx、HAProxy、Envoy、Traefik等,都已经为K8S维护了对应的Ingress Controller。

 上图给出了Ingress的工作方式,其中一系列的Service是Pod向外界暴露的端口,Ingress在Service之前,只连接Service,做Service的负载均衡和反向代理。

2、Ingress

Ingress是K8S集群外部访问集群的一个入口,将外部请求转发给集群内不同的Service上,其实就相当于Nginx等负载均衡代理服务器。为什么不能只使用Nginx?因为每次有新服务加入时都需要改Nginx配置,不能滚动更新前端的Nginx-pod,而Ingress就实现了这些Nginx无法实现的功能。

下图展示了一个Ingress负载均衡的实现过程:

 Ingress可以配置为向Service提供外部可访问的URL、负载平缓流量、终止SSL/TLS并提供基于名称的虚拟主机

一个入口控制器负责流量入口,之后通常会跟一个负载均衡器,以处理流量。

Ingress不会公开后台Service所采用的端口和协议。

如果要向Internet公开除了HTTP、HTTPS之外的服务,那么服务的类型(Service.Type)通常是NodePort或LoadBalancer。

3、Service

Service只能通过四层负载(最多到传输层,用到Port),也就是IP+Port的形式来向外界暴露。

两种服务类型存在的弊端:

NodePort:会占用集群机器的很多端口(因为这里的Port用的是Host的Port),当集群服务变多时,这个缺点就越发明显;

LoadBalancer:每个Service都要配一个LB,比较麻烦和浪费资源,且需要K8S意外的LB设备支持。

 

Ingress与Service的对比

Ingress可以提供七层(直达应用层),可以调度不同的业务域不同的URL访问路径的业务流量。

4、Ingress工作原理

  1.  用户编写Ingress Service规则,说明每个域名对应K8S集群中的哪个Service;
  2. Ingress Controller动态感知到Service规则变化,生成一段对应的Nginx反向代理配置;
  3. Ingress Controller将生成的Nginx配置写入到一个运行中的Nginx服务中,并动态更新;
  4. C端发送请求访问域名,Nginx将请求转发到对应的Pod,完成整个请求过程。