Files
service-catalog/manifests/helm/gitea/12.6.0/CUSTOM-README.md
T
wbsong111 16321b52c7 dipup 사용 차트를 카탈로그에 동기화 (7개 갱신 + 5개 신규)
dipup 이 go:embed 로 직접 보관·관리하던 Helm 차트를 카탈로그로 옮기는 첫 단계다.
두 저장소가 각자 CVE/SBOM 파이프라인을 운영하는 이중화를 해소하려면, 먼저 카탈로그가
dipup 과 같은 차트·같은 이미지를 보게 만들어야 한다.

배경: CVE 파이프라인 구성 이전에 두 곳에서 같은 차트를 유지하기 어려워 dipup 이 별도로
차트를 관리해 왔고, 그 결과 버전이 갈라졌다. 겹치는 10개 중 버전까지 일치하는 것은
postgresql-ha·dnsup 2개뿐이었다.

## 버전 갱신 (7개) — 신규 버전 디렉토리 추가, 구버전은 보존

| 차트 | 기존 | 신규 | appVersion |
|---|---|---|---|
| apisix | 2.14.0 | 2.16.0 | 3.16.0 → 3.17.0 |
| argo-cd | 7.7.0 | 7.8.11 | v2.13.0 → v2.14.5 |
| cert-manager | v1.16.1 | v1.21.0 | 동일 |
| gitea | 12.4.0 | 12.6.0 | 1.24.6 → 1.26.1 |
| harbor | 1.16.2 | 1.19.1 | 2.12.2 → 2.15.1 |
| kyverno | 3.4.1 | 3.8.2 | v1.14.1 → v1.18.2 |
| rancher | 2.10.1 | 2.14.3 | v2.10.1 → v2.14.3 |

차트 본문은 dipup 이 임베딩한 .tgz 를 그대로 전개했다(네트워크 pull 이 아니라 dipup 이
실제 배포하는 바이트와 동일함을 보장하기 위함). BUILD-README/CUSTOM-README/custom-values
3개 파일은 구버전에서 승계했다.

## 신규 추가 (5개)

infisical-standalone 1.9.0, longhorn 109.3.1+up1.11.2, longhorn-crd 109.3.1+up1.11.2,
metallb 0.16.1, secrets-operator v0.10.33.

longhorn/longhorn-crd 는 업스트림이 아니라 Rancher 패키징 차트(109.x 라인, Rancher 2.14
계열과 짝)다. BUILD-README 의 `helm repo add` 라인은 chart_version_detector 가 파싱하는
계약이라 실제 업스트림 repo 를 검증해 기재했고, 감지기로 현재/최신 버전이 정상 조회되는
것을 확인했다.

## custom-values — 버전과 결합된 이미지 핀 정리

카탈로그 스캐너가 dipup 의 effective image 를 보게 하려면 이미지 핀이 맞아야 한다.

- **kyverno: 승계본이 3.8.2 에서 깨져 재작성.** 3.4.1 은 정리 훅이
  `registry: ~ / repository: bitnami/kubectl` 이라 bitnamilegacy 오버라이드가 맞았지만,
  3.8.2 는 `registry: ghcr.io / repository: kyverno/readiness-checker` 로 바뀌었다.
  그대로 옮기면 ghcr.io/bitnamilegacy/kubectl 이라는 없는 좌표가 된다. 해당 오버라이드를
  제거하고, 3.8.2 에서 삭제된 policyReportsCleanup 키도 함께 뺐다. 남는 조치는 tag 고정뿐
  (기본 tag 가 비어 latest 로 떨어짐 → v1.18.2 로 고정).
- apisix: 3.16.0-keycloak-authz → 3.17.0-keycloak-authz (차트 appVersion 과 함께 이동)
- gitea: image.tag 1.26.4 핀 추가 — 차트 기본 1.26.1 대비 CRITICAL 2→0, HIGH 44→12
- infisical: image.tag v0.162.7 핀 — 기본 v0.158.x 는 stale Debian base 로 OS 기인 CVE
  다수(fixable CRITICAL 53→5, HIGH 491→55). redis/postgresql 은 bitnamilegacy 좌표로.
