Files
service-catalog/charts/gitea/CUSTOM-README.md
T

9.1 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.username 관리자 계정 이름. "sudouser"
gitea.admin.password 관리자 계정 비밀번호. "password"
gitea.config.database.DB_TYPE 사용할 DB의 종류. "postgres"
gitea.config.database.HOST DB 접속을 위한 hostname. "postgresql-postgresql-ha-postgresql:5432"
gitea.config.database.NAME 사용할 Database 이름. "postgres"
gitea.config.database.USER DB 접속 시 사용할 계정. "postgres"
gitea.config.database.PASSWD DB 접속 시 사용할 계정의 비밀번호. "postgres"
gitea.config.database.SCHEMA DB에서 사용할 스키마. "pulic"
gitea.config.session.PROVIDER session engine provider 설정
gitea.config.session.PROVIDER_CONFIG session engine provider 접속 설정.
비어있을 시 db 설정을 사용한다.
""
gitea.config.repository.DEFAULT_BRANCH gitea의 repository에서 사용할 기본 브랜치 이름 "master"

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: platform
  • ingress 사용을 위해서는 인증서를 secret으로 제공해야한다. 로컬 파일을 이용해 secret을 생성하는 방법은 다음과 같다.

    kubectl create secret tls platform --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 연동 설정 시 아래 설정을 custom-values.yaml 또는 argo-values.yaml에 추가한다.
  • keycloak이 사설 인증서를 사용할 시 keycloak의 ca.crt를 secret으로 배포하고 아래와 같이 pod에 마운트한다.
  • KEYCLOAK_URL에 있는 정보를 keyclok에서 사용하는 도메인으로 수정이 필요하다.
  • REALM에 있는 정보를 keycloak에서 사용할 realm으로 수정이 필요하다..
  • KEYCLOAK_CLIENT_ID에 있는 정보를 kecloak의 client id로 수정이 필요하다.
  • KEYCLOAK_SECRET에 있는 정보를 client id의 credential secret으로 수정이 필요하다.
extraVolumes:
 - name: gitea-tls
   secret:
     ## 직접 생성하거니 같은 인증서를 사용할 때
     secretName: platform
     ## cert-manganager 사용시
     # secretName: keycloak-tls-secret

extraContainerVolumeMounts:
  - name: gitea-tls
    mountPath: /etc/ssl/certs/ca.crt
    subPath: ca.crt  
    
lifecycleHooks:
  postStart:
    exec:
      command: 
      - "/bin/sh"
      -  "-c"
      - |
        /bin/bash <<'EOF' > /tmp/post_start.log
        su git
        OAUTH_NAME='keycloak'
        AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " "  "{print \$1}")
        KEYCLOAK_URL="https://keycloak.example.org"
        KEYCLOAK_CLIENT_ID="keycloak"
        KEYCLOAK_SECRET=""
        REALM=paasup
        if [[ -z "${AUTH_ID}" ]]; then
          echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..."
          gitea admin auth add-oauth --auto-discover-url "${KEYCLOAK_URL}/auth/realms/${REALM}/.well-known/openid-configuration" --key "${KEYCLOAK_CLIENT_ID}" --name "keycloak" --provider "openidConnect" --secret "{$KEYCLOAK_SECRET}" 
          echo '...installed.'
        else
          echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..."
          gitea admin auth update-oauth --id "${AUTH_ID}" --auto-discover-url "${KEYCLOAK_URL}/auth/realms/${REALM}/.well-known/openid-configuration" --key"${KEYCLOAK_CLIENT_ID}" --name "keycloak" --provider "openidConnect" --secret "{$KEYCLOAK_SECRET}" 
          echo '...sync settings done.'
        fi
        EOF

5. 테넌트 배포

  • 테넌트 배포를 위하여 차트에 포함된 postgresql를 포함하여 배포하기 위한 설정이다.
  • 전체 내용은 argo-values.yaml 참조한다.
gitea:
  admin:   
    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를 설정한다.