准入控制器参考

此页面概述了准入控制器。

它们是什么?

准入控制器是一段代码,它在对象持久化之前拦截对 Kubernetes API 服务器的请求,但在请求经过身份验证和授权之后。

准入控制器可以是验证变异或两者兼而有之。变异控制器可以修改与它们承认的请求相关的对象;验证控制器则不能。

准入控制器限制对创建、删除、修改对象的请求。准入控制器还可以阻止自定义动词,例如通过 API 服务器代理连接到 Pod 的请求。准入控制器(也不能)阻止对读取(getwatchlist)对象的请求。

Kubernetes 1.30 中的准入控制器包括以下列表,被编译到kube-apiserver二进制文件中,并且只能由集群管理员配置。在该列表中,有两个特殊的控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。它们分别执行变异和验证准入控制 Webhook,这些 Webhook 在 API 中配置。

准入控制阶段

准入控制过程分两个阶段进行。在第一阶段,运行变异准入控制器。在第二阶段,运行验证准入控制器。请再次注意,其中一些控制器是两者兼而有之。

如果任何阶段的任何控制器拒绝请求,则整个请求将立即被拒绝,并且错误将返回给最终用户。

最后,除了有时会变异所讨论的对象之外,准入控制器有时还会产生副作用,也就是说,在请求处理过程中变异相关资源。增加配额使用量是为什么需要这样做的一个典型例子。任何此类副作用都需要相应的回收或协调过程,因为给定的准入控制器无法确定给定的请求是否会通过所有其他准入控制器。

为什么我需要它们?

Kubernetes 的几个重要功能需要启用准入控制器才能正确支持该功能。因此,没有正确配置了正确准入控制器集的 Kubernetes API 服务器是不完整的服务器,它将不支持您期望的所有功能。

如何打开准入控制器?

Kubernetes API 服务器标志enable-admission-plugins接受一个逗号分隔的准入控制插件列表,这些插件将在修改集群中的对象之前调用。例如,以下命令行启用了NamespaceLifecycleLimitRanger准入控制插件

kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ...

如何关闭准入控制器?

Kubernetes API 服务器标志disable-admission-plugins接受一个逗号分隔的准入控制插件列表,这些插件将被禁用,即使它们在默认启用的插件列表中。

kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny ...

默认情况下哪些插件已启用?

要查看启用了哪些准入插件

kube-apiserver -h | grep enable-admission-plugins

在 Kubernetes 1.30 中,默认的插件是

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

每个准入控制器做什么?

AlwaysAdmit

功能状态: Kubernetes v1.13 [已弃用]

类型:验证。

此准入控制器允许所有 Pod 进入集群。它已弃用,因为它的行为与根本没有准入控制器相同。

AlwaysDeny

功能状态: Kubernetes v1.13 [已弃用]

类型:验证。

拒绝所有请求。AlwaysDeny已弃用,因为它没有实际意义。

AlwaysPullImages

类型:变异和验证。

此准入控制器修改每个新的 Pod 以强制将镜像拉取策略设置为Always。这在多租户集群中很有用,这样用户可以确保他们的私有镜像只能被拥有拉取这些镜像凭据的人使用。如果没有此准入控制器,一旦镜像被拉取到节点,任何用户的任何 Pod 都可以使用它,只需知道镜像的名称(假设 Pod 被调度到正确的节点),而无需对镜像进行任何授权检查。启用此准入控制器后,镜像将在启动容器之前始终被拉取,这意味着需要有效的凭据。

CertificateApproval

类型:验证。

此准入控制器观察批准 CertificateSigningRequest 资源的请求,并执行额外的授权检查以确保批准用户有权批准具有 CertificateSigningRequest 资源上请求的spec.signerName的证书请求。

有关对 CertificateSigningRequest 资源执行不同操作所需的权限的更多信息,请参见证书签名请求

CertificateSigning

类型:验证。

此准入控制器观察对 CertificateSigningRequest 资源的status.certificate字段的更新,并执行额外的授权检查以确保签名用户有权签名具有 CertificateSigningRequest 资源上请求的spec.signerName的证书请求。

有关对 CertificateSigningRequest 资源执行不同操作所需的权限的更多信息,请参见证书签名请求

CertificateSubjectRestriction

类型:验证。

此准入控制器观察创建具有spec.signerNamekubernetes.io/kube-apiserver-client的 CertificateSigningRequest 资源。它拒绝任何指定system:masters的“组”(或“组织属性”)的请求。

