如何列出Kubernetes Pod及其容器包含默认值的所有securityContext配置
获取Pod/容器级别完整securityContext(含默认值)的方法
kubectl get pod -o yaml仅能展示etcd中存储的用户显式声明的spec字段,securityContext的默认值由集群准入组件、Pod安全准入(PSA)、容器运行时等动态注入,不会持久化到Pod资源清单,可通过以下两种方式获取完整生效配置:
方式1:读取运行中Pod的实际生效配置
Pod级别配置
- 查看Pod级别实际生效的安全上下文关联状态:
其中QoS等级会直接影响默认的kubectl get pod <替换为实际Pod名称> -o jsonpath='{.status.qosClass}{.spec.securityContext}'allowPrivilegeEscalation、capabilities等配置规则。
容器级别配置
如果需要获取容器层面所有生效的安全参数(包含默认注入值),可通过容器运行时接口直接查询:
- 先获取Pod所在节点和对应容器ID:
kubectl get pod <替换为实际Pod名称> -o wide kubectl get pod <替换为实际Pod名称> -o jsonpath='{.status.containerStatuses[*].containerID}' - 登录Pod所在节点,执行以下命令输出容器完整安全配置:
输出内容包含实际生效的uid/gid、能力集、seccomp配置、AppArmor配置、特权模式等所有参数,不管是显式声明还是默认注入。# 替换为上一步拿到的containerID,注意去掉前缀的containerd:///docker:// crictl inspect <容器ID> | jq '.runtimeSpec.process.capabilities, .runtimeSpec.process.user, .linux'
方式2:提前推导集群默认securityContext规则
如果需要在Pod创建前确认默认安全配置,可查询以下集群规则:
- 查命名空间绑定的Pod安全准入(PSA)规则:
查看kubectl describe ns <替换为目标命名空间>pod-security.kubernetes.io/enforce标签对应的安全等级(Restricted/ Baseline/Privileged),对应等级定义了所有未显式声明的securityContext默认值。 - 查节点级kubelet默认安全配置:
该参数定义了集群是否默认启用Seccomp安全策略。kubectl get cm kubelet-config -n kube-system -o yaml | grep seccompDefault - 查容器运行时默认配置:登录节点查看
/etc/containerd/config.toml或/etc/docker/daemon.json中定义的运行时默认安全参数。
注意:容器级securityContext配置优先级高于Pod级,两者都未声明的配置才会使用集群全局默认值
内容的提问来源于stack exchange,提问作者skystone
相关产品推荐
相关产品推荐

