kubernetes 使用单个HELM入口模板模板的多路径和多后端

yacmzcpb  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(120)

我试图为我的Ingress创建一个Helm模板,它应该包括2个后端(前端/后端),并允许每个服务中有多个路径。我的当前模板看起来像这样:

rules:
    - host: {{ $.Values.ingress.host}}
      http:
        paths:
         {{- range .Values.ingress.service }}
            {{- range .paths }}
            - path: {{ . }}
              pathType: Prefix   
              backend:
                service:
                  name: {{ name }}
                  port:
                    number: {{ .port }}
            {{- end }}        
         {{- end }}
{{- end }}

我的values文件看起来像这样:

ingress:
  enabled: true 
  host: exemple.com
  service:
  - name: backend
    port: 88
    paths:
      - /api
      - /test
  - name: frontend
    port: 80 
    paths:
      - /

我想要达到的结果如下:

rules:
  - host: appli-test.kube.cloud-grdf.fr
    http:
      paths:
        - backend:
            service:
              name: backend
              port:
                number: 88
          path: /api
          pathType: Prefix
        - backend:
            service:
              name: backend
              port:
                number: 88
          path: /test
          pathType: Prefix
        - backend:
            service:
              name: frontend
              port:
                number: 80
          path: /
          pathType: Prefix

任何帮助或建议如何实现这一结果将不胜感激。
谢谢你!

dl5txlt9

dl5txlt91#

正如在注解中提到的,问题是您在第二个循环中有不同的上下文。
要解决这个问题,您需要计算service的索引,然后在第二个循环中从根目录引用它。
是这样的:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: xyz
spec:
  ingressClassName: {{ .Values.ingress.className }}
  rules:
  - host: {{ $.Values.ingress.host}}
    http:
      paths:
        {{- range $index, $val := .Values.ingress.service }}
          {{- range .paths }}
          - path: {{ . }}
            pathType: Prefix   
            backend:
              service:
                name: {{ (index $.Values.ingress.service $index).name }}
                port:
                  number: {{ (index $.Values.ingress.service $index).port }}
          {{- end }}        
        {{- end }}

$引用根,所以我们从那里开始,然后沿着服务路径(.Values.ingress.service),并使用(index <path> $index)构造索引它,然后获得我们需要的密钥。

相关问题