【K8S】Ingress负载均衡的介绍

1.什么是Ingress

Ingress 也是为了解决在集群之外,访问集群内部Service服务的问题。
实际上,将service的type设置为nodePort或LoadBalancer,
也能实现将集群内部的服务暴露给外部访问。
那Ingress岂不是多余的?
先回顾下,LoadBalancer类型的Service访问流程,如下:

                                      /————————————————————————————————————————————————
                                      |  集群内部                       .-------> Pod  |
                                      |                                /               |
集群外部(client) ---->LoadBalancer-----+--> node_ip:nodePort ----> Service             |
                                      |                                \               |
                                      |                                 .-------> Pod  |
                                      |                                                | 
                                      \————————————————————————————————————————————————
									  
LoadBalancer 类型的 Service 一般应用于云平台环境中,这个LoadBalancer是由云厂商提供的,
位于k8s集群外部,当用户在云平台上创建一个该类型的Service时,
同时会为该 Service 创建一个对应的负载均衡器。可以发现,每个 Service 都要有一个负载均衡器,
这种做法实际上是成本比较高的。
Ingress除了能将集群内部的服务暴露给外界访问,它也是一个负载均衡器,
专门是为集群内部的Service提供负载均衡服务。

Ingress 与 LoadBalancer 类型的 Service 有点类似,但区别在于,
Ingress是一个k8s集群内部的全局的负载均衡器,作为k8s集群中的一个对象资源而存在,
而LoadBalancer类型则是一个集群外部的负载均衡服务器。

2.Ingress 工作原理

Ingress,是K8s的一个资源对象,定义了一系列路由转发规则(或反向代理规则)。
它规定了外部进来的HTTP/HTTPS请求,应该被转发到哪个Service上。
具体说,Ingress就是一段nginx服务的反向代理配置,它能根据请求中不同的
Host和URL路径,将请求转发到不同的Service所对应的后端Pod上。
Ingress Controller相当于是一个反向代理程序,负责解析Ingress的反向代理规则,
并实时感知Ingress转发规则的变化。一旦Ingress规则有变化,
Ingress Controller会及时更新自己相应的转发规则,并根据这些规则,
将接收到的请求转发到对应的Service。

Ingress Controller 是通过API Server获取Ingress资源的变化,
并动态地生成Load Balancer(如Nginx程序)所需的配置文件(如nginx.conf),
然后重新加载Load Balancer(如执行nginx -s load重新加载Nginx)来生成新的路由转发规则。

Ingress与手动部署反向代理服务器的思路是一样的。如果反向代理服务器使用的是Nginx程序,Ingress Controller 会将 Ingress 规则变化生成一段Nginx的配置,然后将这个配置写到Ingress Controller管理下的Nginx Pod中,然后reload。
				  
部署 Ingress :
Ingress组件需要提前部署到k8s集群中,它包括 Ingress Service 与 
Ingress Controller,以及Ingress Controller管理下的两个Nginx Pod。
反向代理服务器有Nginx、Apache、traefik等,这里选择用Nginx。
							  						  
Ingress 使用:
Ingress能将来自于不同域名的请求转发到不同的Service上,
也可以将同一个域名下的请求,根据不同URI接口转发到不同的Service上。		

3.ingress相关yaml文件解析 

 spec:
   backend: 全局默认后端。若不匹配任何规则的请求,都会代理到默认后端
    serviceName: service的名称。要将请求代理到哪个Service上
    servicePort: service的端口
    rules: 定义入站流量的转发规则
       host: 第一条规则,检查入站流量是否匹配此处定义的域名
       http:
        paths:
          path: 第二条规则,检查入站流量的URI路径,是否匹配此处定义的path(省略即为"/")
            backend: 自定义后端。所有入站流量都会先匹配host与path规则,当两个都匹配时,才会将流量代理到下面定义的service上,否则会发送到默认backend
             serviceName:
             servicePort:
    tls: 配置HTTPS		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值