本教程仅适用于新集群。
Pod 安全准入(PSA)在 v1.23 及更高版本默认启用,
因为它[升级到测试版(beta)]。
Pod 安全准入是在创建 Pod 时应用
[Pod 安全标准]的准入控制器。
在本教程中,你将应用 baseline
Pod 安全标准,每次一个名字空间。
你还可以在集群级别一次将 Pod 安全标准应用于多个名称空间。
有关说明,请参阅[在集群级别应用 Pod 安全标准]。
在你的工作站中安装以下内容:
按照如下方式创建一个 KinD
集群:
kind create cluster --name psa-ns-level
输出类似于:
Creating cluster "psa-ns-level" ...
✓ Ensuring node image
✓ Preparing nodes
✓ Writing configuration
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
Set kubectl context to "kind-psa-ns-level"
You can now use your cluster with:
kubectl cluster-info --context kind-psa-ns-level
Not sure what to do next? Check out https://kind.sigs.k8s.io/docs/user/quick-start/
将 kubectl 上下文设置为新集群:
kubectl cluster-info --context kind-psa-ns-level
输出类似于:
Kubernetes control plane is running at https://127.0.0.1:50996
CoreDNS is running at https://127.0.0.1:50996/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
创建一个名为 example
的新名字空间:
kubectl create ns example
输出类似于:
namespace/example created
使用内置 Pod 安全准入所支持的标签在此名字空间上启用 Pod 安全标准。
在这一步中,我们将根据最新版本(默认值)对基线 Pod 安全标准发出警告。
kubectl label --overwrite ns example \
pod-security.kubernetes.io/warn=baseline \
pod-security.kubernetes.io/warn-version=latest
你可以使用标签在任何名字空间上配置多个 Pod 安全标准检查。
以下命令将强制(enforce
) 执行基线(baseline
)Pod 安全标准,
但根据最新版本(默认值)对受限(restricted
)Pod 安全标准执行警告(warn
)和审核(audit
)。
kubectl label --overwrite ns example \
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
在 example
名字空间中创建一个基线 Pod:
kubectl apply -n example -f https://k8s.io/examples/security/example-baseline-pod.yaml
Pod 确实启动正常;输出包括一条警告信息。例如:
Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false , unrestricted capabilities , runAsNonRoot != true , seccompProfile
pod/nginx created
在 default
名字空间中创建一个基线 Pod:
kubectl apply -n default -f https://k8s.io/examples/security/example-baseline-pod.yaml
输出类似于:
pod/nginx created
Pod 安全标准实施和警告设置仅被应用到 example
名字空间。
以上 Pod 安全标准仅被应用到 example
名字空间。
你可以在没有警告的情况下在 default
名字空间中创建相同的 Pod。
现在通过运行以下命令删除你上面创建的集群:
kind delete cluster --name psa-ns-level
运行一个 [shell 脚本]
一次执行所有前面的步骤。
enforce
模式下应用 baseline
Pod 安全标准,warn
和 audit
模式下应用 restricted
Pod 安全标准。[Pod 安全准入]