Este documento describe los problemas detectados y las correcciones aplicadas en el chart Helm de EchoIP, con el objetivo de garantizar su correcta renderización y despliegue en Kubernetes.
Se revisaron los siguientes archivos del chart:
templates/deployment.yamltemplates/ingress.yamltemplates/service.yaml
Los demás archivos (Chart.yaml, values.yaml, _helpers.tpl) fueron validados y no presentaron errores de sintaxis.
Las directivas Helm:
{{- with .Values.deployment.annotations }}
{{- end }}estaban mal ubicadas.
Interrumpían el bloque metadata: antes de cerrarse correctamente, lo que causaba errores de análisis YAML al procesar la plantilla.
Se movió el bloque with dentro de metadata: con la indentación adecuada para mantener la estructura jerárquica del documento.
Antes:
metadata:
name: {{ include "echoip.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "echoip.name" . }}
...
{{- with .Values.deployment.annotations }}
annotations:
{{ toYaml . | indent 4 }}
{{- end }}Después (corregido):
metadata:
name: {{ include "echoip.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "echoip.name" . }}
...
{{- with .Values.deployment.annotations }}
annotations:
{{ toYaml . | indent 4 }}
{{- end }}Esto permite que las anotaciones se apliquen correctamente dentro de la sección metadata: sin romper la estructura YAML.
El archivo comenzaba con la directiva:
{{- if .Values.ingress.enabled -}}pero el contenido posterior tenía indentación irregular y listas mal alineadas (-), lo que provocaba errores de parseo.
Helm requiere que las listas (-) estén correctamente indentadas dentro de sus respectivos bloques (rules, tls, etc.), y que no existan guiones solitarios fuera del contexto YAML.
- Se reordenó la indentación del archivo.
- Se alinearon los guiones (
-) dentro de las clavesrules:ytls:. - Se removieron guiones sobrantes y se normalizó el espaciado.
Ejemplo del bloque corregido:
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: {{ . | quote }}
http:
paths:
- path: {{ $ingressPath }}
pathType: ImplementationSpecific
backend:
service:
name: {{ $fullName }}
port:
number: {{ $svcPort }}
{{- end }}Ahora el archivo cumple con la sintaxis YAML esperada y se renderiza correctamente con helm template.
##service.yaml
###Problema
El bloque annotations: tenía mala indentación, y el bloque condicional para service.labels provocaba un hueco irregular que rompía el formato.
Antes:
metadata:
name: {{ include "echoip.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "echoip.name" . }}
{{- if .Values.service.labels }}
{{ toYaml .Values.service.labels | indent 4 }}
{{- end }}
annotations:
{{ toYaml .Values.service.annotations | indent 4 }}Esto hacía que annotations: no estuviera correctamente bajo metadata:.
- Se ajustó la indentación de
labels:yannotations:. - Se usaron bloques
withpara evitar claves vacías y mantener consistencia con Helm.
Después (corregido):
metadata:
name: {{ include "echoip.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "echoip.name" . }}
...
{{- with .Values.service.labels }}
{{ toYaml . | indent 4 }}
{{- end }}
{{- with .Values.service.annotations }}
annotations:
{{ toYaml . | indent 4 }}
{{- end }}Esto garantiza que tanto las etiquetas como las anotaciones se incluyan solo cuando estén definidas en values.yaml, respetando la estructura del objeto metadata.