- longhorn: 실측 기반 리소스 튜닝(manager request, guaranteedInstanceManagerCPU,
  systemManagedCSIComponentsResourceLimits). replica 수처럼 노드 수에 의존하는 값은
  넣지 않았다 — 소비 측에서 주입한다.

## 검증

12개 차트 전부 `helm template --kube-version 1.34.1` 렌더 성공. 렌더 결과 이미지가
dipup 배포 이미지와 일치함을 확인(paasup/apisix:3.17.0-keycloak-authz,
gitea:1.26.4-rootless, readiness-checker:v1.18.2, infisical:v0.162.7).

## 범위에서 뺀 것

- **keycloak**: 카탈로그는 codecentric(app 17.0.1-legacy), dipup 은 bitnami(app 26.2.4)로
  계보가 다르다. 이슈 #1(bitnami 대체 방안 검토)의 결론이 나온 뒤 처리한다.
- **rancher-monitoring(-crd)**: 14c05f1 에서 불필요 판단으로 제거된 차트이고
  victoria-metrics 스택으로 대체 예정이라 추가하지 않는다.
- **dip-api/dip-console**: 자체 개발 차트로 각 앱 저장소가 출처다. 대조 결과 앱 저장소와
  dipup 사본이 일치해 카탈로그가 개입할 이유가 없다.
- **postgresql-ha/dnsup**: 이미 버전이 일치해 작업 대상이 아니었다.

## 후속 과제

dnsup 은 카탈로그·dipup 사본(1.0.1)이 원본(dip-console-api helm/dnsup 1.0.0)보다 앞서
있다. 1.0.1 에만 있는 service.LoadBalancerIP·service.annotations 지원을 원본으로 백포트한
뒤, 카탈로그에서 dnsup 을 제거하는 것이 자체 개발 차트 출처 원칙에 맞다.
2026-08-06 09:42:24 +09:00

12 KiB

Gitea 배포

1. 배포 전 사전 필요 사항

  1. 클러스터 배포 시
    • gitea가 배포될 네임스페이스에 postgresql이 배포되어 있어야 한다.
    • SSO 연동을 위해서는gitea가 배포될 네임스페이스에 keycloak 인증서가 secret으로 존재해야 한다.
  2. 테넌트 배포시
    • SSO 연동을 위해서는 gitea가 배포될 네임스페이스에 keycloak 인증서가 secret으로 존재해야 한다.

2. custom-values.yaml 설명

  • custom-values.yaml에 정의된 값에 대한 설명이다.

1) 전역 설정

  • private 환경 배포시 사용한다.
Name 설명 기본값
global.imageRegistry 오프라인 설치 시에 설정.
paasup 설치시에는 "paasup.io"으로 설정
""

2) Pod 설정

Name 설명 기본값
replicaCount gitea pod의 replicas 설정. "1"
tolerations gitea pod의 toleration 설정. []
nodeSelector gitea pod의 nodeSelector 설정. {}
resources.request.cpu Gitea pod의 cpu requst 설정. "100m"
resources.request.memory Gitea pod의 memory requst 설정. "300Mi"
resources.limits.cpu Gitea pod의 cpu limits 설정. "300m"
resources.limits.memory Gitea pod의 memory limits 설정. 500Mi
persistence.enable Gitea pod에 Persistence 생성 여부. "ture"
persistence.size 생성할 Persistent Volume 사이즈. 10Gi
persistence.storageClass Storage Class 설정. ""

3) gitea 설정

  • Gitea의 계정 설정과 app.ini에서 작성되는 기본 설정, 외부 DB 설정 등을 작성한다.
