CKS (Kubernetes 安全专家): 先决条件和一份6周学习计划
CKS 比 CKA 更难,范围更窄,并且注册需要有效的 CKA 认证。以下是如何备考CKS而不会精疲力尽的方法。
CKS — Certified Kubernetes Security Specialist — 在我看来,是三个专业级 Kubernetes 考试中最难的,比 CKA 范围更窄,并且在时间压力下更具挑战性。两小时,动手实践,445 美元,包含一次免费重考。PSI Bridge 平台,仅限在线考试,无考点。及格分数为 67%。CNCF 不公布官方通过率,但社区调查的首次尝试通过率约为 40-50%,低于 CKA,这与我观察同事参加考试的经验相符。
大多数人忽略的一点是:你不能随意报名。CNCF 要求你在注册时账户中有一个有效的 CKA 认证。不是“你曾经考过 CKA”。而是“有效的”。如果你的 CKA 过期了(自 2024 年 4 月 1 日政策变更以来,有效期已从 3 年缩短为 2 年),你必须续订它才能注册 CKS。这是一个硬性门槛,而非软性建议,每个季度都会让一些人感到惊讶。
真正的先决条件
官方要求:一个有效的 CKA 认证。仅此而已。
非官方要求:
- 熟练使用
kubectl,达到无需思考语法的程度。如果你还在搜索 "kubectl create deployment",说明你还没准备好。 - Linux 基础知识 — 你需要 SSH 到节点,阅读 systemd 日志,编辑 kubelet 标志,并调试 seccomp / AppArmor 配置文件故障。如果
journalctl -u kubelet对你来说不熟悉,请先解决这个问题。 vim熟练度。不是 Vim 高手,但能在两小时的考试中用 vim 编辑 YAML 而不浪费 30 秒去想“等等,我该怎么保存”是强制性的。- 熟练掌握 NetworkPolicy 的心智模型。这是考试中最大的绊脚石。下文将详细说明。
- 事先接触过 Falco, Trivy, AppArmor, seccomp, 通过服务网格实现的 mTLS, 以及 Pod Security Standards。你不需要精通其中任何一个;但你必须能够识别它们。
如果你缺少其中两项以上,那么在备考 CKS 之前,再花一个月进行 CKA 风格的操作练习。在时间压力下同时学习 Kubernetes 操作和安全性,会让你白白浪费免费重考的机会。
实际考什么
CNCF 课程将其分为以下几类(百分比会随每次课程修订而变化;截至 2026 年初为最新):
- 集群设置和加固 (~15%): CIS 基准测试, kube-bench, 限制外部访问, 禁用匿名认证, kubelet 加固标志。
- 系统加固 (~15%): 内核加固 (seccomp, AppArmor), 减少攻击面, 云端 IAM 最小化。
- 最小化微服务漏洞 (~20%): Pod Security Standards (在 1.25 中取代了 PSPs), ServiceAccount token, OPA / Gatekeeper 或 Kyverno, mTLS。
- 供应链安全 (~20%): 使用 Trivy 扫描镜像, 使用 cosign 签名, 阻止未签名镜像的准入控制器, SBOM 基础知识, 最小化基础镜像。
- 监控、日志记录、运行时安全 (~20%): Falco 规则, 行为分析, 不可变性, API 服务器级别的审计日志。
- 网络策略 (~10%): 默认拒绝, 命名空间隔离, 出站规则。虽然百分比很小,但实际上其他所有类别也都会涉及到 NetworkPolicy。
考试不测试 Falco 的内部工作原理。它测试你是否能编写一个 Falco 规则,在容器中启动 shell 时触发。考试不测试 cosign 加密技术。它测试你是否能配置一个准入控制器来拒绝未签名的镜像。这项工作是操作性的,而非学术性的。
6周学习计划
这假设你每周投入约 10 小时,并且已经持有一个有效的 CKA 认证。如果你的时间更多或更少,请自行调整。
第1周:彻底掌握 NetworkPolicy。
在本地使用 Calico 或 Cilium 设置一个 kind 集群(默认的 kindnet 不强制执行 NetworkPolicy,这会让人犯错)。为一个命名空间编写一个默认拒绝策略。编写一个允许来自特定命名空间的策略。编写一个只允许 DNS 的出站策略。编写一个允许来自跨命名空间特定 pod 标签流量的策略。从记忆中反复练习所有这些,直到你可以在 vim 中编写它们而无需查阅 kubernetes.io。NetworkPolicy YAML 是考试中涉及内容量最大的区域,也是大多数人容易出错的地方。在这里投入比你想象中更多的时间。
第2周:Pod Security Standards, ServiceAccounts, RBAC 加固。
将 restricted、baseline 和 privileged 配置文件应用于命名空间。将 ServiceAccounts 配置为 automountServiceAccountToken: false。为一个只需要读取自身命名空间中 ConfigMaps 的部署构建遵循最小权限原则的 RBAC,而不能读取其他内容。练习诊断“此 pod 无法执行 X 操作是因为 RBAC”,直到 kubectl auth can-i 的流程变得自动化。
第3周:供应链 — Trivy, cosign, 准入控制。
使用 Trivy 扫描镜像并解读 CVE 输出。使用 cosign 签名镜像。配置 ImagePolicyWebhook 或 Kyverno 策略,拒绝未由你的密钥签名的镜像。如果你想进行全面练习,可以在本地设置一个 OCI 注册表。考试中很可能会为你安装 Trivy;你应该记住它的关键标志(--severity HIGH,CRITICAL,--ignore-unfixed)。
第4周:运行时 — Falco, AppArmor, seccomp。
在 kind 集群上安装 Falco。阅读默认规则。编写自定义规则。将 AppArmor 配置文件应用于 pod(考试通常会为你提供节点上已有的配置文件,并要求你通过 annotation 进行连接 — 这意味着你需要知道语法 container.apparmor.security.beta.kubernetes.io/<container>: localhost/<profile>)。通过 securityContext.seccompProfile 应用 seccomp 配置文件。这两种方法都有基于注解的旧语法和基于字段的当前语法;考试倾向于测试当前语法,但你应该识别两者。
第5周:集群和主机加固。
运行 kube-bench,解读故障,修复简单的问题(匿名认证、审计日志、kubelet 标志)。在 API 服务器上配置审计策略。限制 etcd 访问。禁用不必要的 kubelet 端口。这主要是节点级的 Linux 工作,也是没有强大系统管理员背景的工程师会感到吃力的地方。
第6周:Killer Shell、全面模拟和休息。
本周使用两个捆绑的 Killer Shell 模拟会话。它们故意设计得比真实考试更难;预计你的分数会低于预期。利用这些差距进行学习。在第 6 周的最后 2-3 天参加实际考试,趁着肌肉记忆还新鲜。不要再拖延了——你每延迟一周,反应能力就会减弱一分。
前一晚睡个好觉。不要通宵学习。考试当天不要更改你的 kubectl 别名。
容易让人栽跟头的地方
时间压力下的 NetworkPolicy。 已经提到过,值得再说一次。YAML 结构不容出错 — 错误的缩进会悄无声息地使策略失效,但 Pod 仍然可以路由。在 vim 中练习,直到你能凭肌肉记忆编写 default-deny + selective allow 策略。
忘记 NetworkPolicy 需要一个强制执行它的 CNI。 kindnet 不会。flannel(某些设置中的默认)也不会。Calico、Cilium、Weave 会。确保你的练习集群运行的是强制执行的 CNI,否则你会学到错误的经验。
混淆 PSP 和 Pod Security Standards。 PSPs 在 1.25 版本中已被移除(现在已是几年前的事情了,但旧的培训材料仍然会提及它们)。目前的机制是 Pod Security Admission,通过命名空间标签应用 restricted、baseline、privileged 配置文件。不要学习 PSPs。
etcd 静态加密配置。 经常被考。具体包括:编辑 EncryptionConfiguration,使用正确的标志重启 API 服务器,并使用 etcdctl get 验证值是否已加密。练习这个。
浏览器标签页陷阱。 你被允许访问 kubernetes.io、falco.org、app-armor.net 以及其他一些网站。但在时间压力下,你不能依赖搜索它们。记住结构。使用标签页来复制粘贴特定代码片段,而不是学习语法。
你应该参加考试吗?
如果你的工作是或将是平台安全、Kubernetes 商店中的安全工程,或受监管行业中的合规性工作,那么就参加 CKS 考试。如果你是一名通才平台工程师,则跳过 CKS — CKA 涵盖了大多数通才角色所需的内容,而 CKS 则有些过度,并且它会在 2 年内过期。
如果你决定考取 CKS,可以在 CertLabPro 上浏览 CKS 题库或开始一次限时模拟考试。题库中的概念覆盖补充了你在真实集群上必须进行的操作练习。两者都是必要的;仅凭其一不足以通过考试。