我不确定你的要求是什么,但我想通常这些事情会用 Helm 来完成。您可以使用模板定义入口并指定 values.yaml,它可以提供生成该文件所需的值。对使用生成的舵图进行了轻微调整helm create
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "ingresstest.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "ingresstest.labels" . | nindent 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 $host := .Values.ingress.hosts }}
- host: {{ $host.host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . }}
backend:
serviceName: {{ $host.service }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
和 values.yaml (片段)
ingress:
enabled: true
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: foo.example.com
service: foo-service
paths:
- "/*"
- host: bar.example.com
service: bar-service
paths:
- "/*"
给出了类似的结果:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: RELEASE-NAME-ingresstest
labels:
helm.sh/chart: ingresstest-0.1.0
app.kubernetes.io/name: ingresstest
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
spec:
rules:
- host: "foo.example.com"
http:
paths:
- path: /*
backend:
serviceName: foo-service
servicePort: 80
- host: "bar.example.com"
http:
paths:
- path: /*
backend:
serviceName: bar-service
servicePort: 80