1

是否可以有一个在多个环境和应用程序之间共享的通用配置文件(例如 ConfigMap)?我知道使用多个环境覆盖很容易做到这一点,但是对于应用程序来说,高于它的级别怎么样?如果我有以下结构:

Base
    App1
        Configmaps
        Kustomization.yaml
    Global
        Configmaps
Overlays
    Env1
        App1
            Configmaps
            Deployments
            Kustomization.yaml
        App2
            Configmaps
            Deployments
            Kustomization.yaml
    Env2.. (same as above)
        App1..
        App2..

是否有可能在所有应用程序中引用一组静态的通用配置值?在上述结构中,我只能引用同一文件夹或以下文件夹中的资源,如果我尝试引用 App 级别之外的父文件夹中的资源,那么您通常会收到错误消息,例如“ Error: AccumulateTarget: rawResources failed to read资源:从路径加载 ../../configmaps/base-config.yaml 失败:安全性;文件 '../../configmaps/base-config.yaml' 不在或低于 'C:\Code\BUILD -ARTEFACTS\deployment-manifests\base\apps\app-ui' "

无论如何在父文件夹级别而不是在子文件夹中共享通用配置?否则我最终会在多个应用程序中重复一些不理想的设置。

4

1 回答 1

3

您看到此错误是因为它可以保护用户免受网络钓鱼攻击。看看这个 kustomize 问题

来自 kustomize 常见问题解答:安全性:文件 'foo' 不在 'bar 中或之下

v2.0 添加了一项安全检查,可防止 kustomizations 读取其自己目录根目录之外的文件。

这旨在帮助保护倾向于从 Web 下载自定义目录并在未经检查的情况下使用它们来控制其生产集群的人(参见#693#700#995#998)。

资源(包括 configmap 和秘密生成器)仍然可以通过推荐的最佳实践来共享,将它们放置在具有自己的 kustomization 文件的目录中,并将该目录作为任何想要使用它的 kustomization 的基础。这鼓励了模块化和可重定位性。

要禁用此功能,请使用 v3 和 load_restrictor 标志:

kustomize build --load_restrictor none $target
于 2020-12-07T11:30:55.693 回答