关于kubernetes:Kubernetes-准入控制器详解

2次阅读

共计 2065 个字符,预计需要花费 6 分钟才能阅读完成。

Kubernetes 管制立体由几个组件组成。其中一个组件是 kube-apiserver,简略的 API server。 它公开了一个 REST 端点,用户、集群组件以及客户端应用程序能够通过该端点与集群进行通信。总的来说,它会进行以下操作:

  1. 从客户端应用程序(如 kubectl)接管规范 HTTP 申请。
  2. 验证传入申请并利用受权策略。
  3. 在胜利的身份验证中,它能依据端点对象(Pod、Deployments、Namespace 等)和 http 动作(Create、Put、Get、Delete 等)执行操作。
  4. 对 etcd 数据存储进行更改以保留数据。
  5. 操作实现,它就向客户端发送响应。

申请流程

当初让咱们思考这样一种状况: 在申请通过身份验证后,但在对 etcd 数据存储进行任何更改之前,咱们须要拦挡该申请。 例如:

  1. 拦挡客户端发送的申请。
  2. 解析申请并执行操作。
  3. 依据申请的后果,决定对 etcd 进行更改还是回绝对 etcd 进行更改。

Kubernetes 准入控制器就是用于这种状况的插件。在代码层面,准入控制器逻辑与 API server 逻辑解耦,这样用户就能够开发自定义拦截器(custom interceptor),无论何时对象被创立、更新或从 etcd 中删除,都能够调用该拦截器。

有了准入控制器,从任意起源到 API server 的申请流将如下所示:

准入控制器阶段(来自官网文档)

官网文档地址:https://kubernetes.io/blog/20…

依据准入控制器执行的操作类型,它能够分为 3 种类型:

  • Mutating(变更)
  • Validating(验证)
  • Both(两者都有)

Mutating: 这种控制器能够解析申请,并在申请向下发送之前对申请进行更改(变更申请)。

示例:AlwaysPullImages

Validating: 这种控制器能够解析申请并依据特定数据进行验证。

示例:NamespaceExists

Both: 这种控制器能够执行变更和验证两种操作。

示例:CertificateSigning

无关这些控制器更多信息,查看官网文档:https://kubernetes.io/docs/re…

准入控制器过程包含按程序执行的 2 个阶段:

  1. Mutating(变更)阶段 (先执行)
  2. Validation(验证)阶段 (变更阶段后执行)

Kubernetes 集群曾经在应用准入控制器来执行许多工作。

Kubernetes 附带的准入控制器列表:https://kubernetes.io/docs/re…

通过该列表,咱们能够发现大多数操作,如 AlwaysPullImages、DefaultStorageClass、PodSecurityPolicy 等,实际上都是由不同的准入控制器执行的。

如何启用或禁用准入控制器?

要启用准入控制器,咱们必须在启动 kube-apiserver 时,将以逗号分隔的准入控制器插件名称列表传递给 --enable-ading-plugins。对于默认插件,命令如下所示:

要禁用准入控制器插件,能够将插件名称列表传递给 --disable-admission-plugins。它将笼罩默认启用的插件列表。

默认准入控制器

  • NamespaceLifecycle
  • LimitRanger
  • ServiceAccount
  • TaintNodesByCondition
  • Priority
  • DefaultTolerationSeconds
  • DefaultStorageClass
  • StorageObjectInUseProtection
  • PersistentVolumeClaimResize
  • RuntimeClass
  • CertificateApproval
  • CertificateSigning
  • CertificateSubjectRestriction
  • DefaultIngressClass
  • MutatingAdmissionWebhook
  • ValidatingAdmissionWebhook
  • ResourceQuota

为什么要应用准入控制器?

准入控制器能提供额定的平安和治理层,以帮忙 Kubernetes 集群的用户应用。

执行策略 :通过应用自定义准入控制器,咱们能够验证申请并查看它是否蕴含特定的所需信息。例如,咱们能够查看 Pod 是否设置了正确的标签。如果没有,那能够一起回绝该申请。某些状况下,如果申请中短少一些字段,咱们也能够更改这些字段。例如,如果 Pod 没有设置资源限度,咱们能够为 Pod 增加特定的资源限度。通过这样的形式,除非明确指定,集群中的所有 Pod 都将依据咱们的要求设置资源限度。Limit Range 就是这种实现。

安全性 :咱们能够回绝不遵循特定标准的申请。例如,没有一个 Pod 申请能够将平安网关设置为以 root 用户身份运行。

对立工作负载 :通过更改申请并为用户未设置的标准设置默认值,咱们能够确保集群上运行的工作负载是对立的,并遵循集群管理员定义的特定规范。这些就是咱们开始应用 Kubernetes 准入控制器须要晓得的所有实践。

原文链接:https://mp.weixin.qq.com/s/tj…

正文完
 0