Kubernetes - 将 Release.Namespace 设置为 values.yaml 上的依赖项值

Kubernetes - Set Release.Namespace to dependencies values on values.yaml

我知道有很多关于此的问题,但我没有找到真正的答案。

我的 helm chart 依赖于另一个 helm chart,我需要用我的 .Release.Name.Release.Namespace.

覆盖它们的值

我的requeriments.yaml

dependencies:
- name: keycloak
  alias: keycloak-config
  repository: https://my-repository.com/
  version: 1.0.0
- name: kong
  alias: kong-config
  repository: https://my-repository.com/
  version: 1.0.0

在我的values.yaml

kong-config:
  websso:
    service:
      fullnameOverride: "my-helm._RELEASE_NAMESPACE_.svc.cluster.local"
      ckngOauth2Opts: "--data config.post_logout_redirect_uri=/_RELEASE_NAME_
                       --data config.logout_path=/_RELEASE_NAME_/logout"

我基本上需要在有 _RELEASE_NAME_ 的地方使用 {{ .Release.Name }} 和在有 _RELEASE_NAMESPACE_.

的地方使用 {{ .Release.Namespace }}

我已经试过了:

但没有任何效果。

请注意,我确实需要在 values.yaml 访问这些值。我无权访问我的依赖项代码来更改和设置该值。

我该如何解决这个问题?

虽然 helm 本身似乎无法做到这一点,但 helmfile can via either its integration with kustomize or with its prepare hook。我将展示 prepare 钩子,因为它更短

releases:
- name: kong-config
  chart: whatever/kong
  version: 1.0.0
  values:
  - ./generated-values.yaml
  hooks:
  - events: ['prepare']
    command: bash
    args:
    - -c
    - |
      printf 'websso:\n  service:\n    fullnameOverride: my-helm.{{`{{ .Release.Namespace }}`}}.svc.cluster.local\n' > generated-values.yaml

我解决了这个问题,在我的 helm chart 之外执行了一个额外的命令。因为我有一个用于我的项目构建过程的 Makefile 文件,我可以在其中 运行 一些脚本用于我构建的多个阶段。所以我将此命令添加到部署阶段:

sed -i "s/_RELEASE_NAMESPACE_/$(NAMESPACE)/g" $(MODULE_PATH)/chart/values.yaml

这适用于某些工具中的构建工作流程。但是当我想在某个地方手动安装我的 helm chart 时,它无法完成,我需要用服务器值手动更改该值。