11.9. 从功能访问 secret 和配置映射

将功能部署到集群后,可以访问存储在 secret 和配置映射中的数据。此数据可以挂载为卷,或分配到环境变量。您可以使用 Knative CLI 以互动方式配置此访问,或者通过编辑功能配置 YAML 文件来手动配置。

重要

要访问 secret 和配置映射,必须在集群中部署该功能。此功能不适用于本地运行的函数。

如果无法访问 secret 或配置映射值,则部署会失败,并显示一条错误消息,指定不可访问的值。

11.9.1. 以互动方式修改对 secret 和配置映射的功能访问

您可以使用 kn func config 互动程序来管理您的功能访问的 secret 和配置映射。可用的操作包括列表、添加和删除配置映射和 secret 中存储的值,以及列出、添加和删除卷。通过此功能,您可以管理集群中存储的数据,可以被您的功能访问。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 在功能项目目录中运行以下命令:

    $ kn func config

    或者,您可以使用 --path-p 选项指定功能项目目录。

  2. 使用交互式界面执行必要的操作。例如,使用工具列出配置的卷会生成类似如下的输出:

    $ kn func config
    ? What do you want to configure? Volumes
    ? What operation do you want to perform? List
    Configured Volumes mounts:
    - Secret "mysecret" mounted at path: "/workspace/secret"
    - Secret "mysecret2" mounted at path: "/workspace/secret2"

    这个方案显示互动工具中所有可用的操作以及如何导航到它们:

    kn func config
       ├─> Environment variables
       │               ├─> Add
       │               │    ├─> ConfigMap: Add all key-value pairs from a config map
       │               │    ├─> ConfigMap: Add value from a key in a config map
       │               │    ├─> Secret: Add all key-value pairs from a secret
       │               │    └─> Secret: Add value from a key in a secret
       │               ├─> List: List all configured environment variables
       │               └─> Remove: Remove a configured environment variable
       └─> Volumes
               ├─> Add
               │    ├─> ConfigMap: Mount a config map as a volume
               │    └─> Secret: Mount a secret as a volume
               ├─> List: List all configured volumes
               └─> Remove: Remove a configured volume
  3. 可选。部署该功能以使更改生效:

    $ kn func deploy -p test

11.9.2. 使用专用命令以互动方式修改对 secret 和配置映射的功能访问

每次运行 kn func config 时,您需要浏览整个对话框来选择您需要的操作,如上一节中所示。要保存步骤,您可以通过运行更具体的 kn func config 命令来直接执行特定的操作:

  • 列出配置的环境变量:

    $ kn func config envs [-p <function-project-path>]
  • 在功能配置中添加环境变量:

    $ kn func config envs add [-p <function-project-path>]
  • 从功能配置中删除环境变量:

    $ kn func config envs remove [-p <function-project-path>]
  • 列出配置的卷:

    $ kn func config volumes [-p <function-project-path>]
  • 在功能配置中添加卷:

    $ kn func config volumes add [-p <function-project-path>]
  • 从功能配置中删除卷:

    $ kn func config volumes remove [-p <function-project-path>]

11.9.3. 手动添加对 secret 和配置映射的功能访问

您可以将用于访问 secret 和配置映射的配置手动添加到您的功能中。这可能最好使用 kn func config 交互式实用程序和命令,例如您已有配置片段时。

11.9.3.1. 将 secret 挂载为卷

您可以将 secret 挂载为卷。挂载 secret 后,您可以作为常规文件从函数访问它。这可让您存储在功能所需的集群数据中,例如,函数需要访问的 URI 列表。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要挂载为卷的每个 secret,将以下 YAML 添加到 volumes 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - secret: mysecret
      path: /workspace/secret
    • mysecret 替换为目标 secret 的名称。
    • /workspace/secret 替换为您要挂载 secret 的路径。

      例如,要挂载 addresses secret,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/secret-addresses
  3. 保存配置。

11.9.3.2. 将配置映射挂载为卷

您可以将配置映射挂载为卷。挂载配置映射后,您可以作为常规文件从函数访问它。这可让您存储在功能所需的集群数据中,例如,函数需要访问的 URI 列表。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要挂载为卷的每个配置映射,请将以下 YAML 添加到 volumes 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - configMap: myconfigmap
      path: /workspace/configmap
    • myconfigmap 替换为目标配置映射的名称。
    • 使用您要挂载配置映射的路径替换 /workspace/configmap

      例如,要挂载 addresses 配置映射,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/configmap-addresses
  3. 保存配置。

11.9.3.3. 从 secret 中定义的键值设置环境变量

您可以从定义为 secret 的键值设置环境变量。然后,之前存储在 secret 中的值可以被函数在运行时作为环境变量访问。这有助于获取存储在 secret 中的值,如用户的 ID。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要分配给环境变量的 secret 键值对的每个值,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ secret:mysecret:key }}'
    • EXAMPLE 替换为环境变量的名称。
    • mysecret 替换为目标 secret 的名称。
    • 使用映射到目标值的键替换 key

      例如,要访问存储在 userdetailssecret 中的用户 ID,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailssecret:userid }}'
  3. 保存配置。

11.9.3.4. 从配置映射中定义的键值设置环境变量

您可以从定义为配置映射的键值设置环境变量。然后,之前存储在配置映射中的值可以被函数在运行时作为环境变量访问。这对于获取配置映射中存储的值(如用户的 ID)非常有用。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要分配给环境变量的配置映射键值对中的每个值,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ configMap:myconfigmap:key }}'
    • EXAMPLE 替换为环境变量的名称。
    • myconfigmap 替换为目标配置映射的名称。
    • 使用映射到目标值的键替换 key

      例如,要访问存储在 userdetailsmap 中的用户 ID,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailsmap:userid }}'
  3. 保存配置。

11.9.3.5. 从 secret 中定义的所有值设置环境变量

您可以从 secret 中定义的所有值设置环境变量。然后,之前存储在 secret 中的值可以被函数在运行时作为环境变量访问。这可用于同时访问存储在 secret 中的一组值,例如,一组与用户相关的数据。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要导入所有键值对作为环境变量的每个 secret,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ secret:mysecret }}' 1
    1
    mysecret 替换为目标 secret 的名称。

    例如,要访问存储在 userdetailssecret 中的所有用户数据,请使用以下 YAML:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailssecret }}'
  3. 保存配置。

11.9.3.6. 从配置映射中定义的所有值设置环境变量

您可以从配置映射中定义的所有值设置环境变量。然后,之前存储在配置映射中的值可以被函数在运行时作为环境变量访问。这可用于同时访问配置映射中存储的值集合,例如,一组与用户相关的数据。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要导入所有键值对作为环境变量的每个配置映射,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:myconfigmap }}' 1
    1
    myconfigmap 替换为目标配置映射的名称。

    例如,要访问存储在 userdetailsmap 中的所有用户数据,请使用以下 YAML:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailsmap }}'
  3. 保存该文件。