《Kubernetes设计与实现》
  • Introduction
  • 内容简介
  • 前言
  • [第二章:Kubernetes基础]
    • 2.3 Kubernetes API
  • [第三章:工作负载管理]
    • [3.1 Pod]
      • 3.1.1 Pod概述
      • 3.1.1 Pod初体验
    • [3.2 ReplicationController]
      • 3.2.1 ReplicationController概述
      • 3.2.2 ReplicationController初体验
    • [3.3 ReplicaSet]
      • 3.3.1 ReplicaSet概述
      • 3.3.2 ReplicaSet初体验
    • [3.4 Deployment]
      • 3.4.1 Deployment概述
      • 3.4.2 Deployment初体验
    • [3.5 DaemonSet]
      • 3.5.1 DaemonSet概述
      • 3.5.2 DaemonSet初体验
  • [第四章:服务]
    • [4.1 Service]
      • 4.1.1 Service概述
      • 4.1.1 Service上手体验
  • [第六章:配置管理]
    • [6.1 Secret--机密信息管理]
      • 6.1.1 Secret概述
  • [第七章:集群认证]
    • [7.1 证书]
      • 7.1.1 证书基础
      • 7.1.2 证书签发流程
  • [第九章:准入控制器]
    • [9.1 准入控制器概述]
      • 9.1.1 概述
      • [9.1.2 内置默认启动的插件]
        • 9.1.2.1 NamespaceLifecycle
        • 9.1.2.15 MutatingAdmissionWebhook
  • [第十章:ResourceQuota]
    • 10.1 ResourceQuota概述
  • [第十六章:API设计约定]
    • 16.1 字段可选性设计约定
    • 16.2 condition设计约定
    • 16.3 event设计约定
  • [第十九章:Kubernetes生态]
    • [19.1 Kind]
      • [19.1.1 Kind概述]
      • 19.1.2 映射端口到主机
      • 19.1.3 配置端口转发
由 GitBook 提供支持
在本页
  • 什么是准入控制器
  • 准入控制器配置
  • 开启控制器插件
  • 关闭控制插件
  • 参考资料:

这有帮助吗?

  1. [第九章:准入控制器]
  2. [9.1 准入控制器概述]

9.1.1 概述

上一页[9.1 准入控制器概述]下一页[9.1.2 内置默认启动的插件]

最后更新于4年前

这有帮助吗?

什么是准入控制器

每个针对Kubernetes资源对象的操作请求,都要经过kube-apiserver的层层审查才会被放行。对于读操作而言,需要经过认证(是否是合法用户)和鉴权(是否拥有权限);而对于写操作而言,除了要经过认证和鉴权外,还要检查请求是合乎要求,只有顺利通过这些审查才会被持久化到etcd存储中。

准入控制器(Admission Controller)是用于审查请求的组件,它会劫持发往kube-apiserver的请求,对请求进行审查(必要时也会修改请求内容),它是kube-apiserver审查链中重要的一环,不合理的请求会被拒绝。

kube-apiserver支持配置多个准入控制器,准入控制器分为修改型(Mutating)控制器和校验型(Validating)控制器。修改型控制器会自动根据指定的策略对请求进行修改,而校验型控制器则只是单纯地检查请求是否合乎要求,充当“看门狗”的角色。

多个准入控制器以插件(Webhook Plugin)的形式被组织起来,kube-apiserver在审查请求时会先把请求交给修改型控制器对请求进行必要的修改,然后再将请求交给校验型控制器进行审查。下图展示了请求的审查完整路径,以及准入控制器所在的位置:

API请求到达kube-apiserver后会先进行认证(Authentication)和鉴权(Authorization),然后把请求交给修改型准入控制器进行必要的修改(多个修改型准入控制器串行执行),当所有修改型准入控制器执行完毕后,再使用OpenAPI 校验功能进行初步的语法校验,接着再把请求交给校验型准入控制器进行语法或语义的校验(多个修改型准入控制器并行执行),最后再写入etcd。上面中的任何一个审查环节、任何一个准入控制器返回失败,都会造成请求被拒绝。

准入控制器配置

准入控制器根据其部署形式可分为内置控制器和动态控制器两种。内置控制器集成在kube-apiserver中,以插件的形式提供,每个插件都可以通过参数控制启用或禁止;而动态控制器则是按一定标准实现的服务。关于动态控制器的更多内容将会在后续章节中展开介绍,本节主要介绍内置控制器的配置方法。

kube-apiserver提供了数十个准入控制器插件,其中一些是默认开启的,也可以通过参数显式地控制启用或禁用的插件。

开启控制器插件

通过kube-apiserver的--enable-admission-plugins参数可以设置除默认启用的控制器插件以外需要额外启用的插件,多个插件名字以逗号分隔,例如以下参数开启NodeRestriction和ResourceQuota两个插件。

--enable-admission-plugins=NodeRestriction,ResourceQuota

该参数主要在需要启用默认禁用的插件时使用。

关闭控制插件

通过kube-apiserver的--disable-admission-plugins参数可以设置禁用的控制器插件,同样多个插件名字以逗号分隔,例如以下参数关闭PodNodeSelector和AlwaysDeny两个插件。

--disable-admission-plugins=PodNodeSelector,AlwaysDeny

该参数主要在需要禁用默认启用的插件时使用。

参考资料:

《Using Admission Controllers》

《A Guide to Kubernetes Admission Controllers》

https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers
https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers