d3816a14ca
차트가 fernet key Secret 을 직접 만들면 helm.sh/hook: pre-install + hook-delete-policy: before-hook-creation 이 붙는다. ArgoCD 는 훅을 "삭제 후 재생성" 하는데, 변경이 없는 sync 에서는 삭제 직후 operation 이 종료되어 재생성되지 않는다. 컨트롤러 로그로 확인했다. 변경 있는 sync waiting for deletion ... -> serverside-applied -> Succeeded 'all tasks run' no-op sync waiting for deletion ... -> Succeeded (같은 초) 'no more tasks' 파드는 이미 주입된 env 로 계속 돌아 증상이 즉시 드러나지 않지만, 재시작하는 순간 CreateContainerConfigError 로 기동하지 못한다. refresh·selfHeal 로 흔히 발생하는 상황이다. fernetKeySecretName 을 주면 차트가 Secret 을 아예 만들지 않으므로 (templates/secrets/fernetkey-secret.yaml:23) 훅 자체가 사라지고, 모든 워크로드가 그 이름을 secretKeyRef 로 참조한다(templates/_helpers.yaml:395-397). $FERNET_KEY_SECRET 은 placeholder 다. dip-console-api 가 <릴리스명>-fernet-key Secret 을 만들고(없을 때만) 이 자리를 그 이름으로 치환한다. 콘솔이 만든 Secret 은 ArgoCD 추적 대상이 아니라 sync 의 영향을 받지 않는다. 값이 아니라 이름을 넘기는 이유가 하나 더 있다 — fernet key 는 메타DB 의 Connection·Variable 암호화에 쓰이므로 tenant 레포(git)에 평문으로 남기지 않는다. 업스트림도 can only be set during install, not upgrade 라고 못박고 있어, 이미 배포된 테넌트는 재배포 시 현재 Secret 을 그대로 인수한다. CUSTOM-README 5절은 이 문서의 성격(배포 방법 · custom-values.yaml 키 설명)에 맞게 키 테이블과 배포 절차 중심으로 다시 썼다(69줄 -> 48줄). 상세 근거는 이슈로 넘긴다. redis 훅 Secret 2종은 CeleryExecutor 전환 예정이 없어 조치하지 않는다. 참조 워크로드가 0개인 것을 클러스터에서 확인했다. 전환 시 처리 방법만 문서에 남긴다. 검증 service-catalog 에 선반영해 테스트 클러스터에서 확인했다. 재배포 후 sync 를 걸었을 때 훅인 redis Secret 2종은 또 삭제됐고 콘솔이 관리하는 fernet Secret 만 살아남았다(resourceVersion 미동, 값 동일). 이 레포 기준으로도 helm template 2회 렌더에서 차트가 fernet Secret 을 만들지 않고 webserver 체크섬이 동일함을 확인했다. 관련: paasup/dip-catalog#38, paasup/dip-console-api#100 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
128 lines
4.4 KiB
YAML
128 lines
4.4 KiB
YAML
ingress:
|
|
web:
|
|
enabled: true
|
|
annotations:
|
|
cert-manager.io/cluster-issuer: "root-ca-issuer"
|
|
cert-manager.io/duration: 8760h
|
|
cert-manager.io/renew-before: 720h
|
|
k8s.apisix.apache.org/plugin-config-name: oidc-keycloak-authz
|
|
ingressClassName: "apisix"
|
|
pathType: "Prefix"
|
|
hosts:
|
|
- name: "{{ .Name }}.{{ .Domain }}"
|
|
tls:
|
|
enabled: true
|
|
secretName: "{{ .Name }}-tls-secret"
|
|
|
|
# OIDC 인증에서 제외할 경로. 위 plugin-config-name(oidc-keycloak-authz)이 걸린 웹 Ingress와
|
|
# 별개로, 애노테이션 없는 Ingress를 하나 더 만들어 이 경로들을 인증 없이 통과시킨다
|
|
# (templates/webserver/webserver-ingress-static.yaml — PaaSup 추가 템플릿).
|
|
#
|
|
# 세션이 없을 때 /static 자원 수십 개가 동시에 OIDC 로그인 플로우를 시작하면서 state가
|
|
# 서로 덮어써져 500이 나는 문제를 막는다 (paasup/dip-catalog#24).
|
|
# Airflow의 /static은 공개 CSS/JS라 인증 제외에 보안상 문제가 없다.
|
|
#
|
|
# 비우면(또는 키를 지우면) 이 Ingress는 렌더되지 않는다 — 향후 dip-console이 같은
|
|
# 리소스를 차트 밖에서 생성하게 되면 여기를 비워서 중복을 없앤다.
|
|
dip:
|
|
unauthenticatedPaths:
|
|
- /static
|
|
|
|
executor: "KubernetesExecutor"
|
|
|
|
config:
|
|
core:
|
|
executor: KubernetesExecutor
|
|
default_timezone: kst
|
|
logging:
|
|
colored_console_log: "False"
|
|
logging_level: "INFO"
|
|
webserver:
|
|
enable_proxy_fix: "True"
|
|
rbac: "True"
|
|
default_ui_timezone: kst
|
|
|
|
scheduler:
|
|
replicas: 1
|
|
|
|
dags:
|
|
persistence:
|
|
enabled: true
|
|
size: 5Gi
|
|
storageClassName: longhorn
|
|
accessMode: ReadWriteMany
|
|
gitSync:
|
|
enabled: true
|
|
repo: "$dags.gitSync.repo"
|
|
branch: master
|
|
rev: HEAD
|
|
depth: 1
|
|
subPath: ""
|
|
credentialsSecret: "$INFISICAL_SECRET"
|
|
env:
|
|
- name: GIT_SSL_NO_VERIFY
|
|
value: "true"
|
|
|
|
# webserver 세션 서명 키. 배포 시점에 dip-console-api 가 난수로 치환한다
|
|
# (catalogs/catalogtype/catalog_airflow.go 의 DeployPreInstall).
|
|
#
|
|
# 이 값을 비워두면 차트가 템플릿에서 직접 만드는데(`randAlphaNum 32`), 그러면 helm template
|
|
# 이 렌더할 때마다 다른 결과를 내고 ArgoCD 가 이를 drift 로 보고 sync 하면 그 순간 또
|
|
# 달라져 수렴하지 않는다 — 실측에서 webserver 가 반복 재배포되고 웹 세션이 끊겼다.
|
|
# 차트 안에서는 못 고친다(ArgoCD repo-server 는 클러스터 접근이 없어 helm lookup 이 빈 값).
|
|
webserverSecretKey: "$WEBSERVER_SECRET_KEY"
|
|
|
|
# fernet key 는 값이 아니라 Secret 이름만 넘긴다 — dip-console-api 가 배포 시점에
|
|
# <릴리스명>-fernet-key Secret 을 만들고 이 자리를 그 이름으로 치환한다.
|
|
# 비워두면 차트가 Secret 을 pre-install 훅으로 만드는데, ArgoCD 는 훅을 "삭제 후 재생성"
|
|
# 하므로 변경이 없는 sync 에서는 삭제 직후 operation 이 끝나 재생성되지 않는다. 그러면
|
|
# 파드 재시작 시 기동에 실패한다 (paasup/dip-catalog#38).
|
|
# 이름만 넘기므로 키가 tenant 레포(git)에 평문으로 남지 않는다.
|
|
fernetKeySecretName: "$FERNET_KEY_SECRET"
|
|
|
|
webserver:
|
|
defaultUser:
|
|
enabled: true
|
|
password: "$webserver.defaultUser.password"
|
|
livenessProbe:
|
|
initialDelaySeconds: 120
|
|
readinessProbe:
|
|
initialDelaySeconds: 120
|
|
startupProbe:
|
|
initialDelaySeconds: 30
|
|
webserverConfig: |
|
|
AUTH_ROLE_PUBLIC = 'User'
|
|
|
|
logs:
|
|
persistence:
|
|
enabled: true
|
|
size: 5Gi
|
|
storageClassName: longhorn
|
|
|
|
statsd:
|
|
enabled: false
|
|
|
|
postgresql:
|
|
enabled: true
|
|
auth:
|
|
username: "postgres"
|
|
existingSecret: "$INFISICAL_SECRET"
|
|
secretKeys:
|
|
userPasswordKey: "postgres-password"
|
|
primary:
|
|
persistence:
|
|
enabled: true
|
|
size: 8Gi
|
|
storageClass: ""
|
|
|
|
migrateDatabaseJob:
|
|
# helm hook 을 끄면 Job 이 ArgoCD 가 추적하는 일반 리소스가 된다. 이 상태에서 차트 기본값인
|
|
# ttlSecondsAfterFinished: 300 이 남아 있으면, 완료 300초 뒤 TTL 컨트롤러가 Job 을 지우고
|
|
# ArgoCD 는 그것을 OutOfSync 로 보고 selfHeal 로 다시 만든다 — 5분 주기 재실행 루프.
|
|
# 리소스 수명은 ArgoCD 가 관리하므로 TTL 을 끈다(null 이면 필드 자체가 렌더되지 않는다).
|
|
# 대신 완료된 Job 객체가 네임스페이스에 남는다.
|
|
useHelmHooks: false
|
|
ttlSecondsAfterFinished: ~
|
|
|
|
data:
|
|
metadataSecretName: "$INFISICAL_SECRET" |