理清 Kubernetes 中的准入控制(Admission Controller)

大家好,我是张晋涛。

在我之前发布的文章 《云原生时代下的容器镜像安全》(系列)中,我提到过 Kubernetes 集群的核心组件 --  kube-apiserver,它允许来自终端用户或集群的各组件与之进行通信(例如,查询、创建、修改或删除 Kubernetes 资源)。

本篇我们将聚焦于 kube-apiserver 请求处理过程中一个很重要的部分 -- 准入控制器(Admission Controller)

K8s 的准入控制器是什么

K8s 中的请求处理流程

在聊 K8s 准入控制器是什么之前,让我们先来回顾一下 Kubernetes API 的处理具体请求的过程。

b36103911ab63e5c63999b220997e822.png
img

图 1 ,Kubernetes API 处理请求的过程 (从 API Handler 到 etcd 持久化的过程)

如上图所示,每个 API 的请求从开始被 kube-apiserver 接收到最终持久化到 ETCD 的过程,即为 Kubernetes API 的请求处理流程。

它主要包含了以下几个部分:

  • API Handler -- 主要负责提供服务,接收请求。

对于其内部实现而言,请求会先到 FullHandlerChain (它是由 DefaultBuildHandlerChain 构建出来的)是一个 director 对象

type director struct {
 name               string
 goRestfulContainer *restful.Container
 nonGoRestfulMux    *mux.PathRecorderMux
}

director根据配置进行初始化,如果 goRestfulContainer的 WebServices 的 RootPath 是 /apis,或者请求前缀与 RootPath 匹配,则进入 Restful 处理链路。

  • Authentication -- 认证的流程。

在TLS 连接建立后,会进行认证处理,如果请求认证失败,会拒绝该请求并返回 401 错误码;如果认证成功,将进行到鉴权的部分。目前支持的客户端认证方式有很多,例如:x509 客户端证书、Bearer Token、基于用户名密码的认证、OpenID 认证等。由于这些内容不是本篇的重点我们暂且跳过,感兴趣的小伙伴可以在评论区留言讨论。

  • Authorization -- 鉴权的流程。

对于 Kubernetes 而言,支持多种的鉴权模式,例如,ABAC 模式,RBAC 模式和 Webhook 模式等。我们在创建集群时,可以直接为 kube-apiserver 传递参数进行配置,这里也不赘述了。

  • Mutating Admission -- 指执行可用于变更操作的准入控制器,下文中会详细介绍。

  • Object Schema Validation -- 对资源对象的 schema 校验。

  • Validating Admission -- 指执行可用于验证操作的准入控制器,下文中会详细介绍。

  • ETCD -- ETCD 实现资源的持久化存储。

上面便是一个请求的处理流程,其中 Mutating Admission 和 Validating Admission 便是我们今天的主角。我们来详细的看一看。

什么是准入控制器(Admission Controller)

准入控制器是指在请求通过认证和授权之后,可用于对其进行变更操作或验证操作的一些代码或功能。

准入控制的过程分为两个阶段:

  • 第一阶段,运行变更准入控制器(Mutating Admission)。它可以修改被它接受的对象,这就引出了它的另一个作用,将相关资源作为请求处理的一部分进行变更;

  • 第二阶段,运行验证准入控制器(Val

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张晋涛-MoeLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值