Мы использовали один вход для каждого приложения (publi c) по умолчанию, но с недавним требованием нам необходимо предоставить (частную) конечную точку также для некоторых приложений. Это означает, что у нас был один шаблон, который выглядит следующим образом:
templates / ingress.yaml
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "app.fullname" . -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{ include "app.labels" . | indent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
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 | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . }}
backend:
serviceName: {{ $fullName }}
servicePort: http
{{- end }}
{{- end }}
{{- end }}
templates / cert.yaml
{{- if .Values.ingress.tls -}}
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: {{ .Values.ingress.name }}
namespace: {{ .Values.ingress.namespace }}
spec:
{{- range .Values.ingress.tls }}
secretName: {{ .secretName }}
duration: 24h
renewBefore: 12h
issuerRef:
name: {{ .issuerRef.name }}
kind: {{ .issuerRef.kind }}
dnsNames:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
{{- end -}}
{{- end -}}
И значения. yaml выглядит так:
ingress:
enabled: true
name: apps-ingress
namespace: app1-namespace
annotations:
kubernetes.io/ingress.class: hybrid-external
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
hosts:
- host: apps.test.cluster
paths:
- /
tls:
- secretName: app1-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
hosts:
- "apps.test.cluster"
Итак, чтобы приспособить новую настройку. Я добавил следующий блок в файл values.yaml.
ingress-private:
enabled: true
name: apps-ingress-private
namespace: app1-namespace
annotations:
kubernetes.io/ingress.class: hybrid-internal
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
hosts:
- host: apps.internal.test.cluster
paths:
- /
tls:
- secretName: app1-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
hosts:
- "apps.internal.test.cluster"
И продублировал оба шаблона, т.е. templates / ingress-private.yaml и templates / certs-private.yaml, и работает нормально, но мой вопрос здесь Есть ли способ использовать один шаблон для каждого входа и сертификата и создать условный ресурс?
Как я упоминал выше, некоторые приложения нуждаются во внутреннем входе, а некоторые нет. То, что я хочу сделать, это; сделать publi c ingress / certs по умолчанию и private как необязательное. я использовал опцию {{- if .Values.ingress.enabled -}}
, чтобы проверить, требуется ли вход, но в 2 разных файлах.
Кроме того, в файле values.yaml вместо двух разных блоков есть способ использовать список, если несколько ресурсы требуются?