단일 HELM 템플릿을 사용하는 여러 리소스

한번

기본적으로 애플리케이션 (공용) 당 단일 수신을 사용했지만 최근 요구 사항에 따라 일부 앱에 대해서도 (개인) 엔드 포인트를 노출해야합니다. 즉, 다음과 같은 단일 템플릿이 있습니다.

템플릿 / 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 }}

템플릿 / 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 -}}

values.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을 복제하고 잘 작동하지만 여기 내 질문은-각 수신 및 인증서에 대해 단일 템플릿을 사용하고 조건부 리소스를 만드는 방법이 있습니까?

위에서 언급했듯이 일부 앱에는 내부 수신이 필요하고 일부는 필요하지 않습니다. 내가하고 싶은 것은; 공개 인 그레스 / 인증서를 기본값으로, 비공개로 선택 사항으로 만듭니다. 나는 {{- if .Values.ingress.enabled -}}수신이 필요한지 확인 하는 옵션을 사용하고 있지만 2 개의 다른 파일에 있습니다.

또한 values.yaml 파일에서 두 개의 다른 블록을 갖는 대신 여러 리소스가 필요한 경우 목록을 사용하는 방법이 있습니까?

데이비드 메이즈

이 문제에 접근하는 방법에는 몇 가지가 있습니다.

리소스 당 하나의 파일이 있지만 논리가 약간 중복되는 방식은 합리적으로 일반적인 패턴입니다. 어떤 리소스가 생성되고 있는지 정확히 알 수 있으며 관련된 논리가 적습니다. Go 템플릿 언어는 약간 전문화되어 있으므로 프로젝트에서 작업하는 다른 사람들이 더 쉽게 접근 할 수 있습니다.

함께 결합하려면 몇 가지 옵션이 있습니다. @Matt가 주석에서 언급했듯이 YAML ---문서 구분 기호로 구분되는 한 동일한 파일에 여러 Kubernetes 리소스를 넣을 수 있습니다 .

{{/* ... arbitrary templating logic ... */}}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $fullName }}
...
{{/* ... more logic ... */}}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $fullName }}-private
...

여기서 중요한 것은 템플릿의 출력이 유효한 다중 문서 YAML 파일이라는 것입니다. helm template명령을 사용하여 실제로 클러스터로 전송하지 않고도 무엇이 나오는지 확인할 수 있습니다 .

이 접근 방식은 YAML 파일에 구성 규칙 목록이있는 것과 잘 어울립니다.

ingresses:
  - name: apps-ingress
    annotations:
      kubernetes.io/ingress.class: hybrid-external
      nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
  - name: apps-ingress-private
    annotations:
      kubernetes.io/ingress.class: hybrid-internal
      nginx.ingress.kubernetes.io/backend-protocol: "HTTP"

Go 템플릿 range구조를 사용하여 이러한 모든 항목을 반복 할 수 있습니다 . 이것은 .특수 변수를 차용 하므로 임의의 다른 것을 참조하는 .Values경우 현재 값을 저장해야합니다.

{{- $top := . -}}
{{- $ingress := range .Values.ingresses -}}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $ingress.name }}
  annotations: {{- $ingress.annotations.toYaml | nindent 4 }}
...
{{ end }}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ARM 템플릿을 사용하여 여러 리소스 배포

분류에서Dev

여러 포트가있는 Helm 템플릿 kubernetes 서비스

분류에서Dev

여러 리소스가 포함 된 단일 ARM 템플릿을 배포하거나 별도의 리소스를 병렬로 배포 하시겠습니까?

분류에서Dev

동일한 템플릿을 사용하는 여러 기능?

분류에서Dev

ARM 템플릿을 사용하여 Azure 리소스에 대한 활동 로그 진단 설정을 만드는 방법

분류에서Dev

로컬 보일러 템플릿에서 서버리스 템플릿을 만드는 방법

분류에서Dev

JQuery를 사용하여 SAP UI5 템플릿 핸들러의 스타일링을위한 액세스 행

분류에서Dev

신속한 메일러를 사용하여 템플릿을 읽는 방법?

분류에서Dev

ChefSpec을 사용하여 템플릿 기반 테스트 파일 초기화

분류에서Dev

템플릿을 사용하여 런타임에서 텍스트 파일 생성

분류에서Dev

여러 사용자를위한 systemd 단위 파일 템플릿

분류에서Dev

jdbc 템플릿을 사용하여 속성 파일을 사용하는 방법

분류에서Dev

헤더 및 소스 파일을 사용하는 템플릿 클래스

분류에서Dev

Variadic 템플릿을 여러 단일 템플릿으로 바꾸는 방법은 무엇입니까? (C ++ 경쟁 프로그래밍 디버깅 템플릿)

분류에서Dev

CodeSmith 템플릿을 사용하여 여러 SQL 스크립트 연결

분류에서Dev

동일한 논리로 여러 구성 요소를 만들거나 여러 템플릿을 사용하여 하나의 구성 요소를 만드는 방법은 무엇입니까?