Name 설명 기본값
gitea.admin.email 관리자 계정 이메일. "sudouser@cro.com"
gitea.admin.username 관리자 계정 사용자명. "sudouser"
gitea.admin.password 관리자 계정 비밀번호. "password"
gitea.config.APP_NAME Gitea 애플리케이션 이름. "paasup git"
gitea.config.RUN_MODE Gitea 실행 모드. "prod"
gitea.config.server.ROOT_URL Gitea 서버의 루트 URL. "https://gitea.example.org"
gitea.config.database.DB_TYPE 사용할 DB의 종류. "postgres"
gitea.config.database.HOST DB 접속을 위한 hostname. "postgresql-postgresql-ha-postgresql:5432"
gitea.config.database.NAME 사용할 Database 이름. "gitea"
gitea.config.database.USER DB 접속 시 사용할 계정. "gitea"
gitea.config.database.PASSWD DB 접속 시 사용할 계정의 비밀번호. "gitea"
gitea.config.database.CHARSET DB 문자셋 설정. "utf8"
gitea.config.database.SCHEMA DB에서 사용할 스키마. "gitea"
gitea.config.database.SSL_MODE DB SSL 모드 설정. "disable"
gitea.config.session.PROVIDER session engine provider 설정. "postgres"
gitea.config.session.PROVIDER_CONFIG session engine provider 접속 설정. "user=gitea password=gitea host=postgresql-postgresql-ha-postgresql port=5432 dbname=gitea_session sslmode=disable"
gitea.config.session.COOKIE_NAME 세션 쿠키 이름. "i_hate_gitea"
gitea.config.service.DEFAULT_ALLOW_CREATE_ORGANIZATION 조직 생성 허용 여부. true
gitea.config.repository.DEFAULT_BRANCH gitea의 repository에서 사용할 기본 브랜치 이름. "master"
gitea.oauth OAuth 설정 목록 (Keycloak SSO 연동). 아래 참조

3. Ingress 설정

  • gitea에서 ingress 사용을 위해서는 다음과 같이 설정할 수 있다.

1) tls 시크릿 직접 생성

# ingress 배포 전 인증서 secret 배포 필요(secret 이름은 platform)
ingress:
  enabled: true
  annotations:
    konghq.com/protocols: https
    konghq.com/https-redirect-status-code: "301"
  hosts:
    - host: gitea.example.org
      paths:
        - path: /
          pathType: Prefix
  tls:
    - hosts:
        host: gitea.example.org  # 도메인 수정 필요
      secretName: gitea-tls-secret
  • ingress 사용을 위해서는 인증서를 secret으로 제공해야한다. 로컬 파일을 이용해 secret을 생성하는 방법은 다음과 같다.

    kubectl create secret tls gitea-tls-secret --cert=<path-to-cert-file> --key=<path-to-key-file> -n <namespace>
    

2) cert-manager 사용방법

  • 해당 방법은 클러스터에 cert-manager가 배포되어 있을 때 사용할 수 있다.

  • clusterIssuer 배포

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: selfsigned-issuer
    spec:
      selfSigned: {}
    
  • custom-values.yaml 정의

ingress:
  enabled: true
  annotations:
    konghq.com/protocols: https
    konghq.com/https-redirect-status-code: "301"
    cert-manager.io/cluster-issuer: "selfsigned-issuer"   # 생성한 cluster issuer 설정
    cert-manager.io/duration: 8760h                       # 인증서 유효기간 설정
    cert-manager.io/renew-before: 720h                    # 자동 갱신 설정. 만료되기 전 갱신 시간 설정
  hosts:
    - host: gitea.example.org
      paths:
        - path: /
          pathType: Prefix
  tls:
    - hosts:
        host: gitea.example.org  # 도메인 수정 필요
      secretName: gitea-tls-secret

4. Keycloak SSO 연동

  • Keycloak과의 SSO 연동은 gitea.oauth 설정을 통해 구성한다.
  • 사설 인증서를 사용하는 경우 TLS 인증서를 마운트해야 한다.

4-1) OAuth 설정

gitea:
  oauth:
  - autoDiscoverUrl: http://keycloak/realms/paasup/.well-known/openid-configuration
    key: gitea                                    # Keycloak에서 설정한 Client ID
    name: Keycloak                               # OAuth 제공자 표시 이름
    provider: openidConnect                      # OAuth 제공자 타입
    secret: VWIjYDNosSlPseEo5Uo8nkP3OHO4MigA    # Keycloak Client Secret

4-2) 사설 인증서 사용 시 추가 설정

