Helm şablonu değerler ile uyumlu değil. Yaml yapısı
Aşağıdaki ingress.yaml dosyam var:
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host }} // row 31
http:
paths:
{{- range .paths }}
- path: {{ . | quote }}
backend:
serviceName: {{ $fullName }} servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
Ve bu şablonu beslemek için aşağıdaki değerler:
hosts:
host: "app.example.com"
paths:
- "/api"
- "/oauth"
tls:
- secretName: "example-tls"
hosts:
- "*.app.example.com"
- "dev.example.com"
"Helm install" komutunu çalıştırdığımda şu hata veriyor:
Hata: YÜKSELTME BAŞARISIZ: şablon: templates / ingress.yaml: 31: 15: <.host> adresinde "templates / ingress.yaml" çalıştırılıyor: {} tip arayüzünde alan ana bilgisayarı değerlendirilemiyor
Bu yüzden benim için ana bilgisayarlar bir sözlük değil bir liste olmalı gibi görünüyor ( aralık talimatı nedeniyle ). Bu yüzden onu dönüştürüyorum:
hosts:
- host: "app.example.com"
paths:
- "/api"
- "/oauth"
Ama bu durumda şunu anlıyorum:
uyarı: ana bilgisayarlar için hedef bir tablodur. Tablo dışı değer yok sayılıyor [harita [host: app.example.com yolları: [/ api / oauth]]]
ve ek olarak yukarıdakiyle aynı hata.
Nasıl çalışır hale getirilir?
GÜNCELLEME 1
Değerler:
ingress:
enabled: true
rules:
- host: c1.app.example.com
paths:
- /api
- /oauth
- host: c2.app.example.com
paths:
- /api
- /oauth
tls:
- secretName: "example-tls"
hosts:
- "*.app.example.com"
- "dev.example.com"
Şablon:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.rules }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . | quote }}
backend:
serviceName: {{ $fullName }} servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
GÜNCELLEME 2
Bu sorunun kodda değil komut satırında olduğunu anladım. Dizi yerine dizeyle besledim.
helm şablonu ... --set ingress.hosts.host = c1.app.example.com ...
Birden çok değeri nasıl sağlayacağımı ve burada güncelleyeceğimi bulmaya çalışacağım.
GÜNCELLEME 3
Verileri değerlerden sildim:
ingress:
enabled: false
rules:
- host:
tls:
- secretName:
hosts: []
Yanıtlar
Şablon arıyor .Values.ingress.hosts
, görüntülenen değerlerde ingress
önek yok . Ve range
operatör kullanılıyor, bir olması gereken sözlüğe listesini .
Ayrıca, a yapmadan önce , YAML tanımlarının doğru şekilde işlendiğinden emin olmak helm install
için çalıştırmak iyi olacaktır helm template
.
Aşağıdaki içeriği göz önünde bulundurarak values.yaml
:
---
ingress:
hosts:
-
host: app1.example.com
paths:
- /api
- /oauth
-
host: app2.example.com
paths:
- /api1
- /authz
tls:
- hosts:
- "*.app.example.com"
- "dev.example.com"
secretName: "example-tls"
Çalıştırma helm template
komutu şu sonuçlarla sonuçlanır: (Ben serviceName
haproxy olarak tanımladım ve servicePort
gösterim için 8080 olarak tanımladım ):
spec:
tls:
- hosts:
- "*.app.example.com"
- "dev.example.com"
secretName: example-tls
rules:
- host: app1.example.com // row 31
http:
paths:
- path: "/api"
backend:
serviceName: haproxy
servicePort: 8080
- path: "/oauth"
backend:
serviceName: haproxy
servicePort: 8080
- host: app2.example.com // row 31
# similar output for app2.example.com
Kendi sorumu cevaplıyorum.
Sorun, params geçersiz kılma için sağladığım giriş şablonu yapısı ve komut satırı argümanlarının uyumsuzluğuydu.
Bu, komut satırı argümanlarının tam uymasıdır :
helm upgrade <some other options here>
--values ./values.yaml
--set ingress.enabled=True
--set ingress.tls[0].hosts[0]=app.example.com
--set ingress.tls[0].secretName=example-tls
--set ingress.rules[0].host=app.example.com
Bu, değerleri doldurur. Yaml :
ingress:
enabled: false
rules:
- host:
tls:
- secretName:
hosts: []
Giriş şablonu için :
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- secretName: {{ .secretName }}
hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.rules }}
- host: {{ .host | quote }}
http:
paths:
- path: /api
backend:
serviceName: {{ $fullName }} servicePort: {{ $svcPort }}
{{- end }}
{{- end }}