【问题标题】:Issue injecting helm value on configmap在 configmap 上注入 helm 值的问题
【发布时间】:2022-01-20 22:00:31
【问题描述】:

有人可以帮忙吗? 我正在尝试在配置图上注入 helm 值,但它破坏了格式。如果我直接使用该值而不是 .Values,它可以正常工作。

我有什么:

data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  oidc.config: |
    name: Okta
    issuer: https://mycompany.okta.com
    clientID: {{ .Values.okta.clientID }}
    clientSecret: {{ .Values.okta.clientSecret }}
    requestedScopes: ["openid", "profile", "email", "groups"]
    requestedIDTokenClaims: {"groups": {"essential": true}}

结果

data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  oidc.config: "name: Okta\nissuer: https://mycompany.okta.com\nclientID: myClientId \nclientSecret:
    mySecret\nrequestedScopes: [\"openid\", \"profile\",
    \"email\", \"groups\"]\nrequestedIDTokenClaims: {\"groups\": {\"essential\": true}}\n"

【问题讨论】:

  • 不深入挖掘,这似乎还可以;结果有一个带有 \n 换行符的内联双引号字符串,而不是多行上的块标量,但它们应该是相同的 YAML 内容。哪些具体的事情没有正确通过?
  • @David Maze 它不起作用。它说 yaml 格式错误
  • 您使用什么值? (例如,尝试helm template --debug --set okta.clientId=id --set okra.clientSecret=passw0rd . 以获取不使用您的真实凭据的示例输出。)它实际上是否像您在示例中显示的那样分成三行?
  • @DavidMaze 值无关紧要。问题是,当我在 oidc.config 值中使用 helm 值时,它会破坏格式

标签: kubernetes kubernetes-helm argocd helm3


【解决方案1】:

它应该与 values.yaml 一起使用。它在两个方面都对我有用:

  1. 使用 values.yaml 中的值

Values.yaml:

okta:
  clientSecret: test1233
  clientID: testnew

配置图

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-config
  namespace: default
  labels:
    app: test
data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  oidc.config: |
    name: Okta
    issuer: https://mycompany.okta.com
    clientID: {{ .Values.okta.clientID }}
    clientSecret: {{ .Values.okta.clientSecret }}
    requestedScopes: ["openid", "profile", "email", "groups"]
    requestedIDTokenClaims: {"groups": {"essential": true}}

使用的命令:

 helm install testchart .\mycharttest --dry-run

-----输出-------

# Source: mycharttest/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-config
  namespace: default
  labels:
    app: test
    product: test
    db: test
data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  oidc.config: |
    name: Okta
    issuer: https://mycompany.okta.com
    clientID: testnew
    clientSecret: test1233
    requestedScopes: ["openid", "profile", "email", "groups"]
    requestedIDTokenClaims: {"groups": {"essential": true}}
  1. 在运行时使用值

---命令--

 helm install test .\mycharttest --dry-run --set okta.clientID=newclientid --set okta.clientSecret=newsecret

----输出---

# Source: mycharttest/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-config
  namespace: default
  labels:
    app: test
    product: test
    db: test
data:
  application.instanceLabelKey: argocd.argoproj.io/instance
  oidc.config: |
    name: Okta
    issuer: https://mycompany.okta.com
    clientID: newclientid
    clientSecret: newsecret
    requestedScopes: ["openid", "profile", "email", "groups"]
    requestedIDTokenClaims: {"groups": {"essential": true}

kubernetes 版本:1.22 头盔版: version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9"}

【讨论】:

    【解决方案2】:

    经过多次尝试,当我跳过开头的空格时,它起作用了

    data:
      application.instanceLabelKey: argocd.argoproj.io/instance
      oidc.config: |
        name: Okta
        issuer: "https://mycompany.okta.com"
        clientID: {{- .Values.okta.clientId }}
        clientSecret: {{- .Values.okta.clientSecret }}
        requestedScopes: ["openid", "profile", "email", "groups"]
        requestedIDTokenClaims: {"groups": {"essential": true}}
    

    【讨论】:

      【解决方案3】:

      将所有内容存储到文件中并直接使用它的简单方法

      文件oidc.config

      name: Okta
      issuer: https://mycompany.okta.com
      clientID: clientID 
      clientSecret: clientSecret
      requestedScopes: ["openid", "profile", "email", "groups"]
      requestedIDTokenClaims: {"groups": {"essential": true}}
      

      掌舵

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: {{ .Release.Name }}-configmap
      data:
        {{- $files := .Files }}
        {{- range tuple "oidc.config" }}
        {{ . }}: |-
              {{ $files.Get . }}
        {{- end }}
      

      参考文档:https://helm.sh/docs/chart_template_guide/accessing_files/

      还可以查看这个类似的答案:https://stackoverflow.com/a/56209432/5525824

      【讨论】:

      • 我仍然需要对凭据进行硬编码。这就是我要避免的。
      • 哦,好的,这将相应地更新答案
      猜你喜欢
      • 2018-02-06
      • 2022-10-21
      • 2021-12-18
      • 2019-07-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      相关资源
      最近更新 更多