用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
k8s中,ingress的实现原理,及其架构。
k8s中,ingress的实现原理,及其架构。
tsx81428
论坛元老
|
2024-12-3 19:20:15
|
显示全部楼层
|
阅读模式
楼主
主题
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 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
tsx81428
论坛元老
这个人很懒什么都没写!
楼主热帖
【pandas小技巧】--读取多个文件 ...
【参考】开发工程师职级与职级界定-职 ...
MySQL与Redis数据双写一致性工程落地案 ...
【毕业季】纸短情长,浅谈大二以前的学 ...
读SQL进阶教程笔记06_外连接
mysql修改表字段长度
kubernetes之镜像拉取策略ImagePullSec ...
BinaryBombs(二进制炸弹实验) ...
Apache Shiro反序列化漏洞(Shiro550) ...
计算机系统装配与集成实验
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表