4

我正在尝试将多行值(ca 证书文件的内容)设置为特定密钥的 kustomize 环境文件,如下面的代码所示。有没有办法做到这一点?

注意:向 some_params.env 中的值添加引号不起作用。

自定义.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
  role: authentication
bases:
- ./somebase

configMapGenerator:
- name: some-parameters
  env: some_params.env
vars:
- name: ca_contents
  objref:
    kind: ConfigMap
    name: some-parameters
    apiVersion: v1
  fieldref:
    fieldpath: data.ca_contents
configurations:
 - some_params.yaml

some_params.yaml

varReference:
- path: data/ca.pem
  kind: ConfigMap

some_params.env

ca_contents= |
-----BEGIN CERTIFICATE-----
YOUR CA CERTIFICATE CONTENTS
-----END CERTIFICATE-----

运行以下命令: kustomize build base

回报: Error: NewResMapFromConfigMapArgs: NewResMapFromConfigMapArgs: env source file: some_params.env: "-----BEGIN CERTIFICATE-----" is not a valid key name: a valid environment variable name must consist of alphabetic characters, digits, '_', '-', or '.', and must not start with a digit (e.g. 'my.env-name', or 'MY_ENV.NAME', or 'MyEnvName1', regex used for validation is '[-._a-zA-Z][-._a-zA-Z0-9]*')

4

1 回答 1

0

所以看起来您正在使用 Kustomize 中的生成器创建 ConfigMap。在这样做的过程中,您试图在您的 kustomization.yml 文件中直接将所需 ConfigMap 的内容传递给它。

更好的做法是将这些配置文件的内容保存到磁盘并将它们保存在与清单相同的位置。然后将它们从文件中导入到 Kustomize 中的生成器中。例如:

configMapGenerator:
    - name: ca_contents
      files:
        - ca.crt

这将生成一个名称ca.crt与文件内容相同的 ConfigMap。

但是,如果您愿意,您可以对运算符执行相同的literals操作,并直接在您的 kustomization.yml 中使用多行配置。例如:

configMapGenerator:
    - name: ca_contents
      literals:
        - ca.crt=|
            CERT_CONTENTS
            EACH_NEWLINE_IS_INDENTED_ANOTHER_TIME
            You_Can_Add_Additional_literals
        - ca.key=>
            AND_EVEN
            CONCATENATE_THEM
            _ONTO_ONE_LINE_WITH_OTHER_OPERATORS_LIKE_>
        - cert.crt="You can even mix literals with files in generators."
      files:
        - cert.key

让我知道这是否有意义。我建议您将配置保存在文件中并将它们导入生成器,但任何一种解决方案都应该有效。如果您需要任何其他帮助,请随时与我们联系。Kustomize 是一个非常酷的项目!

于 2020-03-28T03:58:52.170 回答