我很想知道是否有一种方法可以使用Kustomize替换或其他操作来将非yaml文件的内容注入到使用Kustomize的yaml文件中。我知道Kustomize不是一个模板引擎,这可以通过Helm来完成,但使用我已经在使用的工具,这可能吗?
我的用例是将OPA策略存储为本地rego,这允许使用OPA单元测试,并在Kustomize部署期间将这些rego文件的内容注入到Gatekeeper约束中。这将消除自定义管道处理或手动复制/粘贴来完成此操作的需求。
opaRule.rego文件示例
package k8sdisallowedtags
violation[{"msg": msg}] {
container := input_containers[_]
tags := [forbid | tag = input.parameters.tags[_] ; forbid = endswith(container.image, concat(":", ["", tag]))]
any(tags)
msg := sprintf("container <%v> uses a disallowed tag <%v>; disallowed tags are %v", [container.name, container.image, input.parameters.tags])
}
...
示例约束模板.yaml文件
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8sdisallowedtags
namespace: kube-system
annotations:
description: Requires container images to have an image tag different
from the ones in a specified list.
spec:
crd:
spec:
names:
kind: K8sDisallowedTags
validation:
openAPIV3Schema:
properties:
tags:
type: array
items:
type: string
targets:
- target: admission.k8s.gatekeeper.sh
rego: |-
{CONTENT OF OPA RULE POLICY HERE}
2条答案
按热度按时间acruukt91#
答案包含两部分:
创建自己的插件
Kustomize允许创建插件来扩展它的功能。并且几乎没有限制,包括安全性-这应该由插件的作者来处理。
有两种插件:
所有可用信息均可在Extending Kustomize - documentation中找到。
exec插件示例。**注意!**正确的标志是
--enable-alpha-plugins
(使用-
,而不是示例中的_
)。使用补丁
补丁(也称为覆盖)添加或覆盖资源上的字段。它们使用补丁自定义字段提供。
修补程序字段包含要按指定顺序应用的修补程序列表。
每个贴片可以:
Reference to kustomize - patches
下面是如何修补
gatekeeper.yaml
对象的示例。结构:
$树
$cat看门人. yaml
$cat自定义. yaml
$cat opa-gk. yaml
$kubectl定制。
有用链接:
disho6za2#
你可以使用yaml-include-transformer-一个为YAML文件实现include指令的YAML处理器。它可以作为一个独立的实用程序,也可以作为Kustomize的插件。它允许使用如下指令将文件作为文本字段包括进来
下面是一个例子:
$cat看门人. yaml
运行yaml处理器:
输出:
要将此工具用作Kustomize插件,您需要创建一个插件配置文件,并将其作为转换器添加到
kustomization.yaml
文件中,如下所示:kustomize支持的插件有几种类型,安装和配置
yaml-include-transformer
作为插件的确切方式取决于您选择使用的插件类型。yaml-include-transformer
可以自行安装并为不同的插件类型生成配置文件。例如,要将其配置为遗留exec插件,您需要生成配置文件:
并安装插件的插件二进制:
现在您可以运行build: