셀프 호스팅 구성 참조(Self-Hosted Configuration Reference)
셀프 호스팅 구성 참조(Self-Hosted Configuration Reference)
confident-ai Helm 차트는 values 파일로 구성돼요. 이 페이지는 실제로 손댈 설정들을 관심사별로 묶어 설명해요. 각 클라우드의 Deploy 페이지(AWS, GCP, Azure)에서 완전하고 동작하는 values 파일을 제공하며, 여기는 각 블록이 무엇을 의미하는지에 대한 참조예요. 긴 꼬리(세밀한 리소스 튜닝, 오퍼레이터 내부)는 차트의 values.yaml을 직접 읽어요.
출처: 문서
본문
fullnameOverride: confident(차트 기본값)를 유지하고nameOverride는 설정하지 마세요. 프론트엔드가 차트 접두사 이름으로 백엔드와 다른 서비스를 확인하므로, 이름을 바꾸면ENOTFOUND confident-backend오류로 앱이 고장나요.
이 참조는 최신 차트(0.2.0)를 다룹니다. 더 오래된 차트 버전은
helm show values oci://ghcr.io/confident-ai/charts/confident-ai --version <x>로 값을 읽거나,helm-v<x>git 태그에서 차트를 보세요.
이미지와 레지스트리
각 앱 이미지는 repository + tag 전체로 참조돼서, 모든 이미지를 values.yaml에서 바로 추적할 수 있어요. 네 앱 이미지가 YAML 앵커로 하나의 태그를 공유하므로, 차트의 기본 태그가 릴리스(appVersion)와 일치해요 — 차트 버전을 설치하면 번들된 앱 버전을 오버라이드 없이 얻게 되죠.
| 값 | 기본값 | 설명 |
|---|---|---|
image.registry |
Confident AI의 ECR | 레지스트리 호스트. ECR 풀 시크릿 리프레셔만 사용해요. |
image.backend.repository (및 frontend, evals, otel) |
Confident AI의 ECR repos | 앱 이미지별 전체 리포지토리. 미러에서 가져오도록 오버라이드해요. |
image.backend.tag (및 frontend, evals, otel) |
차트 appVersion |
각 이미지가 실행하는 릴리스. 차트의 appVersion이 기본값이며, 서비스별 태그를 설정해 고정·오버라이드해요. |
image.pullPolicy |
IfNotPresent |
표준 Kubernetes 풀 정책. |
이미지 가져오기
이미지는 Confident AI의 비공개 레지스트리에 있어요. ECR 토큰이 약 12시간마다 만료되므로, 차트가 풀 시크릿을 만들어 갱신해 줄 수 있어요.
| 값 | 기본값 | 설명 |
|---|---|---|
imagePullSecrets |
[] |
모든 워크로드가 참조하는 풀 시크릿, 예: [{name: ecr-registry-credentials}]. |
imagePullSecretRefresh.enabled |
false |
일정에 따라 ECR 풀 시크릿을 만들고 갱신해요. |
imagePullSecretRefresh.region |
"" |
레지스트리의 AWS 리전 (활성화 시 필수). |
imagePullSecretRefresh.awsAccessKeyId / awsSecretAccessKey |
"" |
Confident AI의 ECR 자격 증명. 리프레셔 Secret에 렌더링돼요. |
imagePullSecretRefresh.awsCredentialsSecret |
"" |
인라인 대신 AWS 키가 있는 기존 Secret 사용. |
imagePullSecretRefresh.schedule |
0 */6 * * * |
갱신 주기. |
애플리케이션 구성
비밀번호가 아닌 설정들로, 모든 워크로드가 읽는 ConfigMap에 렌더링돼요.
| 값 | 기본값 | 설명 |
|---|---|---|
config.cloudProvider |
AWS |
AWS, GCP, 또는 AZURE. 스토리지 백엔드를 선택해요. |
config.frontendUrl |
"" |
공개 대시보드 URL, 예: https://app.acme.com. app. 인그레스 호스트를 결정해요. |
config.backendUrl |
"" |
공개 API URL, 예: https://api.acme.com. api. 인그레스 호스트를 결정해요. |
config.subdomain |
"" |
프론트엔드와 백엔드가 공유하는 쿠키 도메인, 예: acme.com. |
config.isAzureEnvironment |
false |
Azure에서는 true로 설정해요. |
config.disableNonSsoLogin |
false |
SSO를 요구하고 이메일·비밀번호 로그인을 끄는 설정. |
config.disableSignUp |
false |
새 계정 가입을 끄는 설정. 기존 사용자는 여전히 로그인 가능. |
config.enableExperimentalFeatures |
false |
실험·프리뷰 기능 활성화. |
config.useWebsockets |
true |
대시보드 실시간 업데이트에 WebSockets 사용. |
config.auditLogStdout |
false |
감사 이벤트를 로그 기반 지표(예: Datadog)용으로 JSON으로 stdout에 미러링. |
config.region |
US |
데이터 리전 라벨. |
config.betterAuthTrustedOrigins |
"" |
인증용 추가 쉼표 분리 신뢰 Origin. |
config.poc |
false |
환경을 개념 증명(POC)으로 표시. |
config.extraEnv |
{} |
ConfigMap에 추가되는 추가 키-값 쌍. |
아이덴티티
앱이 클라우드에 인증하는 방식이에요. 세부 사항은 클라우드마다 달라요.
| 값 | 기본값 | 설명 |
|---|---|---|
serviceAccount.create |
true |
모든 워크로드가 공유하는 ServiceAccount 생성. |
serviceAccount.name |
"" |
대신 사전 프로비저닝된 ServiceAccount 재사용. |
serviceAccount.annotations |
{} |
클라우드 워크로드-아이덴티티 바인딩 (아래 참고). |
podLabels |
{} |
추가 파드 라벨. Azure Workload Identity는 azure.workload.identity/use: "true" 필요. |
클라우드별 어노테이션:
- AWS: 없음. EKS Pod Identity가 역할을 대역외로 바인딩하므로 ServiceAccount에 어노테이션이 없어요.
- GCP:
iam.gke.io/gcp-service-account: <gsa-email>. - Azure: Blob에는 없음 (연결 문자열 사용). Workload Identity는 External Secrets Operator에만 필요해요.
객체 스토리지
| 값 | 기본값 | 설명 |
|---|---|---|
storage.testCasesBucket / storage.payloadsBucket |
"" |
버킷 이름 (AWS, GCP) 또는 컨테이너 이름 (Azure). |
storage.aws.region |
us-east-1 |
S3용 리전. |
storage.gcp.projectId / storage.gcp.region |
"" |
GCS용 프로젝트와 리전. |
storage.azure.storageAccountName |
"" |
Blob용 스토리지 계정. 연결 문자열은 시크릿에 들어가요. |
시크릿
애플리케이션 시크릿은 두 가지 방법 중 하나로 워크로드에 도달해요. 하나를 선택하세요.
| 값 | 기본값 | 설명 |
|---|---|---|
secrets.create |
true |
secrets.data에서 Kubernetes Secret 렌더링. |
secrets.existingSecret |
"" |
직접 만든 Secret 사용 (Vault, SealedSecrets 등). |
secrets.data.DATABASE_URL |
"" |
PostgreSQL 연결 문자열. |
secrets.data.BETTER_AUTH_SECRET |
"" |
인증 토큰 서명 시크릿 (openssl rand -hex 32). |
secrets.data.OPENAI_API_KEY |
"" |
선택. Confident AI 내장 평가 제공자를 뒷받침. |
secrets.data.CONFIDENT_LICENSE_KEY |
"" |
서명된 Enterprise 라이선스 키. |
secrets.data.GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET |
"" |
선택. Google OAuth. |
secrets.data.AZURE_STORAGE_CONNECTION_STRING |
"" |
Blob 자격 증명 (Azure 전용). |
secrets.data.SMTP_PASSWORD |
"" |
email.smtp에 설정된 SMTP 릴레이용 비밀번호 (Email 참고). |
secrets.data.RESEND_API_KEY |
"" |
SMTP 릴레이가 없을 때 쓰는 Resend API 키 (Email 참고). |
대신 클라우드 시크릿 스토어에서 가져오려면 External Secrets Operator를 활성화해요. externalSecrets.enabled가 true면 secrets.data는 무시되고 오퍼레이터가 앱 Secret을 소유해요.
| 값 | 기본값 | 설명 |
|---|---|---|
secrets.externalSecrets.enabled |
false |
ESO를 통해 클라우드 스토어에서 시크릿 동기화. |
secrets.externalSecrets.provider |
aws |
aws (Secrets Manager), gcpsm (Secret Manager), 또는 azurekv (Key Vault). |
secrets.externalSecrets.createStore |
false |
(Cluster)SecretStore도 렌더링. |
secrets.externalSecrets.remoteKey |
"" |
하나의 JSON 시크릿 이름 (aws, gcpsm). Key Vault는 모든 시크릿을 가져와요. |
secrets.externalSecrets.serviceAccountRef.name |
external-secrets-sa |
ESO가 인증하는 ServiceAccount. |
secrets.externalSecrets.aws.region / gcp.* / azure.vaultUrl |
"" |
제공자별 위치. |
이메일(Email)
백엔드가 초대, 비밀번호 재설정, 할당·내보내기 알림, 이메일 알림·리포트를 보내요. 아웃바운드 전송 수단 하나가 필요해요. 둘 다 없으면 앱은 실행되지만 모든 이메일을 건너뛰고 경고를 로그하며, 초대된 사용자는 링크를 받지 못해요.
| 값 | 기본값 | 설명 |
|---|---|---|
email.from |
"" |
발신자 주소, 예: [email protected]. 릴레이·제공자가 보낼 수 있게 허용한 주소여야 해요. email.smtp.host 설정 시 필수. |
email.smtp.host |
"" |
SMTP 릴레이 호스트. 설정되면 모든 이메일에 SMTP를 사용해요. |
email.smtp.port |
587 |
STARTTLS는 587, 암시적 TLS는 465 (secure: true 설정). 클라우드 제공자는 아웃바운드 포트 25를 차단해요. |
email.smtp.secure |
false |
암시적 TLS 사용. |
email.smtp.user |
"" |
SMTP 사용자 이름. 네트워크로 인증하는 릴레이는 비워 두세요. 비밀번호는 secrets.data.SMTP_PASSWORD에. |
email.resend.baseUrl |
"" |
Resend 클라이언트를 api.resend.com 대신 셀프 호스팅된 Resend 호환 엔드포인트로 지정. |
SMTP는 온프렘에서 권장 경로예요: 이미 운영 중인 메일 서버(Exchange·Office 365, Google Workspace, Amazon SES SMTP, SendGrid, 내부 Postfix)를 통해 릴레이해요. 그러면 전달성(SPF, DKIM, DMARC)이 여러분의 도메인과 릴레이에 있고, 클러스터에서 직접 보내는 것은 없어요.
email:
from: [email protected]
smtp:
host: email-smtp.us-east-1.amazonaws.com
port: 587
user: AKIA_CHANGE_ME
secrets:
data:
SMTP_PASSWORD: CHANGE_ME
대신 Resend(또는 Resend 호환 API)를 쓰려면 secrets.data.RESEND_API_KEY와 email.from을 설정하고 email.smtp.host는 비워 두세요. External Secrets 경로에서는 다른 키처럼 원격 스토어에 SMTP_PASSWORD 또는 RESEND_API_KEY를 추가해요. 새 Amazon SES 계정은 샌드박스 모드로 시작해서, 프로덕션 접근을 요청하기 전까지 검증된 주소에만 전달해요.
코드 실행기(Code executor)
코드 기반 및 트랜스포머 지표에 필요해요. provider가 어떤 블록을 사용할지 선택하며, provider가 비어 있으면 비활성화돼요.
| 값 | 기본값 | 설명 |
|---|---|---|
codeExecutor.provider |
"" |
AWS_LAMBDA, GCP_CLOUD_FUNCTIONS, 또는 AZURE_FUNCTIONS. |
codeExecutor.aws.lambdaFunctionName / lambdaRegion |
"" |
Lambda 대상. |
codeExecutor.gcp.functionUrl |
"" |
Cloud Run 서비스 URL. |
codeExecutor.azure.functionUrl |
"" |
Function URL (/api/execute 추가). |
ClickHouse
기본적으로 클러스터 안에서 실행되며, 고가용성을 위해 복제돼요. Scaling과 Disaster Recovery를 참고하세요.
| 값 | 기본값 | 설명 |
|---|---|---|
clickhouse.internal |
true |
번들 클러스터 실행. false와 externalHost로 직접 운영하는 클러스터를 써요. |
clickhouse.password |
"" |
관리자 비밀번호. 앱에도 CLICKHOUSE_PASSWORD로 노출돼요. |
clickhouse.clusterType |
replicated |
Keeper를 통한 복제본 간 복제. |
clickhouse.replicas / clickhouse.shards |
2 / 1 |
클러스터 크기. |
clickhouse.storage / clickhouse.storageClass |
256Gi / "" |
데이터 볼륨. 성장할 크기로. |
clickhouse.keeper.replicas / keeper.storage |
3 / 20Gi |
Keeper 쿼럼. 3으로 유지. |
clickhouse.backup.enabled |
false |
객체 스토리지로 매일 밤 백업 (Disaster Recovery 참고). |
clickhouse.extraConfig |
IPv4 listen | 파드가 0.0.0.0으로 청취하도록 고정. 듀얼 스택을 쓰지 않으면 그대로 둬요. |
Redis
| 값 | 기본값 | 설명 |
|---|---|---|
redis.internal |
true |
번들 Redis 실행. false로 설정하면 관리형 Redis를 써요. |
redis.externalUrl |
"" |
internal: false일 때의 관리형 Redis URL. |
redis.storage / redis.storageClass |
1Gi / "" |
클러스터 내부 Redis용 볼륨. |
워크로드와 확장
각 서비스(backend, frontend, evals, evalsWorker, ingestionWorker, worker, otel)는 같은 형태를 가져요. 튜닝 방법은 Scaling을 참고하세요.
| 값 | 설명 |
|---|---|
<service>.replicas |
자동 확장이 꺼져 있을 때 고정 레플리카 수. |
<service>.autoscaling.enabled |
HPA 켜기/끄기 (대부분 기본으로 켜짐). |
<service>.autoscaling.minReplicas / maxReplicas / targetCPU |
HPA 경계와 대상. |
<service>.resources |
CPU와 메모리 requests 및 limits. |
<service>.readinessProbe |
HTTP readiness 경로 (클라우드 로드 밸런서 헬스 체크를 구동). |
backend.migrations.enabled |
설치·업그레이드 시 데이터베이스 마이그레이션 작업 실행 (켜둬요). |
인그레스(Ingress)
| 값 | 기본값 | 설명 |
|---|---|---|
ingress.enabled |
false |
Ingress 생성. |
ingress.className |
alb |
Ingress 클래스 (alb, nginx, webapprouting.kubernetes.io, 또는 GKE의 어노테이션 구동 컨트롤러용 빈 값). |
ingress.annotations |
{} |
클라우드별 어노테이션. Deploy 페이지 참고. |
ingress.hosts.evals / ingress.hosts.otel |
"" |
evals. 및 otel. 호스트네임. app.와 api.는 config에서 온다. |
ingress.tls |
[] |
TLS 블록 (호스트 목록 + 시크릿 이름). |
옵저버빌리티(Observability)
| 값 | 기본값 | 설명 |
|---|---|---|
datadog.enabled |
false |
Datadog APM과 지표 전송. |
datadog.env / datadog.version |
prod / appVersion |
전송되는 텔레메트리의 태그. |
전체 목록
이 페이지는 대부분의 배포가 설정하는 항목을 다뤄요. 차트의 values.yaml이 진실의 원천(source of truth)이며, 모든 옵션(오퍼레이터 내부, 서비스별 리소스 기본값, ClickHouse 백업 제공자 포함)에 인라인 주석을 담고 있어요. 잘 모를 때는 거기서 읽으세요.