深度解析 | K8S API Server之请求处理

简介: 对Kubernetes API 请求流程进行解析。后续还将对API Server的存储和扩展点等主题进行介绍。本篇是Kubernetes API Server系列第三篇。 请求和处理流程 在介绍了Kubernetes API中使用到的术语之后,接下来我们介绍如何处理API请求。

对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技术社区-深度解析 | K8S API Server之请求处理

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
28天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
2月前
|
tengine 网络协议 API
阿里云DNS常见问题之DNS中alidns的api调用失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
171 0
|
2月前
|
JSON 数据格式
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
28 0
|
3月前
|
Java 程序员 API
Java并发基础:concurrent Flow API全面解析
java.util.concurrent.Flow定义了响应式编程的核心接口,促进了Java在异步数据处理和背压机制方面的标准化,这使得第三方库如Reactor和RxJava能够基于这些接口提供丰富的实现和功能,同时简化了响应式编程在Java中的使用,Flow API增强了Java在并发编程领域的灵活性,使得处理异步数据流变得更加自然和高效。
112 0
Java并发基础:concurrent Flow API全面解析
|
1天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
2天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
8天前
|
Web App开发 前端开发 Java
SpringBoot之请求的详细解析
SpringBoot之请求的详细解析
22 0
|
8天前
|
存储 缓存 Java
SpringBootWeb请求响应之前言及状态码的详细解析
SpringBootWeb请求响应之前言及状态码的详细解析
11 0
|
13天前
|
机器学习/深度学习 API TensorFlow
TensorFlow的高级API:tf.keras深度解析
【4月更文挑战第17天】本文深入解析了TensorFlow的高级API `tf.keras`,包括顺序模型和函数式API的模型构建,以及模型编译、训练、评估和预测的步骤。`tf.keras`结合了Keras的易用性和TensorFlow的性能,支持回调函数、模型保存与加载等高级特性,助力提升深度学习开发效率。

推荐镜像

更多