我使用gatekeeper/OPA为在特定命名空间中运行的各种服务创建约束。为此,我依赖于namespaceSelectors来将约束与一组名称空间相匹配。我的CI/CD过程负责用我的约束所需要的标签来标记我所有的自定义名称空间。
但是,我现在需要确保没有所需的标签就不会创建新的命名空间(否则这个名称空间将忽略我的所有约束)。事实上,我的CI/CD工具应用了这些标签,这不允许我确定没有这些标签在集群中创建了其他名称空间。
如果我在所有名称空间上应用k8srequiredlabels2约束模板,就会发现在系统名称空间(如kube)上存在冲突。网关管理员约束允许您指定以下任一项来匹配您的constraint1
labelSelector
namespaceSelector
namespaces list理想情况下,我希望能够说,我希望确保所有名称空间上都有x标签,但排除列表(例如,kube)中的名称空间除外。但是,没有选择以独占的方式使用上面的“名称空间”列表,其他两个选项需要有人手动将标签添加到新创建的命名空间(这为错误打开了空间)。
发布于 2020-02-15 06:56:13
问题1可以通过使用OPA本身来解决。您可以使用OPA (https://github.com/open-policy-agent/opa/issues/943)编写变异webhook,将标签添加到新创建的命名空间,也可以编写变异控制器(使用Golang)。两个人在下面做的事情是一样的。
对于第二个问题,您需要在名称空间创建的rego文件中添加验证规则,并验证标签是否存在。
额外的相关信息:要根据标签在特定的命名空间上执行操作,可以在验证/变异的web钩子配置中添加namesapceSelector。
发布于 2020-01-10 12:38:53
您可以使用掌舵将标签动态分配给特定的命名空间。
命名空间值可以从--namespace参数派生,该参数是部署helm图表的同一个名称空间。在图表中,应该使用{{.Release.Namespace}}访问它。或者,在使用helm升级部署舵机图表时,可以使用--set设置这些命名空间。如果很少有环境,您可以在values.yaml中以别名的形式访问它们,然后为它们设置名称空间值,如下所示:
helm upgrade \
<chart_name> \
<path_to_the_chart> \
--set <environment_one>.namespace=namespace1 \
--set <environment_two>.namespace=namespace2 \
...请看一下:动态命名空间变量。
要检查特定的命名空间是否有正确的标签,请使用web钩子接纳控制器.
在这里您可以找到更多信息:webhook-admssion-控制器。
https://stackoverflow.com/questions/59555141
复制相似问题