k8s中,ingress的实现原理,及其架构。

打印 上一主题 下一主题

主题 1821|帖子 1821|积分 5465

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 


图片泉源:自己画的

图片泉源:k8s官网




起首,什么是ingress?
是服务还是控制器?
都不精确
ingress是一个api资源
service和deployment也是api资源。
这几个相互协作,组建成一个对外提供服务的架构。
ingress提供的作用是什么?
ingress资源的生成,系统会给ingress资源一个ip地址
这个ip地址下的差别路径,会定位到后端的差别服务
比如ingress资源的ip地址是192.168.1.3
那么客户端访问http://192.168.1.3/websvc_path
ingress资源会把这个哀求
转发给后端一个服务
这个服务的名称为websvc  (举例,具体是在ingress资源文件中指定)
这个服务的端标语为6789  (举例,具体是在ingress资源文件中指定)
这个服务真实的提供者
是后端的pod,
这些pod监听着6789端口
这些pod与websvc服务绑定
如何绑定?
是通过服务资源文件中定义的selector标签选择器
而pod资源文件中给pod都加了这个标签
通过这个标签
服务能找到pod
这个叫服务的主动感知功能。
如果某个带有这个标签的pod删除了,
重新在别的节点上以别的ip产生了
拥有同样标签的pod
服务能主动感知到这个新的pod,
服务是如何感知到这个新的pod的?
这个就和服务的步伐设计有关,
开发代码的层面,
其焦点是跟网络插件对于ip的管理
和数据库组件对于新pod 的信息的记录有关。
焦点也是标签选择器。
-------------------------------------------------------------------------------
服务尚有一个功能是负载均衡,
外部对于服务的哀求,会分摊到后端的pod
如何实现的?
是通过kube-proxy组件
kube-proxy组件是如何实现负载均衡的?
是调用ipvs内核模块
也就是使用lvs举行负载均衡
------------------------------------------------------------
服务尚有一个功能,是主动注册
就是把ip地址注册为域名
服务创建时,主动在内部dns上注册域名
域名格式为:
<服务名称>.<名称空间>.svc.cluster.local
-----------------------------------------------------------
说服务的目标是什么?跟ingress什么关系?
ingress的资源文件中
需要指定
把对于集群的某一个/path的访问
转发给后端的一个服务及其监听的端口
而这个后端的服务
是一个服务名
那么ingress怎么通过这个服务的名称
找到这个服务呢
就跟服务的主动注册有关系,
内部dns上,记录了这个服务的名称和ip的对应关系
所以ingress可以通过名称的方式找到后端的服务
---------------------------------------------------------------------------
ingress需要选择一个控制器,
nginx或者haproxy
一般用nginx的比较多
那么ingress怎么使用这个nginx来
举行负载均衡反向代理这些操作呢
就要通过选择ingressclass来实现
是选nginx?
还是选haproxy?
还是选别的?
要选择nginx
就要在ingress的资源文件中声明
ingressClassName: nginx
----------------------------------------------------------
那么,ingressclass
也就是ingress的类之一
nginx
这个nginx是从哪来的呢?
是在ingressclass的资源文件中
要在.spec的字段下
定义一个
controller: k8s.io/ingress-nginx
------------------------------------------------------------
这个ingressclass中定义了
名称为nginx的ingress的类
使用的控制器是k8s.io/ingress-nginx
这是一个标识符
实际上的控制器是ingress-nginx
------------------------------------------------------------
ingress-nginx这个控制器是以什么形态存在的?
是以pod的形态存在的
pod内里运行着实现控制器功能的容器
容器内里运行着实现控制器功能的进程
容器来自于docker镜像
镜像在摆设k8s平台的时间
就需要摆设在harbor堆栈里
------------------------------------------------------------
ingress-nginx这个控制器的pod从哪来的?
是用deployment无状态控制器来实现的
deployment中定义了
ingress-nginx控制器的pod的容器模版
-------------------------------------------------------------
如何启动ingress-nginx这个控制器?
常用两种方式
1. Helm Chart方式,摆设k8s集群的时间,就主动摆设好了,也就是集群已经有这个ingress-nginx
2. yaml资源文件方式
ingress-nginx控制器要实现功能,需要有一个资源文件,这个资源文件内里有相关的service资源和deployment资源,也就是一个文件中有多个资源,来实现ingress-nginx控制器。说白了就是,service接收访问ingress-nginx控制器的哀求,转发给后端的ingress-nginx的pod,这些pod同时由deployment举行主动摆设、维护、扩容、滚动更新。
----------------------------------------------------------------
根本上来说,ingress-nginx控制器泉源于
镜像文件,以及用镜像文件启动容器的时间,设置的一些启动参数
尚有存放这个容器的pod中,设置的一些可选项
比如initcontainer 初始化容器
startupPorbe
livenessProbe
readinessProbe
这三个容器探针
尚有
postStart
preStop
这两个事件处置惩罚函数,也叫钩子函数。
以镜像文件、
启动参数、
configMap注入设置文件
尚有pod内的一系列要素
构建了ingress-nginx这个控制器的焦点
通过service对ingress-nginx举行发布
让ingress在集群内能找到这个控制器
通过deployment对于ingress-nginx举行主动化摆设和维护
包括扩容和滚动更新
如许,形成了一个ingress资源对外提供哀求分发的功能
ingress自己自己由于有service来管理后端ingress-nginx的pod
所以自身也是负载均衡的
而且有deployment的存在
ingress资源自己的pod也是能主动摆设和维护的
比如提供ingress服务的pod堕落了
deployment会主动修复,摆设新的
如果有必要的话,deployment内里的副本数量
写成2个3个以上,如许能更加保障
ingress资源自己的高可用,而且是自维护
ingress对流量举行分发之后
后端提供计算服务的,
比如web服务
也是可以使用同样的架构
service+pod+deployment的方式
实现负载均衡和高可用
---------------------------------------------------------------
在传统方式中,用到的lvs、nginx、keepalived
负载均衡和高可用技术。
在容器化环境中,
在k8s平台,
以kube-porxy调用ipvs
ingress调用nginx
deployment调用keepalived (不一定类似,但原理类似)
实现了负载均衡和高可用
----------------------------------------------------------------
而且在deployment的底子上
k8s提供了
HPA监理功能
HorizontalPodAutoscaling
程度 pod  主动 伸缩
deployment的扩缩容需要
管理员去手工scale
根据资源的使用量调整
而HPA可以主动根据pod的资源使用量
调整pod的数量
也就是主动扩缩容
管理员只需要提前设置好就行。
-----------------------------------------------------------------
这么来看,k8s对于容器化环境的
负载均衡、
高可用、
主动化摆设(给个模版,主动创建pod)、
主动化维护(pod删掉了,主动新建)、
主动化调整服务器规模
(pod不够用了,主动扩容;
pod太多了,哀求没那么多,主动缩容)
都设计的比较ok
------------------------------------------------------------------
从pod的监控方面来讲
pod中的
容器探针
钩子函数
初始化容器
包括使用暂时卷
configMap
emptyDir
可以实现很多功能。
---------------------------------------------------------------
总的来说
k8s作为云原生时代的平台
也称为云原生时代的操作系统,
对于传统方式的容器化提供了很多功能。
资源使用率更高
服务的管理更加主动化。
安全性也比较高








免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表