분류에서Dev

Dockerfile에서 단일 COPY 계층을 사용하여 서로 다른 소스 및 대상 디렉토리에 여러 파일을 복사하는 방법

분류에서Dev

일종의 선택기 또는 변수를 사용하여 중복 템플릿을 단일 템플릿으로 통합합니다.

분류에서Dev

필드 플러그인, grails에서 동일한 클래스에 대해 사용자 정의 템플릿을 사용하는 방법

분류에서Dev

Django 템플릿 태그를 사용하여 템플릿에 컨텍스트를 추가하는 것이 나쁜 생각일까요? (Vue 구성 요소의 용이성을 모방하려고)

분류에서Dev

Angularjs 단위 테스트는 외부 템플릿을 사용하여 사용자 지정 지시문 내부의 약속을 해결

분류에서Dev

파일 템플릿을 사용하여 Kotlin 코드 생성

분류에서Dev

템플릿을 사용하여 이메일 보내기-grails

분류에서Dev

폴리머를 사용하여 템플릿에 HTML을 삽입하는 방법

분류에서Dev

템플릿을 여러 번 사용

분류에서Dev

C ++에서 동일한 클래스로 여러 템플릿 사용

분류에서Dev

단일 구성 요소에서 여러 모델을 사용하는 Chakra UI

분류에서Dev

ImageMagick을 사용하여 단일 소스 파일에서 여러 파일 형식을 생성하는 단일 명령

분류에서Dev

Openstack에서 HEAT 템플릿을 사용하여 생성 된 클러스터의 리소스에 대한 사용자 지정 이름

Related 관련 기사

  1. 1

    ARM 템플릿을 사용하여 여러 리소스 배포

  2. 2

    여러 포트가있는 Helm 템플릿 kubernetes 서비스

  3. 3

    여러 리소스가 포함 된 단일 ARM 템플릿을 배포하거나 별도의 리소스를 병렬로 배포 하시겠습니까?

  4. 4

    동일한 템플릿을 사용하는 여러 기능?

  5. 5

    ARM 템플릿을 사용하여 Azure 리소스에 대한 활동 로그 진단 설정을 만드는 방법

  6. 6

    로컬 보일러 템플릿에서 서버리스 템플릿을 만드는 방법

  7. 7

    JQuery를 사용하여 SAP UI5 템플릿 핸들러의 스타일링을위한 액세스 행

  8. 8

    신속한 메일러를 사용하여 템플릿을 읽는 방법?

  9. 9

    ChefSpec을 사용하여 템플릿 기반 테스트 파일 초기화

  10. 10

    템플릿을 사용하여 런타임에서 텍스트 파일 생성

  11. 11

    여러 사용자를위한 systemd 단위 파일 템플릿

  12. 12

    jdbc 템플릿을 사용하여 속성 파일을 사용하는 방법

  13. 13

    헤더 및 소스 파일을 사용하는 템플릿 클래스

  14. 14

    Variadic 템플릿을 여러 단일 템플릿으로 바꾸는 방법은 무엇입니까? (C ++ 경쟁 프로그래밍 디버깅 템플릿)

  15. 15

    CodeSmith 템플릿을 사용하여 여러 SQL 스크립트 연결

  16. 16

    동일한 논리로 여러 구성 요소를 만들거나 여러 템플릿을 사용하여 하나의 구성 요소를 만드는 방법은 무엇입니까?

  17. 17

    Dockerfile에서 단일 COPY 계층을 사용하여 서로 다른 소스 및 대상 디렉토리에 여러 파일을 복사하는 방법

  18. 18

    일종의 선택기 또는 변수를 사용하여 중복 템플릿을 단일 템플릿으로 통합합니다.

  19. 19

    필드 플러그인, grails에서 동일한 클래스에 대해 사용자 정의 템플릿을 사용하는 방법

  20. 20

    Django 템플릿 태그를 사용하여 템플릿에 컨텍스트를 추가하는 것이 나쁜 생각일까요? (Vue 구성 요소의 용이성을 모방하려고)

  21. 21

    Angularjs 단위 테스트는 외부 템플릿을 사용하여 사용자 지정 지시문 내부의 약속을 해결

  22. 22

    파일 템플릿을 사용하여 Kotlin 코드 생성

  23. 23

    템플릿을 사용하여 이메일 보내기-grails

  24. 24

    폴리머를 사용하여 템플릿에 HTML을 삽입하는 방법

  25. 25

    템플릿을 여러 번 사용

  26. 26

    C ++에서 동일한 클래스로 여러 템플릿 사용

  27. 27

    단일 구성 요소에서 여러 모델을 사용하는 Chakra UI

  28. 28

    ImageMagick을 사용하여 단일 소스 파일에서 여러 파일 형식을 생성하는 단일 명령

  29. 29

    Openstack에서 HEAT 템플릿을 사용하여 생성 된 클러스터의 리소스에 대한 사용자 지정 이름

뜨겁다태그

보관