Kubernetes Pod 安全策略 (PSP)


Kubernetes 的 Pod 安全性方法验证控制器支持针对许多规则的 Pod 创建和更新请求。通常,Amazon EKS 集群带有完全宽松的安全策略,几乎没有任何限制。

PodSecurityPolicy (PSP) 将在 Kubernetes 1.21 中弃用,即将推出。这标志着其弃用过程的开始,但目前没有任何其他变化。

PodSecurityPolicy 将继续完全可用几个版本,然后才会被完全移除。

什么是 Kubernetes?

Kubernetes 是一种自动管理、扩展和维护多容器作业以达到所需状态的软件。

现代软件越来越多地作为容器编排运行,有时称为微服务。

一个完整的应用程序可能包含许多需要协同工作的容器。

Kubernetes 是一种软件,它将一系列物理或虚拟主机(服务器)转换为一个平台,该平台可以:

  • 运行容器化作业,为其提供计算、存储和网络资源;以及

  • 自动管理大量的容器化应用程序——通过适应变化和挑战来保持其健壮性和可用性。

Kubernetes 在哪里使用?

同样,Kubernetes 可以在各种 Linux 操作系统上运行(服务器节点也可以在 Windows Server 上运行)。

单个 Kubernetes 集群可以跨越数据中心、私有云或任何公共云中的裸机或虚拟机。

Kubernetes 还可以运行在开发人员工作站、边缘服务器、树莓派等小型服务器或小型便携式物联网设备和机器上。

通过一些规划(以及正确的工具和架构选择),Kubernetes 可以跨所有这些环境提供一个一致的平台。

Pod 安全策略 (PSP)

Pod 安全策略 (PSP) 是一种admission controller(准入控制器),允许集群管理员明确控制 Pod 的安全敏感方面。

首先,在集群中创建一个或多个 PSP 资源来描述 Pod 必须满足的要求。

然后,创建 RBAC 规则来控制哪个 PSP 应用于给定的 Pod。

如果 Pod 满足其 PSP 的要求,它将被集群接受。

在某些情况下,PSP 还可以修改 Pod 字段,甚至为这些字段创建新的默认值。如果 Pod 不满足 PSP 要求,则会被拒绝并且无法运行。

关于 PSP 的另一个重要事项:它与 Pod 安全上下文不同。

Pod 特定的 Pod 安全上下文(及其每个容器的对应安全上下文)是一组字段,这些字段选择 Pod 的持久安全关键设置。

安全上下文指令告诉 kubelet 和容器运行时如何运行 Pod。相反,PSP 只会设置(或默认为)安全上下文中可以设置的属性。

PSP 的存在不会以任何方式影响 Pod 安全上下文。

Pod 安全策略 (PSP) 的需求

在 Kubernetes 中,我们定义了诸如 Pod、StatefulSet 和 Service 之类的资源,这些资源构成了软件应用程序的构建块。

Kubernetes 集群中的各种控制器会响应这些资源,创建其他 Kubernetes 资源或配置软件或硬件以实现我们的目标。

在许多 Kubernetes 集群中,RBAC(基于角色的访问控制)规则控制对这些资源的访问。

列出、获取、创建、修改和删除是 RBAC 通常会考虑的 API 操作,但 RBAC 不会考虑正在放入其控制的资源中的设置。

例如,Pod 可以是任何东西,从简单的 Web 服务器到特权 shell,提供对主服务器节点和所有数据的完全访问权限。

对 RBAC 来说,这没有什么区别:Pod 就是 Pod。

要控制在集群中定义的资源中允许的设置类型,除了 RBAC 之外,还需要 Admission Control(准入控制)。

从 Kubernetes 1.3 开始,PodSecurityPolicy 一直是与安全相关的 Pod 字段的内置方法。

使用 PodSecurityPolicy,您可以阻止“创建 Pod”表示“在每个集群节点上使用 root”而无需部署额外的外部准入控制器。

Kubernetes Pod 安全策略 (PSP) 如何工作?

部署 Kubernetes 集群时,在包含集群的节点上运行的 PSP 会注册到驻留在 Kubernetes 集群中的专有 LDAP 库中。

在本教程中,我们将了解 Kubernetes 如何自动处理 PSP 的注册。

注册 PSP 后,您可以将其用作集群中其他系统的两因素身份验证选项,将其配置为通过授予对存储在其中的秘密的访问权限来阻止对集群的不受欢迎的访问(考虑 PSC 主密码或 GRC),甚至允许特定组访问集群上的自定义服务。

当 Kubernetes 启动新节点时,它会自动在每个节点上注册 PSP。

此过程由节点上的 kubelet(系统守护程序)控制。

只需要设置一个简单的 `registerDnsDaemon` DSL 命令。

例如,您可以运行以下命令:

twist - XPUT
'localhost:9200/_kube/v1/regulators/registerDnsDaemon/register' - H
'Content-Type: application/json' - d '{ "namespace": {"pod":
"src/pod.yml"}, "administration": "pod.master", "administration":
"service.master", "sig": "hub information", "treat": "", "autoscale": {
"reload" : valid, "size" : 40, "sizes" : [ "enormous", "medium" ],
"status" : "achievement", "classifiers": ["XML", "JSON"] } }'

然后,节点将自动检查注册并按需发出节点及其服务的有效证书。您还可以使用更复杂的 DNS 记录,该记录要求您的节点在使用之前先在 PSP 中注册。

结论

如果您的 PSP 使用相对简单,只有少量策略和明确的限制来支持每个命名空间中的帐户,那么您可能会发现 PSP 替换策略非常适合您的需求。将您的 PSP 与 Kubernetes Pod 安全标准进行比较,以确定您可以在哪些地方使用受限、审计和优先级配置文件。

更新于:2022年11月16日

145 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.