DefaultIngressClass

类型:变异。

此准入控制器观察创建没有请求任何特定 Ingress 类的Ingress对象,并自动向它们添加默认 Ingress 类。这样,没有请求任何特殊 Ingress 类的用户就不需要关心它们,他们将获得默认的 Ingress 类。

当没有配置默认 Ingress 类时,此准入控制器不会执行任何操作。当多个 Ingress 类被标记为默认时,它会拒绝任何创建Ingress的操作,并显示错误,管理员必须重新访问他们的IngressClass对象,并将只有一个标记为默认(使用注释“ingressclass.kubernetes.io/is-default-class”)。此准入控制器忽略任何Ingress更新;它只对创建操作起作用。

有关 Ingress 类以及如何将一个 Ingress 类标记为默认的更多信息,请参见Ingress 文档。

DefaultStorageClass

类型:变异。

此准入控制器观察创建没有请求任何特定存储类的PersistentVolumeClaim对象,并自动向它们添加默认存储类。这样,没有请求任何特殊存储类的用户就不需要关心它们,他们将获得默认的存储类。

当没有配置默认存储类时,此准入控制器不会执行任何操作。当多个存储类被标记为默认时,它会拒绝任何创建PersistentVolumeClaim的操作,并显示错误,管理员必须重新访问他们的StorageClass对象,并将只有一个标记为默认。此准入控制器忽略任何PersistentVolumeClaim更新;它只对创建操作起作用。

有关持久卷声明和存储类以及如何将存储类标记为默认的更多信息,请参见持久卷 文档。

DefaultTolerationSeconds

类型:变异。

此准入控制器根据 k8s-apiserver 输入参数default-not-ready-toleration-secondsdefault-unreachable-toleration-seconds,将 Pod 对容忍污点notready:NoExecuteunreachable:NoExecute的默认宽限容忍时间设置为 5 分钟,前提是 Pod 还没有对污点node.kubernetes.io/not-ready:NoExecutenode.kubernetes.io/unreachable:NoExecute的容忍时间。default-not-ready-toleration-secondsdefault-unreachable-toleration-seconds的默认值为 5 分钟。

DenyServiceExternalIPs

类型:验证。

此准入控制器拒绝所有对Service字段externalIPs的全新使用。此功能非常强大(允许网络流量拦截),并且没有得到策略的很好控制。启用后,集群用户可能无法创建使用externalIPs的新服务,也可能无法在现有Service对象上添加新的externalIPs值。现有externalIPs的使用不受影响,用户可以从现有Service对象的externalIPs中删除值。

大多数用户根本不需要此功能,集群管理员应考虑禁用它。确实需要使用此功能的集群应考虑使用一些自定义策略来管理其使用。

此准入控制器默认情况下已禁用。

EventRateLimit

功能状态: Kubernetes v1.13 [alpha]

类型:验证。

此准入控制器缓解了 API 服务器被存储新事件的请求淹没的问题。集群管理员可以通过以下方式指定事件速率限制

  • 启用EventRateLimit准入控制器;
  • 从提供给 API 服务器命令行标志--admission-control-config-file的文件中引用EventRateLimit配置文件
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
  - name: EventRateLimit
    path: eventconfig.yaml
...

在配置中可以指定四种类型的限制

  • Server:API 服务器接收的所有事件请求(创建或修改)共享一个桶。
  • Namespace:每个命名空间都有一个专用桶。
  • User:每个用户都被分配一个桶。
  • SourceAndObject:每个事件的源和相关对象的组合都会分配一个桶。

以下是一个此类配置的示例eventconfig.yaml

apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
  - type: Namespace
    qps: 50
    burst: 100
    cacheSize: 2000
  - type: User
    qps: 10
    burst: 50

有关更多详细信息,请参见EventRateLimit 配置 API (v1alpha1)

此准入控制器默认情况下已禁用。

ExtendedResourceToleration

类型:变异。

此插件有助于创建具有扩展资源的专用节点。如果运营商想要创建具有扩展资源(如 GPU、FPGA 等)的专用节点,则预计他们会使用扩展资源名称作为键对节点进行污点。如果启用此准入控制器,它会自动将对这些污点的容忍时间添加到请求扩展资源的 Pod 中,因此用户不必手动添加这些容忍时间。

此准入控制器默认情况下已禁用。

ImagePolicyWebhook

类型:验证。

ImagePolicyWebhook 准入控制器允许后端 Webhook 进行准入决策。

