k8s的ingres的工作原理
自己总结的话术:安装好ingress服务,ingress controller会不断的list and watch k8s的api,查看pod和service的情况。得到信息后会将其转发给ingress生成配置,最后由方向代理负载均衡器生成,达到服务发现的目的。
负载均衡器指nginx这种实现负载和反向代理的功能。
ingress controller指跟k8s的api交互的工具,感知k8s集群的pod和svc的状态。
ingress是指制定反向代理规则,指定哪个域名对应哪个svc的pod。
ingress controller从ingress那里域名解析的规则,同时从api那里获取svc和pod的信息,将规则和信息动态写入负载均衡器(nginx)。
具体的调度:
用户请求,访问到ingress的svc上,转到ingress的pod上面,获取到ingress定义的规则,转发到对应域名的svc上面,最终访问到想要访问的pod上的服务。
ingress的三个组件:
- 反向代理负载均衡器
- Ingress Controller
- Ingress
1 反向代理负载均衡器
反向代理负载均衡器很简单,说白了就是nginx、apche等;在集群中反向代理负载均衡器可以自由部署,可以使用Replication Controller、Deployment、DaemonSet等等。
2 Ingress Controller
Ingress Controller实质上可以理解为是个监视器,Ingress Controller通过不断地跟Kubernetes API打交道,实时的感知后端Service、Pod等变化,比如新增和减少Pod,Service增加与减少等;当得到这些变化信息后,Ingress Controller在结合下文的Ingress生成配置,然后更新反向代理负载均衡器,并刷新其配置,达到服务发现的作用。
3 Ingress
Ingress简单理解就是个规则定义,比如某个域名对应某个Serivce,即当某个域名的请求进来时转发给某个Service;这个规则将与Ingress Controller结合,然后Ingress Controller将其动态写入到负载均衡器中,从而实现整体的服务发现和负载均衡。Ingress解决的是新的服务加入后,域名和服务的对应问题,基本上是一个ingress的对象,通过yaml进行创建和更新进行加载。
自己总结:ingress controller通过api获得了k8s集群内部pod和service的信息。ingress controller通过ingress获取新的规则。然后将规则动态写入负载均衡器(nginx)。
基于ingress的访问请求流程: