Kubernetes教程

Kubernetes Pod安全性准入

一、Pod 安全性准入

Kubernetes Pod安全性标准(Security Standard)定义了不同的隔离级别,用于限制 Pod 的行为。这些标准能够以一种清晰、一致的方式定义如何限制 Pod 行为。

Kubernetes 提供了一个内置的 Pod Security Admission Controller,用于执行 Pod 安全标准(Pod Security Standard)。在创建 Pod 时,这些 Pod 安全限制将在名字空间级别应用。

二、Pod安全性级别

Pod 安全性准入插件对 Pod 的安全性上下文有一定的要求,并且依据 Pod 安全性标准Pod 安全性准入插件对 Pod 的安全性上下文有一定的要求,并且依据 Pod 安全性标准所定义的三个级别(privileged、baseline 和 restricted)对其他字段也有要求。

三、设置Pod控制标签

为名字空间设置 Pod 安全性准入控制标签。一旦特性被启用或者安装了 Webhook,可以配置名字空间以定义每个名字空间中 Pod 安全性准入控制模式。Kubernetes 定义了一组标签,可以设置这些标签来定义某个名字空间上要使用的预定义的 Pod 安全性标准级别。所选择的标签定义了检测到潜在违例时,控制面要采取什么样的动作。

模式 描述
enforce 策略违例会导致 Pod 被拒绝
audit 策略违例会触发审计日志中记录新事件时添加审计注解;但是 Pod 仍是被接受的。
warn 策略违例会触发用户可见的警告信息,但是 Pod 仍是被接受的。

名字空间可以配置任何一种或者所有模式,或者甚至为不同的模式设置不同的级别。

对于每种模式,决定所使用策略的标签有两个:

# 模式的级别标签用来标示对应模式所应用的策略级别
#
# MODE 必须是 `enforce`、`audit` 或 `warn` 之一
# LEVEL 必须是 `privileged`、baseline` 或 `restricted` 之一
pod-security.kubernetes.io/<MODE>: <LEVEL>
# 可选:针对每个模式版本的版本标签可以将策略锁定到
# 给定 Kubernetes 小版本号所附带的版本(例如 v1.28)
#
# MODE 必须是 `enforce`、`audit` 或 `warn` 之一
# VERSION 必须是一个合法的 Kubernetes 小版本号或者 `latest`
pod-security.kubernetes.io/<MODE>-version: <VERSION>

四、负载资源和Pod 模板

Pod 通常是通过创建 Deployment 或 Job 这类工作负载对象来间接创建的。工作负载对象为工作负载资源定义一个 Pod 模板和一个对应的负责基于该模板来创建 Pod 的控制器。为了尽早地捕获违例状况,audit 和 warn 模式都应用到负载资源。不过,enforce 模式并不应用到工作负载资源,仅应用到所生成的 Pod 对象上。

五、豁免

可以为 Pod 安全性的实施设置豁免(Exemptions)规则,从而允许可以为 Pod 安全性的实施设置豁免(Exemptions)规则,从而允许创建一些本来会被与给定名字空间相关的策略所禁止的 Pod。豁免规则可以在准入控制器配置中静态配置。

豁免规则必须显式枚举。满足豁免标准的请求会被准入控制器忽略(所有 enforce、audit 和 warn 行为都会被略过)。豁免的维度包括:

  • Username:来自用户名已被豁免的、已认证的(或伪装的)的用户的请求会被忽略。
  • RuntimeClassName:指定了已豁免的运行时类名称的 Pod 和负载资源会被忽略。
  • Namespace:位于被豁免的名字空间中的 Pod 和负载资源会被忽略。

注意:大多数 Pod 是作为对工作负载资源的响应, 由控制器所创建的,也就是说为某最终用户提供豁免时,只会当该用户直接创建 Pod 时对其实施安全策略的豁免。用户创建工作负载资源时不会被豁免。 控制器服务账号(例如:system:serviceaccount:kube-system:replicaset-controller) 通常不应该被豁免,因为豁免这类服务账号隐含着对所有能够创建对应工作负载资源的用户豁免。

策略检查时会对以下 Pod 字段的更新操作予以豁免,如果 Pod 更新请求仅改变这些字段时,即使 Pod 违反了当前的策略级别,请求也不会被拒绝。

1、除了对 seccomp 或 AppArmor 注解之外的所有元数据(Metadata)更新操作:

  • seccomp.security.alpha.kubernetes.io/pod (已弃用)
  • container.seccomp.security.alpha.kubernetes.io/* (已弃用)
  • container.apparmor.security.beta.kubernetes.io/*

2、对 .spec.activeDeadlineSeconds 的合法更新;

3、对 .spec.tolerations 的合法更新。

六、指标

以下是 kube-apiserver 公开的 Prometheus 指标:

1、pod_security_errors_total:此指标表示妨碍正常评估的错误数量。 如果错误是非致命的,kube-apiserver 可能会强制实施最新的受限配置。

2、pod_security_evaluations_total:此指标表示已发生的策略评估的数量, 不包括导出期间被忽略或豁免的请求。

3、pod_security_exemptions_total:该指标表示豁免请求的数量, 不包括被忽略或超出范围的请求。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录