博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度解析 | K8S API Server之请求处理
阅读量:5790 次
发布时间:2019-06-18

本文共 1720 字,大约阅读时间需要 5 分钟。

对Kubernetes API 请求流程进行解析。后续还将对API Server的存储和扩展点等主题进行介绍。本篇是Kubernetes API Server系列第三篇。

请求和处理流程   

在介绍了Kubernetes API中使用到的术语之后,接下来我们介绍如何处理API请求。API源码存在于kubernetes/pkg/api路径中,会处理集群内以及集群外客户端的请求。

那么,当HTTP请求到达Kubernetes API时,具体会发现什么呢?从上层看,会发现以下交互:

1.HTTP请求由一串过滤器(filters)进行处理,这些过滤器注册在DefaultBuildHandlerChain()(参阅源码:https://github.com/kubernetes/apiserver中的config.go)中,并执行相应的处理。过滤器要么会将信息传递并附加到ctx.RequestInfo上(例如通过了身份认证的用户),要么返回适当的HTTP响应代码。

2.第二步,复用器(multiplexer,参阅源码:https://github.com/kubernetes/apiserver中的container.go)会根据HTTP路径,将HTTP请求路由到相应的处理程序(handler)。

3.第三步,routes(在routes/*中定义)会将处理程序(handler)与HTTP路径进行连接。

4.第四步,按照API Group进行注册的处理程序(参阅源码:https://github.com/kubernetes/apiserver中的groupversion.go和installer.go),会处理HTTP请求和上下文(context,如user、rights等),并将请求的对象从存储中传送出来。

注意,为了简洁,在上图中我们省略了HTTP路径中的$NAMESPACE字段。

现在我们进一步深入的对前文中提到的DefaultBuildHandlerChain()中建立的过滤器(filters)进行介绍:

WithRequestInfo():在requestinfo.go中定义,将RequestInfo附加到上下文中。

WithMaxInFlightLimit():在maxinflight.go中定义,对当前的请求数量进行限制。

WithTimeoutForNonLongRunningRequests():在timeout.go中定义,超时暂停非长时间运行请求(如大多数GET,PUT,POST,DELETE请求),这种请求与长时间运行请求(如watch和proxy请求)正好相反。

WithPanicRecovery():在wrap.go中定义,包装一个http Handler来恢复和记录报错。

WithCORS():在cors.go中定义,提供了一个CORS实现;CORS代表跨原始资源共享(Cross-Origin Resource Sharing),是一种允许嵌入在HTML页面中的JavaScript生成XMLHttpRequests请求到一个域(domain)的机制,这个域不同于JavaScript的初始起源。

WithAuthentication():在authentication.go中定义,尝试以用户身份对给定的请求进行验证,并将用户信息存储在提供的上下文中。成功后,授权HTTP header将从请求中删除。

WithAudit():在audit.go中定义,使用所有传入请求的审计日志信息来充实handler。审计日志的条目包含很多信息,例如请求的源IP、调用操作的用户信息以及请求的命名空间等。

WithImpersonation():在impersonation.go中定义,通过检查试图对用户进行修改的请求(类似sudo),来对假用户进行处理;

WithAuthorization():在authorization.go中定义,将所有授权的请求传递给已经将请求分发给正确的handler的复用器,否则返回禁止错误(forbidden error)。

本文转移K8S技术社区-

转载地址:http://qfqyx.baihongyu.com/

你可能感兴趣的文章
如何解决Linux下的软件包依赖问题
查看>>
统一沟通-技巧-2-Lync 2010-照片-无显示-组织-显示-为-自己
查看>>
应用虚拟化,时不我待的变革——“瑞友杯”虚拟化征文
查看>>
IDS与IPS的区别
查看>>
Lync日常维护之二:批量修改用户所属SIP域
查看>>
在工作中学习,在学习中工作
查看>>
6436B Lab13 设计和实现域的重构
查看>>
我的友情链接
查看>>
性能压测诡异的Requests/second 响应刺尖问题
查看>>
Java 并发编程内部分享PPT分享
查看>>
酷客多荣获“2018年度中国最具创新力小程序品牌”奖
查看>>
Word 2003从入门到精通第4讲(表格)
查看>>
puppet成长日记二 Package资源详细介绍及案例分析
查看>>
免费下载pro puppet 2高清pdf,需要的抓紧
查看>>
一个民工的数字化生活
查看>>
台媒关于近期SIEM市场的一个综述
查看>>
数据库安全:不只是DAM
查看>>
《统一沟通-微软-实战》-3-部署-Exchange 2010-4-基本配置
查看>>
八、IO优化(2)IO性能评估工具
查看>>
web2.0带来了前端软件开发工程师
查看>>