# 사설 인증서를 사용 시 아래 내용 추가
extraVolumes:
  - name: gitea-tls
    secret:
      secretName: gitea-tls-secret

extraContainerVolumeMounts:
  - name: gitea-tls
    mountPath: /etc/ssl/certs/ca.crt
    subPath: ca.crt

extraInitVolumeMounts:
  - name: gitea-tls
    mountPath: /etc/ssl/certs/ca.crt
    subPath: ca.crt

4-3) OAuth 설정 파라미터

Name 설명 기본값
autoDiscoverUrl Keycloak OpenID Connect 자동 검색 URL "http://keycloak/realms/paasup/.well-known/openid-configuration"
key Keycloak에서 설정한 Client ID "gitea"
name OAuth 제공자 표시 이름 "Keycloak"
provider OAuth 제공자 타입 "openidConnect"
secret Keycloak Client Secret "VWIjYDNosSlPseEo5Uo8nkP3OHO4MigA"

5. 의존성 설정

  • 현재 custom-values.yaml에서는 외부 PostgreSQL을 사용하도록 설정.
  • 차트에 포함된 PostgreSQL과 Valkey는 비활성화.
# Postgresql 비활성화 (외부 PostgreSQL 사용)
postgresql:
  enabled: false
postgresql-ha:
  enabled: false

# valkey 비활성화
valkey:
  enabled: false
valkey-cluster:
  enabled: false

5-1) 테넌트 배포 (내장 PostgreSQL 사용)

  • 테넌트 배포를 위하여 차트에 포함된 postgresql를 포함하여 배포하기 위한 설정이다.
gitea:
  admin:
    existingSecret:
    username: sudouser
    password: password
    email: "sudouser@cro.com"
  config:
    APP_NAME: paasup git
    RUN_MODE: prod
    server:
      ROOT_URL: https://gitea.example.org
    service:
      DEFAULT_ALLOW_CREATE_ORGANIZATION: true
    repository:
      DEFAULT_BRANCH: master

postgresql:
  enabled: true
  global:
    postgresql:
      postgresqlDatabase: gitea  # 데이터베이스 이름 설정
      postgresqlUsername: gitea  # 데이터베이스 사용자 이름 설정
      postgresqlPassword: gitea  # 데이터베이스 사용자 비밀번호 설정
  persistence:
    size: 5Gi
    # storageClass: ""           # 생성할 볼륨의 storageClass를 설정한다.
postgresql-ha:
  enabled: false
valkey:
  enabled: true
  primary:
    persistence:
      size: 8Gi
valkey-cluster:
  enabled: false

6. Infisical 서비스 연동

---
apiVersion: secrets.infisical.com/v1alpha1
kind: InfisicalSecret
metadata:
  name: infisicalsecret-git # 고유한 이름으로 사용자 정의
  namespace: infisical
  labels:
    label-to-be-passed-to-managed-secret: test-git-secret # 고유한 이름으로 사용자 정의 (아래 annotations값과 동일)
  annotations:
    example.com/annotation-to-be-passed-to-managed-secret: "test-git-secret" # 고유한 이름으로 사용자 정의 (위의 label값과 동일)
spec:
  hostAPI: http://infisical-infisical-standalone-infisical.infisical.svc.cluster.local:8080/api # Infisical API
  resyncInterval: 10
  authentication:
    kubernetesAuth:
      identityId: 5ffaf885-7df2-4c75-a3a5-292a996aa3d7 # Infisical에서 생성한 값
      serviceAccountRef:
        name: infisical-auth
        namespace: infisical
      secretsScope:
        projectSlug: project1-9j-pp # 프로젝트 GET 
        envSlug: dev # 프로젝트 GET
        secretsPath: "/system/gitea" # 시크릿의 경로정의
        recursive: true
  managedSecretReference:
    secretName: gitea-user-secret # 생성할 시크릿 이름(values.yaml와 특정 이름으로 맞추면 변경하지 않아도됨)
    secretNamespace: test-git # Gitea가 배포될 네임스페이스 (네임스페이스가 사전에 생성되어 있어야함)
    creationPolicy: "Orphan" ## Owner | Orphan