大家好!今天,我们将深入探讨Kyverno的架构及其核心组件,它们是Kubernetes运营的必备项,也是KCA考试的核心主题。🕵️♂️
在运营Kubernetes时,您可能会遇到这样的困惑:“谁在我的集群中部署了一个没有安全设置的Pod?”这时,Kyverno就会作为救星出现。了解它内部如何运作,将使运营和故障排除变得更加容易。
在描述Kyverno时,最常出现的词是“Kubernetes Native”。这是因为Kyverno直接利用了Kubernetes的现有机制。
最重要的概念是Admission Webhooks。当资源创建/修改请求到达Kubernetes API服务器时,API服务器在处理该请求之前会询问Kyverno:“这可以吗?”Kyverno会根据配置的策略(Policy)来批准、拒绝或建议修改。

https://kyverno.io/docs/introduction/how-kyverno-works/
🧩 Kyverno的3大核心组件 (Core Components)
让我们以Kyverno安装时创建的主要Pod为中心,详细了解每个控制器所扮演的角色。
1. Admission Controller (守门员) 🛡️
这是Kyverno的核心。它直接处理所有MutatingWebhook和ValidatingWebhook请求。
- Mutation (变异): 当请求到来时,它会根据配置的策略自动修改资源的内容。例如,它可以为所有Pod添加特定标签或注入Sidecar容器。
- Validation (验证): 它检查资源是否符合安全规则。如果配置了“不允许特权模式!”,那么它会立即阻止(Enforce)或记录(Audit)违反此规则的请求。
- Generation (生成): 当创建新命名空间时,它会自动创建默认的NetworkPolicy或Role等。
2. Background Controller (审计员) 📋
如果说Admission Controller专注于“当前传入的请求”,那么Background Controller则负责监控“集群中已存在的资源”。
- 策略应用检查: 如果策略是后来创建的,它会扫描现有正在运行的Pod,检查它们是否符合新策略。
- 报告生成: 它会定期扫描集群,整理策略违规事项,并生成PolicyReport。这使得管理员不仅可以实时阻止请求,还可以检查集群的整体健康状况。
3. Cleanup Controller (清洁工) 🧹
这是Kyverno 1.9版本引入的组件,专门负责清理集群中冗余的资源。
- 有效期设置: 如果为特定资源设置了“1小时后删除”的策略,此控制器将检查时间并将其删除。
- 临时资源管理: 它会自动清理为测试创建的资源或已过期的证书等,从而节省集群资源。
🔄 策略处理流程:从请求到执行
让我们按顺序了解在创建资源时Kyverno内部发生的事情。
- API请求发送: 用户发出`kubectl apply -f pod.yaml`命令。
- Mutating Webhook: API服务器将请求发送给Kyverno。Kyverno注入(Mutate)必要的配置并返回结果。
- Object Schema Validation: API服务器自行验证修改后的资源格式是否正确。
- Validating Webhook: 再次询问Kyverno:“现在真的可以创建了吗?”Kyverno进行最终审查(Validate),然后决定批准或拒绝。
- Persistence: 如果通过所有关卡,数据将存储在etcd中,并创建资源。
🛠️ 运维人员小贴士:故障排除要点
如果Kyverno突然停止工作,请首先检查以下三点!
- Webhook证书检查: Kyverno通过TLS与API服务器通信。如果证书过期或配置混乱,所有API请求都可能停止。建议使用cert-manager。
- Resource Filters: 有时您可能会想:“为什么这个Pod不受策略影响?”请检查Kyverno的默认设置中是否过滤掉了某些命名空间(例如kube-system等)。
- Admission Report: 策略未生效的原因详细记录在PolicyReport自定义资源中。请积极使用`kubectl get polr`命令。
🌟 总结
Kyverno不仅仅是一个安全工具;它是一个强大的框架,推动Kubernetes运营的自动化和标准化。理解其架构是充分利用其强大功能的第一步。
如果您能在大脑中描绘出我们今天解释的Admission、Background和Cleanup这三位管理员如何保护您的集群,那么您不仅能在Kyverno考试(KCA)中,也能在实际工作中展现出专家级的风采! 🚀
发表回复