Helm:无法用 tls 的非表覆盖表

问题描述 投票:0回答:2

这很可能非常简单,但我现在两个小时都想不出来。我有以下 Consul Ingress,我想通过父图表对其进行参数化:

spec:
  rules:
  {{- range .Values.uiIngress.hosts }}
    - host: {{ . }}
      http:
        paths:
          - backend:
              serviceName: {{ $serviceName }}
              servicePort: {{ $servicePort }}
  {{- end -}}
  {{- if .Values.uiIngress.tls }}
  tls:
{{ toYaml .Values.uiIngress.tls | indent 4 }}
  {{- end -}}
{{- end }}

我想参数化上面的

spec.tls

在 Consul 的

values.yaml
文件中,我们有以下模板:

uiIngress:
  enabled: false
  annotations: {}
  hosts: []
  tls: {}

我最接近的参数化如下:

  uiIngress:
    tls:
    - hosts:
      - "some.domain.com"
    secretName: "ssl-default"

当我这样做时,我收到此错误:

warning: cannot overwrite table with non table for tls (map[])

有人可以帮忙吗,我尝试了一百万件事。

kubernetes kubernetes-helm
2个回答
4
投票

如果 Consul 的

values.yaml
文件中定义的此图表的默认配置值具有以下结构:

uiIngress:
  enabled: false
  annotations: {}
  hosts: []
  tls: {}

当您执行

helm
命令时,您将发送如下值:

  uiIngress:
    tls:
    - hosts:
      - "some.domain.com"
    secretName: "ssl-default"

发生错误

warning: cannot overwrite table with non table for tls (map[])
是因为
tls
被定义为
{}
中的字典
values.yaml
并且您试图使用类型列表
[]
- hosts:
)为其设置值。 要修复警告,您可以将提供的
values.yaml
格式更改为:

uiIngress:
  enabled: false
  annotations: {}
  tls:
  - hosts: []

1
投票

检查您的

helm
版本。我认为旧版本存在一些问题。这个不错:

$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

我完全按照你提到的步骤操作:

  1. 添加了 consul 作为子图(在
    charts/consul
    中)
  2. 在创建的父图表中

    values.yaml

    consul:
      uiIngress:
        tls:
        - hosts:
          - "some.domain.com"
        secretName: "ssl-default"
    
  3. Helm 安装父图表

© www.soinside.com 2019 - 2024. All rights reserved.