首页 > 解决方案 > 用于多个入口/路径的 helm 入口模板

问题描述

我们使用 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 模板更短并动态生成?

标签: kubernetes-helmhelm3

解决方案


推荐阅读