我正在使用网守/OPA 为我在特定命名空间中运行的各种服务创建约束。为此,我依靠 namespaceSelectors 将约束与一组命名空间相匹配。我的 CI/CD 流程负责使用我的约束将要查找的所需标签来标记我的所有自定义命名空间。
但是,我现在需要确保在没有所需标签的情况下不会创建新的命名空间(否则这个命名空间将忽略我的所有约束)。我的 CI/CD 工具应用了这些标签这一事实并不能让我确定在没有这些标签的情况下我的集群中没有创建其他命名空间。
如果我在所有命名空间上应用 k8srequiredlabels[2] 约束模板,这将发现对系统命名空间(如 kube-system)的违反。网守约束允许您指定以下任一项以匹配您的约束[1]:
labelSelector
namespaceSelector
namespaces list
理想情况下,我想说我想确保所有名称空间上都有 x 标签,排除列表中的名称空间除外(例如 kube-system)。但是,没有选项可以以独占方式使用上述“命名空间”列表,而其他 2 个选项需要有人手动将标签添加到新创建的命名空间(这为错误提供了空间)。
- 关于如何确保集群命名空间的子集具有 x 个标签而无需手动标记它们并使用标签/命名空间选择器的任何建议?
- 如果名称空间不符合某些条件(例如带有 x 标签),您将如何防止使用 OPA 和 Gatekeeper 创建名称空间?
[1] https://github.com/open-policy-agent/gatekeeper/pull/131/files