我对 Amazon Elastic Kubernetes Service (Amazon EKS) 容器组 (pod) 中的容器组安全标准和容器组安全准入有一些疑问。
**问:**如何为我的 Amazon EKS 集群开启或关闭容器组安全标准和容器组安全准入?
默认情况下,Kubernetes 版本 1.23 及更高版本会在集群级别为特权容器组安全标准配置文件开启所有容器组安全准入模式。容器组安全准入允许在所有命名空间中使用具有特权容器组安全标准配置文件的部署或容器组。
**问:**如何在 Kubernetes 命名空间级别应用特定的容器组安全准入模式和容器组安全标准配置文件?
要在 Kubernetes 命名空间级别应用特定的容器组安全准入模式和容器组安全标准配置文件,请相应地配置命名空间标签。
示例:
运行以下命令,将 baseline 容器组安全标准的 enforce 模式应用于单个命名空间:
$ kubectl label --overwrite ns test-namespace pod-security.kubernetes.io/enforce=baseline
运行以下命令,将 baseline 容器组安全标准的 enforce 模式应用于所有可用的命名空间:
$ kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=baseline
**注意:**在前面的命令中,将 test-namespace 替换为您的命名空间的名称。将 enforce 替换为您的首选容器组安全准入模式,将 baseline 替换为您的首选容器组安全标准策略配置文件。有关更多信息,请参阅 Kubernetes 网站上的命名空间的容器组安全准入标签和容器组安全标准。
**问:**当我修改命名空间以使用更严格的容器组安全标准配置文件时,它会影响命名空间中现有容器组的功能吗?
不会。如果您使用现有容器组修改命名空间以使用 audit 或 warn 模式,则会在终端上收到相应的警告。你还可以在容器组 YAML 输出的 status.message 部分看到警告消息。如果你修改命名空间以使用 enforce 模式,Kubernetes 不会删除命名空间中的现有容器组。但是,您会看到一条类似于以下内容的警告消息:
Warning: existing pods in namespace "policy-test" violate the new PodSecurity enforce level "restricted:latest"
Warning: test-688f68dc87-htm8x: allowPrivilegeEscalation != false, unrestricted capabilities, runAsNonRoot != true, seccompProfilenamespace/policy-test configured
容器组 YAML 输出中的警告消息示例:
lastTransitionTime: "2022-11-24T05:10:49Z"
lastUpdateTime: "2022-11-24T05:10:49Z"
message: 'pods "test-67d5fc995b-8r9t2" is forbidden: violates PodSecurity "baseline:latest": privileged (container "assets" must not set securityContext.privileged=true)'
reason: FailedCreate
status: "True"
type: ReplicaFailure
当容器组违反命名空间中的容器组安全标准配置文件策略或容器组安全准入模式时,请使用适当的值更新相应的部署清单。
**问:**如何自定义容器组安全准入控制器在我的命名空间级别应用的容器组安全策略?
Kubernetes 不支持通过容器组安全准入控制器来自定义应用的容器组安全策略。但是,您可以使用验证准入策略来实施和强制执行您的自定义规则。或者,您可以将 Webhook 准入控制与外部代码一起使用。
**问:**我能否将多个容器组安全准入模式和容器组安全标准配置文件应用于单个 Kubernetes 命名空间?
不可以。但是,您可以使用标签在任何命名空间上配置多个容器组安全标准检查。
例如,以下命令将 enforce 模式应用于 baseline 容器组安全标准。但是,它还会根据最新版本,对受限容器组安全标准应用 warn 和 audit 模式:
$ kubectl label --overwrite ns test \\
pod-security.kubernetes.io/enforce=baseline \\
pod-security.kubernetes.io/enforce-version=latest \\
pod-security.kubernetes.io/warn=restricted \\
pod-security.kubernetes.io/warn-version=latest \\
pod-security.kubernetes.io/audit=restricted \\
pod-security.kubernetes.io/audit-version=latest
**问:**我能否在托管式 Kubernetes 集群的集群范围内应用容器组安全准入模式和容器组安全标准配置文件?
不能,您只能在命名空间级别为托管式集群应用容器组安全准入模式和容器组安全标准配置文件。