--- title: OPA Gatekeeper策略与准入控制实践 keywords: - OPA Gatekeeper - ConstraintTemplate - Constraint - 准入控制 - Kubernetes - 审计 description: 通过Gatekeeper以声明式策略实施Kubernetes准入控制与审计,提供可验证的模板与约束清单与校验命令。 date: 2025-11-26 categories: - 文章资讯 - 技术教程 --- 概述 - 目标:以OPA Gatekeeper在集群内实施安全与规范策略,阻止不合规资源进入并进行审计报告。 - 适用:生产集群的安全基线与规范治理、命名约束、权限限制。 核心与实战 - ConstraintTemplate(禁止特权容器): ``` apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8sforbidprivileged spec: crd: spec: names: kind: K8sForbidPrivileged validation: openAPIV3Schema: type: object targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sforbidprivileged violation[{ "msg": msg, "details": {}}] { input.review.kind.kind == "Pod" c := input.review.object.spec.containers[_] c.securityContext.privileged == true msg := "privileged containers are not allowed" } ``` - Constraint应用到命名空间: ``` apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sForbidPrivileged metadata: name: forbid-privileged-pods spec: match: namespaces: ["prod"] kinds: - apiGroups: [""] kinds: ["Pod"] ``` 示例 - 不合规资源被拒: ``` apiVersion: v1 kind: Pod metadata: name: bad namespace: prod spec: containers: - name: c image: alpine securityContext: privileged: true ``` - 审计结果查看: ``` kubectl get k8sforbidprivileged -o yaml kubectl -n gatekeeper-system logs deploy/gatekeeper-audit ``` 验证与监控 - 安装与健康: ``` kubectl get pods -n gatekeeper-system kubectl get constraints,constrainttemplates ``` - 例外与豁免: - 使用`match.excludedNamespaces`或`namespaceSelector`进行例外处理。 - 版本治理: - 在GitOps中版本化模板与约束,审计变更与影响面。 常见误区 - 仅编写ConstraintTemplate而未创建Constraint导致策略未生效;需绑定约束。 - 审计未启用或未查看审计日志;需关注`gatekeeper-audit`输出。 - 过于宽泛的匹配导致误拒;应精准限定命名空间与资源类型。 结语 - Gatekeeper以策略即代码实现准入控制与审计,配合GitOps可持续治理K8s资源合规与安全。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部