此准入控制器默认情况下已禁用。

配置文件格式

ImagePolicyWebhook 使用配置文件来设置后端行为的选项。该文件可以是 json 或 yaml 格式,并具有以下格式

imagePolicy:
  kubeConfigFile: /path/to/kubeconfig/for/backend
  # time in s to cache approval
  allowTTL: 50
  # time in s to cache denial
  denyTTL: 50
  # time in ms to wait between retries
  retryBackoff: 500
  # determines behavior if the webhook backend fails
  defaultAllow: true

从提供给 API 服务器命令行标志 --admission-control-config-file 的文件中引用 ImagePolicyWebhook 配置文件

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
  - name: ImagePolicyWebhook
    path: imagepolicyconfig.yaml
...

或者,您可以将配置直接嵌入到文件中

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
  - name: ImagePolicyWebhook
    configuration:
      imagePolicy:
        kubeConfigFile: <path-to-kubeconfig-file>
        allowTTL: 50
        denyTTL: 50
        retryBackoff: 500
        defaultAllow: true

ImagePolicyWebhook 配置文件必须引用一个 kubeconfig 格式的文件,该文件设置了与后端的连接。后端必须通过 TLS 进行通信。

kubeconfig 文件的 cluster 字段必须指向远程服务,user 字段必须包含返回的授权者。

# clusters refers to the remote service.
clusters:
  - name: name-of-remote-imagepolicy-service
    cluster:
      certificate-authority: /path/to/ca.pem    # CA for verifying the remote service.
      server: https://images.example.com/policy # URL of remote service to query. Must use 'https'.

# users refers to the API server's webhook configuration.
users:
  - name: name-of-api-server
    user:
      client-certificate: /path/to/cert.pem # cert for the webhook admission controller to use
      client-key: /path/to/key.pem          # key matching the cert

有关其他 HTTP 配置,请参阅 kubeconfig 文档。

请求有效负载

