K8S:ingress 负载均衡
学习自: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工作原理
- 用户编写Ingress Service规则,说明每个域名对应K8S集群中的哪个Service;
- Ingress Controller动态感知到Service规则变化,生成一段对应的Nginx反向代理配置;
- Ingress Controller将生成的Nginx配置写入到一个运行中的Nginx服务中,并动态更新;
- C端发送请求访问域名,Nginx将请求转发到对应的Pod,完成整个请求过程。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2020-10-11 Chrome:查看HTTP请求的header信息