Flux를 사용하여 Kubernetes에 Traefik Ingress를 배포합니다.

안녕하세요, Flux를 사용하여 Traefik Ingress 배포를 배포할 수 있는 방법을 공유하고 싶습니다.

Helm 차트를 배포하기 위해 Helm Cli를 사용하여 수동 배포를 설명하는 또 다른 게시물을 게시했음을 언급하고 싶습니다.

다이빙하자...

플럭스란 무엇입니까?



Flux는 Kubernetes 클러스터를 구성 소스(예: Git 리포지토리)와 동기화하고 배포할 새 코드가 있을 때 구성 업데이트를 자동화하기 위한 도구 모음입니다.

Flux 핵심 개념



here에서 필요한 정보를 찾을 수 있습니다.

플럭스를 어떻게 설치하나요?



두 부분을 설치해야 합니다. 첫 번째 부분은 Kubernetes 클러스터에 플럭스를 설치하는 데 필요한 Flux CLI입니다.
here에서 필요한 정보를 찾을 수 있습니다.

리포지토리를 어떻게 구성할 수 있습니까?



here에서 필요한 정보를 찾을 수 있습니다.

데모 리포지토리를 Bootstap으로 만들 수 있습니다.



flux bootstrap github \
  --owner=<github-user> \
  --repository=test-app-deployment \
  --team=Developers \
  --path=clusters/test-cluster \
  --components-extra=image-reflector-controller,image-automation-controller \
  --token-auth

이는 소스(Source of Truth)로 사용되는 Flux git 저장소를 구조화하는 매우 간단한 방법입니다(항상 플럭스에 의해 모니터링됨).



cluster/test-cluster 내에서 Kubernetes 클러스터에 배포하려는 애플리케이션을 추가할 것입니다.

Flux가 Helm Controller와 함께 Traefik Helm Chart를 배포할 수 있도록 하기 위해 커밋해야 하는 매니페스트를 다음과 같이 찾을 수 있습니다.



---
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: traefik
  namespace: flux-system
spec:
  interval: 1m0s
  url: https://helm.traefik.io/traefik

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: traefik
  namespace: flux-system
spec:
  chart:
    spec:
      chart: traefik
      sourceRef:
        kind: HelmRepository
        name: traefik
      version: 10.24.3
  interval: 1m0s
  releaseName: traefik
  targetNamespace: default
  valuesFrom:
    - kind: Secret
      name: traefik-secret
---
apiVersion: v1
kind: Secret
metadata:
  creationTimestamp: null
  name: traefik-secret
  namespace: flux-system
stringData:
  values.yaml: |
    additionalArguments:
      - "--providers.kubernetescrd.allowCrossNamespace=true"
      - "--certificatesresolvers.<le-name>.acme.tlschallenge"
      - "--certificatesresolvers.<le-name>.acme.email=<[email protected]>"
      - "--certificatesresolvers.<le-name>.acme.storage=/data/acme.json"
      # Logging
      - --log.level=info
      - --log.format=json
    service:
      enabled: true
      type: LoadBalancer
      annotations:
        helm.sh/resource-policy: keep
        meta.helm.sh/release-name: traefik
        meta.helm.sh/release-namespace: default
    ports:
      vault:
        port: 8200
        expose: true
        exposedPort: 8200
        protocol: TCP
    persistence:
      enabled: enable
      name: data
      accessMode: ReadWriteOnce
      size: 1024Mi
      path: /data
    podSecurityContext:
      fsGroup: null
    deployment: 
      initContainers:
        - name: fix-data-dir-permissions
          image: alpine:3.16.2
          command:
            - chown
            - -R  
            - 65532:65532
            - /data
          volumeMounts:
            - name: data
              mountPath: /data

다음 명령을 실행하여 플럭스가 조정 프로세스를 완료했는지 확인하십시오.

Also you can execute to retrieve all the resources managed by Flux
flux get all -A

If you want to force flux to reconcile faster a helm relase deployment you can execute the following commands
flux reconcile source git flux-system
flux get hr traefik


조정 프로세스가 완료되면 Traefik CRD의 배포인 배포의 다음 단계와 사용자 정의 미들웨어 및 Ingressroutes(실제로 사용자 정의 리소스임)와 같은 기타 필요한 정의를 진행할 수 있습니다.




---
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
  name: traefik-crds
  namespace: flux-system
spec:
  interval: 30m
  url: https://github.com/traefik/traefik-helm-chart.git
  ref:
    tag: v10.3.0
  ignore: |
    # exclude all
    /*
    # path to crds
    !/traefik/crds/
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
  name: traefik-api-crds
  namespace: flux-system
spec:
  interval: 15m
  prune: false
  sourceRef:
    kind: GitRepository
    name: traefik-crds
    namespace: flux-system
  healthChecks:
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: ingressroutes.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: ingressroutetcps.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: ingressrouteudps.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: middlewares.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: middlewaretcps.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: serverstransports.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: tlsoptions.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: tlsstores.traefik.containo.us
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: traefikservices.traefik.containo.us
---
# Redirect to https
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: redirectscheme
spec:
  redirectScheme:
    scheme: https
    permanent: true
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: frontend-ingress-route-redirect
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`some-domain`)
      kind: Rule
      services:
        - name: frontend
          port: <ports>
      middlewares:
        - name: redirectscheme #enable redirect to https
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: frontend-ingress-route-secure
  namespace: default
spec:
  entryPoints:
    - vault
  routes:
    - match: Host(``)
      kind: Rule
      services:
        - name: frontend
          port: <port>
  tls:
    certResolver: <le-name> #  can be random name


엄지 척을 포기한다면 튜토리얼이 마음에 드시기 바랍니다! 에서 나를 팔로우하고 내Newletter 를 구독하여 다가오는 자습서를 놓치지 않도록 할 수도 있습니다.

미디어 속성



내 게시물에서 사용하고 있는 멋진Clark Tibbs을 디자인해 준 것에 대해photo 감사합니다.

감사합니다, 건배!!!

좋은 웹페이지 즐겨찾기