在面对准入决策时,API 服务器会 POST 一个 JSON 序列化的 imagepolicy.k8s.io/v1alpha1 ImageReview 对象,描述该操作。该对象包含描述正在准入的容器以及与 *.image-policy.k8s.io/* 匹配的任何 Pod 注释的字段。

示例请求主体

{
  "apiVersion": "imagepolicy.k8s.io/v1alpha1",
  "kind": "ImageReview",
  "spec": {
    "containers": [
      {
        "image": "myrepo/myimage:v1"
      },
      {
        "image": "myrepo/myimage@sha256:beb6bd6a68f114c1dc2ea4b28db81bdf91de202a9014972bec5e4d9171d90ed"
      }
    ],
    "annotations": {
      "mycluster.image-policy.k8s.io/ticket-1234": "break-glass"
    },
    "namespace": "mynamespace"
  }
}

远程服务预计将填充请求的 status 字段并响应允许或拒绝访问。响应主体的 spec 字段将被忽略,并且可以省略。一个允许的响应将返回

{
  "apiVersion": "imagepolicy.k8s.io/v1alpha1",
  "kind": "ImageReview",
  "status": {
    "allowed": true
  }
}

要拒绝访问,服务将返回

{
  "apiVersion": "imagepolicy.k8s.io/v1alpha1",
  "kind": "ImageReview",
  "status": {
    "allowed": false,
    "reason": "image currently blacklisted"
  }
}

有关更多文档,请参阅 imagepolicy.v1alpha1 API

使用注释扩展

*.image-policy.k8s.io/* 匹配的 Pod 上的所有注释都将发送到 webhook。发送注释允许了解图像策略后端的用户向其发送额外信息,并允许不同的后端实现接受不同的信息。

您可能在此处放置的信息示例包括

  • 请求“打破玻璃”以覆盖策略,以防紧急情况。
  • 记录打破玻璃请求的工单系统的工单号
  • 向策略服务器提供有关提供的图像的图像 ID 的提示,以节省其查找时间

无论如何,注释由用户提供,并且不会以任何方式由 Kubernetes 验证。

LimitPodHardAntiAffinityTopology

类型:验证。

此准入控制器拒绝在 requiredDuringSchedulingRequiredDuringExecution 中定义除 kubernetes.io/hostname 之外的 AntiAffinity 拓扑键的任何 Pod。

此准入控制器默认情况下已禁用。

LimitRanger

类型:变异和验证。

此准入控制器将观察传入的请求,并确保它不违反 NamespaceLimitRange 对象中枚举的任何约束。如果您在 Kubernetes 部署中使用 LimitRange 对象,则必须使用此准入控制器来强制执行这些约束。LimitRanger 还可用于将默认资源请求应用于未指定任何资源请求的 Pod;目前,默认 LimitRanger 将 0.1 个 CPU 需求应用于 default 命名空间中的所有 Pod。

有关更多详细信息,请参阅 LimitRange API 参考LimitRange 示例

MutatingAdmissionWebhook

类型:变异。

此准入控制器调用与请求匹配的任何变异 webhook。匹配的 webhook 按顺序调用;如果需要,每个 webhook 都可以修改对象。

此准入控制器(顾名思义)仅在变异阶段运行。

如果此控制器调用的 webhook 具有副作用(例如,减少配额),则它必须具有一个协调系统,因为它不能保证后续 webhook 或验证准入控制器将允许请求完成。

如果您禁用 MutatingAdmissionWebhook,则还必须通过 --runtime-config 标志禁用 admissionregistration.k8s.io/v1 组/版本中的 MutatingWebhookConfiguration 对象,两者默认情况下都已启用。

在创作和安装变异 webhook 时要谨慎

  • 用户可能会对他们尝试创建的对象与他们收到的对象不同感到困惑。
  • 当他们尝试创建的对象在读回时不同时,内置控制循环可能会中断。
    • 设置最初未设置的字段不太可能导致问题,而不是覆盖原始请求中设置的字段。避免后者。
  • 对内置资源或第三方资源的控制循环的未来更改可能会破坏今天运行良好的 webhook。即使 webhook 安装 API 最终确定,也不能保证所有可能的 webhook 行为都将无限期地得到支持。

NamespaceAutoProvision

类型:变异。

此准入控制器检查命名空间资源上的所有传入请求,并检查引用的命名空间是否存在。如果找不到,它将创建一个命名空间。此准入控制器在不希望限制在使用之前创建命名空间的部署中很有用。

NamespaceExists

类型:验证。

此准入控制器检查命名空间资源上的所有请求,除了 Namespace 本身。如果请求中引用的命名空间不存在,则拒绝该请求。

NamespaceLifecycle

类型:验证。

此准入控制器强制执行正在终止的 Namespace 不能在其内创建新对象,并确保拒绝在不存在的 Namespace 中的请求。此准入控制器还阻止删除三个系统保留的命名空间 defaultkube-systemkube-public

Namespace 删除会启动一系列操作,这些操作会删除该命名空间中的所有对象(Pod、服务等)。为了强制执行该过程的完整性,我们强烈建议运行此准入控制器。

NodeRestriction

类型:验证。

此准入控制器限制 kubelet 可以修改的 NodePod 对象。为了受到此准入控制器的限制,kubelet 必须使用 system:nodes 组中的凭据,用户名格式为 system:node:<nodeName>。此类 kubelet 仅被允许修改其自己的 Node API 对象,并且仅修改绑定到其节点的 Pod API 对象。kubelet 不被允许更新或删除其 Node API 对象中的污点。

NodeRestriction 准入插件阻止 kubelet 删除其 Node API 对象,并强制执行 kubelet 对 kubernetes.io/k8s.io/ 前缀下的标签的修改,如下所示

  • 阻止 kubelet 添加/删除/更新带有 node-restriction.kubernetes.io/ 前缀的标签。此标签前缀保留供管理员为其 Node 对象添加标签以用于工作负载隔离目的,kubelet 将不被允许修改带有该前缀的标签。
  • 允许 kubelet 添加/删除/更新这些标签和标签前缀
    • kubernetes.io/hostname
    • kubernetes.io/arch
    • kubernetes.io/os
    • beta.kubernetes.io/instance-type
    • node.kubernetes.io/instance-type
    • failure-domain.beta.kubernetes.io/region(已弃用)
    • failure-domain.beta.kubernetes.io/zone(已弃用)
    • topology.kubernetes.io/region
    • topology.kubernetes.io/zone
    • kubelet.kubernetes.io/- 前缀标签
    • node.kubernetes.io/- 前缀标签

kubelet 对 kubernetes.iok8s.io 前缀下的任何其他标签的使用是保留的,将来可能会被 NodeRestriction 准入插件禁止或允许。

未来版本可能会添加其他限制,以确保 kubelet 具有正确运行所需的最小权限集。

OwnerReferencesPermissionEnforcement

类型:验证。

此准入控制器保护对对象 metadata.ownerReferences 的访问,以便只有对该对象具有删除权限的用户才能更改它。此准入控制器还保护对对象 metadata.ownerReferences[x].blockOwnerDeletion 的访问,以便只有对引用所有者finalizers 子资源具有更新权限的用户才能更改它。

PersistentVolumeClaimResize

功能状态: Kubernetes v1.24 [稳定]

类型:验证。

此准入控制器实现了额外的验证,用于检查传入的 PersistentVolumeClaim 大小调整请求。

建议启用 PersistentVolumeClaimResize 准入控制器。此准入控制器默认情况下会阻止所有声明的大小调整,除非声明的 StorageClass 通过将 allowVolumeExpansion 设置为 true 来明确启用大小调整。

例如:从以下 StorageClass 创建的所有 PersistentVolumeClaim 都支持卷扩展

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gluster-vol-default
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://192.168.10.100:8080"
  restuser: ""
  secretNamespace: ""
  secretName: ""
allowVolumeExpansion: true

有关持久卷声明的更多信息,请参阅 持久卷声明

PersistentVolumeLabel

功能状态: Kubernetes v1.13 [已弃用]

类型:变异。

此准入控制器会根据云提供商(例如 Azure 或 GCP)的定义,自动将区域或区域标签附加到持久卷。它有助于确保 Pod 和挂载的持久卷位于同一个区域和/或区域。如果准入控制器不支持自动标记您的持久卷,您可能需要手动添加标签以防止 Pod 挂载来自不同区域的卷。PersistentVolumeLabel 已弃用,因为持久卷的标记已由 云控制器管理器 接管。

此准入控制器默认情况下已禁用。

PodNodeSelector

功能状态: Kubernetes v1.5 [alpha]

类型:验证。

此准入控制器通过读取命名空间注释和全局配置来默认和限制命名空间内可以使用哪些节点选择器。

此准入控制器默认情况下已禁用。

配置文件格式

PodNodeSelector 使用配置文件来设置后端行为的选项。请注意,配置文件格式将在将来的版本中移至版本化的文件。该文件可以是 json 或 yaml 格式,并具有以下格式

podNodeSelectorPluginConfig:
  clusterDefaultNodeSelector: name-of-node-selector
  namespace1: name-of-node-selector
  namespace2: name-of-node-selector

从提供给 API 服务器命令行标志 --admission-control-config-file 的文件中引用 PodNodeSelector 配置文件

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodNodeSelector
  path: podnodeselector.yaml
...

配置注释格式

PodNodeSelector 使用注释键 scheduler.alpha.kubernetes.io/node-selector 将节点选择器分配给命名空间。

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/node-selector: name-of-node-selector
  name: namespace3

内部行为

此准入控制器具有以下行为

  1. 如果 Namespace 具有带有键 scheduler.alpha.kubernetes.io/node-selector 的注释,则使用其值作为节点选择器。
  2. 如果命名空间缺少此类注释,则使用PodNodeSelector插件配置文件中定义的clusterDefaultNodeSelector作为节点选择器。
  3. 评估 Pod 的节点选择器与命名空间节点选择器是否存在冲突。冲突会导致拒绝。
  4. 评估 Pod 的节点选择器与插件配置文件中定义的命名空间特定允许选择器是否存在冲突。冲突会导致拒绝。

PodSecurity

功能状态: Kubernetes v1.25 [稳定]

类型:验证。

PodSecurity 准入控制器在新的 Pod 被接纳之前检查它们,并根据请求的安全上下文和对 Pod 所在命名空间的允许 Pod 安全标准 的限制来确定是否应该接纳它。

有关更多信息,请参阅 Pod 安全准入 文档。

PodSecurity 替换了名为 PodSecurityPolicy 的旧准入控制器。

PodTolerationRestriction

功能状态: Kubernetes v1.7 [alpha]

类型:变异和验证。

PodTolerationRestriction 准入控制器验证 Pod 的容忍度与其命名空间的容忍度之间是否存在任何冲突。如果存在冲突,它将拒绝 Pod 请求。然后,它将命名空间上注释的容忍度合并到 Pod 的容忍度中。将对结果容忍度进行检查,以查看其是否与命名空间上注释的允许容忍度列表相匹配。如果检查成功,则接纳 Pod 请求;否则拒绝。

如果 Pod 的命名空间没有与之关联的任何默认容忍度或注释的允许容忍度,则如果指定了集群级默认容忍度或集群级允许容忍度列表,则使用它们。

命名空间的容忍度通过scheduler.alpha.kubernetes.io/defaultTolerations 注释键分配。允许的容忍度列表可以通过scheduler.alpha.kubernetes.io/tolerationsWhitelist 注释键添加。

命名空间注释示例

apiVersion: v1
kind: Namespace
metadata:
  name: apps-that-need-nodes-exclusively
  annotations:
    scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": "NoSchedule", "key": "dedicated-node"}]'
    scheduler.alpha.kubernetes.io/tolerationsWhitelist: '[{"operator": "Exists", "effect": "NoSchedule", "key": "dedicated-node"}]'

此准入控制器默认情况下已禁用。

优先级

类型:变异和验证。

优先级准入控制器使用priorityClassName 字段并填充优先级的整数值。如果找不到优先级类,则拒绝 Pod。

ResourceQuota

类型:验证。

此准入控制器将观察传入的请求,并确保它不会违反NamespaceResourceQuota 对象中枚举的任何约束。如果您在 Kubernetes 部署中使用ResourceQuota 对象,则必须使用此准入控制器来强制执行配额约束。

有关更多详细信息,请参阅 ResourceQuota API 参考Resource Quota 示例

RuntimeClass

类型:变异和验证。

如果您定义了一个具有 Pod 开销 配置的 RuntimeClass,则此准入控制器将检查传入的 Pod。启用后,此准入控制器将拒绝任何已设置开销的 Pod 创建请求。对于在.spec 中配置并选择了 RuntimeClass 的 Pod,此准入控制器将根据相应 RuntimeClass 中定义的值在 Pod 中设置.spec.overhead

有关更多信息,另请参阅 Pod 开销

ServiceAccount

类型:变异和验证。

此准入控制器实现了对 服务帐户 的自动化。Kubernetes 项目强烈建议启用此准入控制器。如果您打算使用 KubernetesServiceAccount 对象,则应启用此准入控制器。

关于注释kubernetes.io/enforce-mountable-secrets:虽然注释的名称表明它只涉及 Secrets 的挂载,但其强制执行也扩展到 Secrets 在 Pod 上下文中使用的其他方式。因此,必须确保在 ServiceAccount 中正确指定所有引用的 Secrets。

StorageObjectInUseProtection

类型:变异。

StorageObjectInUseProtection 插件将kubernetes.io/pvc-protectionkubernetes.io/pv-protection 终结器添加到新创建的持久卷声明 (PVC) 或持久卷 (PV)。如果用户删除了 PVC 或 PV,则在 PVC 或 PV 保护控制器从 PVC 或 PV 中删除终结器之前,不会删除 PVC 或 PV。有关更详细的信息,请参阅 正在使用的存储对象保护

TaintNodesByCondition

类型:变异。

此准入控制器将新创建的节点标记为NotReadyNoSchedule。这种标记避免了可能导致 Pod 在其标记更新以准确反映其报告的条件之前被调度到新节点上的竞争条件。

ValidatingAdmissionPolicy

类型:验证。

此准入控制器 为传入的匹配请求实现 CEL 验证。当功能门validatingadmissionpolicyadmissionregistration.k8s.io/v1alpha1 组/版本都启用时,它将被启用。如果任何 ValidatingAdmissionPolicy 失败,则请求失败。

ValidatingAdmissionWebhook

类型:验证。

此准入控制器将调用任何与请求匹配的验证 Webhook。匹配的 Webhook 将并行调用;如果其中任何一个拒绝请求,则请求失败。此准入控制器仅在验证阶段运行;它调用的 Webhook 可能不会更改对象,这与MutatingAdmissionWebhook 准入控制器调用的 Webhook 不同。

如果此调用调用的 Webhook 具有副作用(例如,减少配额),则它必须具有一个协调系统,因为它不能保证后续 Webhook 或其他验证准入控制器将允许请求完成。

如果您禁用了 ValidatingAdmissionWebhook,则还必须通过--runtime-config 标志禁用admissionregistration.k8s.io/v1 组/版本中的ValidatingWebhookConfiguration 对象。

是的。推荐的准入控制器默认情况下是启用的(显示 此处),因此您无需显式指定它们。您可以使用--enable-admission-plugins 标志启用除默认集之外的其他准入控制器(顺序无关紧要)。

上次修改时间:2024 年 2 月 18 日下午 10:07 PST:重新排序 authn/authz 页面 (9f327512c6)