diff --git a/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md b/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md index ee739723c5..d32fbd4a9e 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md +++ b/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md @@ -1,5 +1,6 @@ --- -title: 使用准入控制器 +title: 准入控制器参考 +linkTitle: 准入控制器 content_type: concept weight: 30 --- @@ -12,7 +13,8 @@ reviewers: - erictune - janetkuo - thockin -title: Using Admission Controllers +title: Admission Controllers Reference +linkTitle: Admission Controllers content_type: concept weight: 30 --> @@ -31,9 +33,30 @@ This page provides an overview of Admission Controllers. ## 什么是准入控制插件? {#what-are-they} +**准入控制器** 是一段代码,它会在请求通过认证和鉴权之后、对象被持久化之前拦截到达 API +服务器的请求。 + +准入控制器可以执行**验证(Validating)** 和/或**变更(Mutating)** 操作。 +变更(mutating)控制器可以根据被其接受的请求更改相关对象;验证(validating)控制器则不行。 + +准入控制器限制创建、删除、修改对象的请求。 +准入控制器也可以阻止自定义动作,例如通过 API 服务器代理连接到 Pod 的请求。 +准入控制器**不会** (也不能)阻止读取(**get**、**watch** 或 **list**)对象的请求。 + + -准入控制器是一段代码,它会在请求通过认证和授权之后、对象被持久化之前拦截到达 API -服务器的请求。控制器由下面的[列表](#what-does-each-admission-controller-do)组成, +Kubernetes {{< skew currentVersion >}} +中的准入控制器由下面的[列表](#what-does-each-admission-controller-do)组成, 并编译进 `kube-apiserver` 可执行文件,并且只能由集群管理员配置。 在该列表中,有两个特殊的控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。 -它们根据 API 中的配置,分别执行变更和验证 -[准入控制 webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)。 +它们根据 API 中的配置, +分别执行变更和验证[准入控制 webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)。 -准入控制器可以执行 “验证(Validating)” 和/或 “变更(Mutating)” 操作。 -变更(mutating)控制器可以根据被其接受的请求更改相关对象;验证(validating)控制器则不行。 - -准入控制器限制创建、删除、修改对象或连接到代理的请求,不限制读取对象的请求。 +## 准入控制阶段 {#admission-control-phases} 准入控制过程分为两个阶段。第一阶段,运行变更准入控制器。第二阶段,运行验证准入控制器。 再次提醒,某些控制器既是变更准入控制器又是验证准入控制器。 @@ -89,20 +106,19 @@ other admission controllers. ## 为什么需要准入控制器? {#why-do-i-need-them} -Kubernetes 的许多高级功能都要求启用一个准入控制器,以便正确地支持该特性。 +Kubernetes 的若干重要功能都要求启用一个准入控制器,以便正确地支持该特性。 因此,没有正确配置准入控制器的 Kubernetes API 服务器是不完整的,它无法支持你所期望的所有特性。 -在目前版本中,默认启用的插件有: +在 Kubernetes {{< skew currentVersion >}} 中,默认启用的插件有: ```shell CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, PodSecurity, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook @@ -177,24 +193,24 @@ CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultI {{< feature-state for_k8s_version="v1.13" state="deprecated" >}} -该准入控制器允许所有的 Pod 进入集群。此插件已被弃用,因其行为与没有准入控制器一样。 +该准入控制器允许所有的 Pod 进入集群。此插件**已被弃用**,因其行为与没有准入控制器一样。 ### AlwaysDeny {#alwaysdeny} {{< feature-state for_k8s_version="v1.13" state="deprecated" >}} -拒绝所有的请求。由于它没有实际意义,已被弃用。 +拒绝所有的请求。由于它没有实际意义,**已被弃用**。 ### AlwaysPullImages {#alwayspullimages} -该准入控制器会修改每个新创建的 Pod,将其镜像拉取策略设置为 Always。 +该准入控制器会修改每个新创建的 Pod,将其镜像拉取策略设置为 `Always`。 这在多租户集群中是有用的,这样用户就可以放心,他们的私有镜像只能被那些有凭证的人使用。 如果没有这个准入控制器,一旦镜像被拉取到节点上,任何用户的 Pod 都可以通过已了解到的镜像的名称 (假设 Pod 被调度到正确的节点上)来使用它,而不需要对镜像进行任何鉴权检查。 @@ -211,13 +227,13 @@ required. ### CertificateApproval {#certificateapproval} -此准入控制器获取“审批” CertificateSigningRequest 资源的请求并执行额外的鉴权检查, +此准入控制器获取审批 CertificateSigningRequest 资源的请求并执行额外的鉴权检查, 以确保针对设置了 `spec.signerName` 的 CertificateSigningRequest 资源而言, -审批请求的用户有权限对证书请求执行 `approve` 操作。 +审批请求的用户有权限对证书请求执行 **审批** 操作。 此准入控制器监视对 CertificateSigningRequest 资源的 `status.certificate` 字段的更新请求, 并执行额外的鉴权检查,以确保针对设置了 `spec.signerName` 的 CertificateSigningRequest 资源而言, -签发证书的用户有权限对证书请求执行 `sign` 操作。 +签发证书的用户有权限对证书请求执行 **签发** 操作。 关于 Ingress 类以及如何将 Ingress 类标记为默认的更多信息,请参见 @@ -320,7 +336,7 @@ storage classes and how to mark a storage class as default. -此准入控制器缓解了事件请求淹没 API 服务器的问题。集群管理员可以通过以下方式指定事件速率限制: +此准入控制器缓解了请求存储新事件时淹没 API 服务器的问题。集群管理员可以通过以下方式指定事件速率限制: -* `Server`: API 服务器收到的所有事件请求共享一个桶。 -* `Namespace`: 每个名字空间都对应一个专用的桶。 -* `User`: 为每个用户分配一个桶。 -* `SourceAndObject`: 根据事件的来源和涉及对象的各种组合分配桶。 +* `Server`:API 服务器收到的所有(创建或修改)Event 请求共享一个桶。 +* `Namespace`:每个名字空间都对应一个专用的桶。 +* `User`:为每个用户分配一个桶。 +* `SourceAndObject`:根据事件的来源和涉及对象的各种组合分配桶。 -#### 配置文件格式 {#configuration-file-format} +#### 配置文件格式 {#imagereview-config-file-format} ImagePolicyWebhook 使用配置文件来为后端行为设置选项。该文件可以是 JSON 或 YAML, 并具有以下格式: @@ -638,11 +654,11 @@ An example request body: ``` -远程服务将填充请求的 `ImageReviewStatus` 字段,并返回允许或不允许访问的响应。 +远程服务将填充请求的 `status` 字段,并返回允许或不允许访问的响应。 响应体的 `spec` 字段会被忽略,并且可以被省略。一个允许访问应答会返回: ```json @@ -904,15 +920,15 @@ permissions required to operate correctly. 此准入控制器保护对对象的 `metadata.ownerReferences` 的访问,以便只有对该对象具有 -“delete” 权限的用户才能对其进行更改。 +**delete** 权限的用户才能对其进行更改。 该准入控制器还保护对 `metadata.ownerReferences[x].blockOwnerDeletion` 对象的访问, -以便只有对所引用的 **属主(owner)** 的 `finalizers` 子资源具有 “update” +以便只有对所引用的 **属主(owner)** 的 `finalizers` 子资源具有 **update** 权限的用户才能对其进行更改。 ### PersistentVolumeClaimResize {#persistentvolumeclaimresize} @@ -964,21 +980,21 @@ For more information about persistent volume claims, see [PersistentVolumeClaims -此准入控制器会自动将由云提供商(如 GCE、AWS)定义的区(region)或区域(zone) +此准入控制器会自动将由云提供商(如 Azure 或 GCP)定义的区(region)或区域(zone) 标签附加到 PersistentVolume 上。这有助于确保 Pod 和 PersistentVolume 位于相同的区或区域。 如果准入控制器不支持为 PersistentVolumes 自动添加标签,那你可能需要手动添加标签, 以防止 Pod 挂载其他区域的卷。 -PersistentVolumeLabel 已被弃用, +PersistentVolumeLabel **已被弃用**, 为持久卷添加标签的操作已由{{< glossary_tooltip text="云管理控制器" term_id="cloud-controller-manager" >}}接管。 此准入控制器默认被禁用。 @@ -1265,13 +1281,14 @@ pod privileges. 此准入控制器实现了 [ServiceAccount](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/) -的自动化。 -如果你打算使用 Kubernetes 的 ServiceAccount 对象,我们强烈建议你使用这个准入控制器。 +的自动化。强烈推荐为 Kubernetes 项目启用此准入控制器。 +如果你打算使用 Kubernetes 的 `ServiceAccount` 对象,你应启用这个准入控制器。 ### StorageObjectInUseProtection {#storageobjectinuseprotection} @@ -1298,7 +1315,8 @@ Nodes as `NotReady` and `NoSchedule`. That tainting avoids a race condition that to be scheduled on new Nodes before their taints were updated to accurately reflect their reported conditions. --> -该准入控制器为新创建的节点添加 `NotReady` 和 `NoSchedule` {{< glossary_tooltip text="污点" term_id="taint" >}}。 +该准入控制器为新创建的节点添加 `NotReady` 和 `NoSchedule` +{{< glossary_tooltip text="污点" term_id="taint" >}}。 这些污点能够避免一些竞态条件的发生,而这类竞态条件可能导致 Pod 在更新节点污点以准确反映其所报告状况之前,就被调度到新节点上。 @@ -1340,7 +1358,7 @@ so you do not need to explicitly specify them. You can enable additional admission controllers beyond the default set using the `--enable-admission-plugins` flag (**order doesn't matter**). --> -## 有推荐的准入控制器吗? +## 有推荐的准入控制器吗? {#is-there-a-recommended-set-of-admission-controllers-to-use} 有。推荐使用的准入控制器默认情况下都处于启用状态 (请查看[这里](/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/#options))。