【问题标题】:Using ingress host from k8s secret in helm在 helm 中使用来自 k8s secret 的入口主机
【发布时间】:2022-02-18 20:52:46
【问题描述】:

我正在尝试使用 helm 部署服务。该集群是 Azure AKS,我有一个与可用于入口的集群关联的 DNS 区域。

但问题是 DNS 区域处于 k8s 机密中,我想在入口中使用它作为主机。如下所示

spec:
  tls:
  - hosts:
    - {{ .Chart.Name }}.{{ .Values.tls.host }}
  rules:
  - host: {{ .Chart.Name }}.{{ .Values.tls.host }}
    http:
      paths:
        -
          pathType: Prefix
          backend:
            service:
              name: {{ .Chart.Name }}
              port:
                number: 80
          path: "/"

我想要来自秘密的.Values.tls.host 值。目前,它被硬编码在values.yaml 文件中。

【问题讨论】:

    标签: kubernetes kubernetes-helm azure-aks


    【解决方案1】:

    这是为提高可见性而发布的社区 wiki 答案。随意扩展它。

    对于当前版本的 Helm (3.8.0),似乎无法通过标准方法直接使用 Secret 中的值。 根据Helm website的信息:

    模板指令包含在{{}} 块中。 传递给模板的值可以被认为是 namespaced 对象,其中一个点 (.) 分隔每个命名空间元素。

    Objects are passed into a template from the template engine 可以是:

    • 发布
    • 价值观
    • 图表
    • 文件
    • 能力
    • 模板

    Contents for Values objects can come from multiple sources:

    • 图表中的values.yaml 文件
    • 如果这是子图表,则为父图表的values.yaml 文件
    • 如果使用 -f 标志 (helm install -f myvals.yaml ./mychart) 传递到 helm installhelm upgrade,则为值文件
    • --set 传递的个别参数(如helm install --set foo=bar ./mychart

    【讨论】:

      【解决方案2】:

      Helm 无法从 Kubernetes 获取值,并且入口清单不支持这种类型的引用。

      您需要在 helm 之外执行此操作并将命令拼接在一起,在您的管道中或从某些脚本或在 shell 中手动进行。

      helm install my-app chart/ \
       --set tls.host="$(kubectl get secret my-dns-zone \
         -o go-template='{{index .data "dns-zone" | base64decode }}')"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        • 2021-12-26
        • 2021-01-07
        • 2018-10-20
        • 1970-01-01
        • 2021-05-16
        • 2020-02-27
        相关资源
        最近更新 更多