我们使用 Helm 来部署我们的应用程序,其中一个使用 2 个(将来可能是 3 个)入口,每个入口都有多个路径。现在我们简单地描述 ingress.yaml 中的所有内容,如下所示:
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $fullName }}-api
...
rules:
{{- range .Values.ingress.hosts }}
- host: {{ . | quote }}
http:
paths:
- path: /api/health
pathType: Prefix
backend:
service:
name: {{ $global.ingress.app.serviceName }}
port:
number: {{ $global.ingress.app.servicePort }}
- path: /api/ready
pathType: Prefix
backend:
service:
name: {{ $global.ingress.app.serviceName }}
port:
number: {{ $global.ingress.app.servicePort }}
- path: /api
pathType: Prefix
backend:
service:
name: {{ $global.ingress.api.serviceName }}
port:
number: {{ $global.ingress.api.servicePort }}
...
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ $fullName }}-main
...
rules:
{{- range .Values.ingress.hosts }}
- host: {{ . | quote }}
http:
paths:
- path: /socket.io
pathType: Prefix
backend:
service:
name: {{ $global.ingress.socketio.serviceName }}
port:
number: {{ $global.ingress.socketio.servicePort }}
- path: /games
pathType: Prefix
backend:
service:
name: {{ $global.ingress.games.serviceName }}
port:
number: {{ $global.ingress.games.servicePort }}
...
和 values.yaml 包含类似
ingress:
enabled: true
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
globalStaticIPName: "ext_ip-1"
class: "nginx"
app:
serviceName: web-1
servicePort: 3000
api:
serviceName: web-1
servicePort: 3000
graphql:
serviceName: web-1
servicePort: 3000
socketio:
serviceName: web-1
servicePort: 3001
games:
serviceName: web-1
servicePort: 3001
它可以工作,但是 - 我们如何重写模板中的规则块以从自定义 values.yaml 中获取所有内容 - 路径、端口、名称 - 以使实际的 ingress.yaml 模板更短并动态生成?