GitLab-Spamcheck 차트 사용하기

Tier: Premium, Ultimate Offering: Self-managed

spamcheck 서브 차트는 Spamcheck의 배포를 제공합니다. 이는 GitLab에서 개발한 반 스팸 엔진으로, GitLab.com에서 증가하는 스팸을 막기 위해 최초로 개발되었으며, 이후 자가 관리 GitLab 인스턴스에서 사용할 수 있도록 공개되었습니다.

요구 사항

이 차트는 GitLab API에 대한 접근이 필요합니다.

구성

Spamcheck 활성화

spamcheck는 기본적으로 비활성화되어 있습니다. GitLab 인스턴스에서 활성화하려면 Helm 속성 global.spamcheck.enabledtrue로 설정하세요. 예를 들어:

helm upgrade --force --install gitlab . \
--set global.hosts.domain='your.domain.com' \
--set global.hosts.externalIP=XYZ.XYZ.XYZ.XYZ \
--set certmanager-issuer.email='me@example.com' \
--set global.spamcheck.enabled=true

GitLab에서 Spamcheck 사용하도록 구성

  1. 왼쪽 사이드바에서 맨 아래에 있는 Admin Area를 선택합니다.
  2. Settings > Reporting을 선택합니다.
  3. Spam and Anti-bot Protection을 확장합니다.
  4. Spam Check 설정을 업데이트합니다:
    1. “Enable Spam Check via external API endpoint” 체크박스를 선택합니다.
    2. 외부 Spam Check 엔드 포인트의 URL로 grpc://gitlab-spamcheck.default.svc:8001을 사용합니다. 여기서 default는 GitLab이 배포된 Kubernetes 네임스페이스로 교체됩니다.
    3. “Spam Check API key”는 비워둡니다.
  5. Save changes를 선택합니다.

설치 명령줄 옵션

아래 표는 --set 플래그를 사용하여 helm install 명령에 제공될 수 있는 모든 가능한 차트 구성을 포함하고 있습니다.

매개변수 기본값 설명
affinity {} 포드 할당을 위한 Affinity 규칙
annotations {} 포드 주석
common.labels {} 이 차트에 의해 생성된 모든 객체에 적용되는 보조 레이블입니다.
deployment.livenessProbe.initialDelaySeconds 20 생존성 프로브가 시작되기 전에 지연되는 시간
deployment.livenessProbe.periodSeconds 60 생존성 프로브를 수행하는 빈도
deployment.livenessProbe.timeoutSeconds 30 생존성 프로브의 타임아웃 시한
deployment.livenessProbe.successThreshold 1 생존성 프로브가 실패 후 성공으로 간주되기 위한 최소 연속 성공 횟수
deployment.livenessProbe.failureThreshold 3 생존성 프로브가 성공 후 실패로 간주되기 위한 최소 연속 실패 횟수
deployment.readinessProbe.initialDelaySeconds 0 준비성 프로브가 시작되기 전에 지연되는 시간
deployment.readinessProbe.periodSeconds 10 준비성 프로브를 수행하는 빈도
deployment.readinessProbe.timeoutSeconds 2 준비성 프로브의 타임아웃 시한
deployment.readinessProbe.successThreshold 1 준비성 프로브가 실패 후 성공으로 간주되기 위한 최소 연속 성공 횟수
deployment.readinessProbe.failureThreshold 3 준비성 프로브가 성공 후 실패로 간주되기 위한 최소 연속 실패 횟수
deployment.strategy {} 배포에 사용되는 업데이트 전략을 구성할 수 있습니다. 제공되지 않는 경우 클러스터 기본값이 사용됩니다.
hpa.behavior {scaleDown: {stabilizationWindowSeconds: 300 }} 동적 축소 및 확대 동작을 위한 사양 (requires autoscaling/v2beta2 or higher)
hpa.customMetrics [] 원하는 복제 수를 계산하는 데 사용할 사용자 지정 메트릭 사양 (default average CPU Utilization 사용을 재정의)
hpa.cpu.targetType AverageValue 자동확장 CPU 대상 유형 설정, Utilization 또는 AverageValue 중 하나여야 함
hpa.cpu.targetAverageValue 100m 자동확장 CPU 대상 값 설정
hpa.cpu.targetAverageUtilization   자동확장 CPU 대상 사용량 설정
hpa.memory.targetType   자동확장 메모리 대상 유형 설정, Utilization 또는 AverageValue 중 하나여야 함
hpa.memory.targetAverageValue   자동확장 메모리 대상 값 설정
hpa.memory.targetAverageUtilization   자동확장 메모리 대상 사용량 설정
hpa.targetAverageValue   DEPRECATED 자동확장 CPU 대상 값 설정
image.registry   Spamcheck 이미지 레지스트리
image.repository registry.gitlab.com/gitlab-com/gl-security/engineering-and-research/automation-team/spam/spamcheck Spamcheck 이미지 리포지토리
image.tag   Spamcheck 이미지 태그
image.digest   Spamcheck 이미지 다이제스트
keda.enabled false KEDA ScaledObjects를 사용하여 HorizontalPodAutoscalers 대신 사용합니다.
keda.pollingInterval 30 각 트리거를 검사하는 주기
keda.cooldownPeriod 300 마지막 트리거가 활성 상태로 보고된 후 리소스를 0으로 되돌리기 전에 대기하는 기간
keda.minReplicaCount   KEDA가 리소스를 축소할 수 있는 최소 복제 수, 기본값은 hpa.minReplicas
keda.maxReplicaCount   KEDA가 리소스를 늘릴 수 있는 최대 복제 수, 기본값은 hpa.maxReplicas
keda.fallback   KEDA 폴백 구성, 문서 참조
keda.hpaName   KEDA가 생성할 HPA 리소스의 이름, 기본값은 keda-hpa-{scaled-object-name}
keda.restoreToOriginalReplicaCount   ScaledObject가 삭제된 후 원래 복제 수로 다시 축소할지 여부를 지정합니다.
keda.behavior   동적 축소 및 확대 동작에 대한 사양, 기본값은 hpa.behavior
keda.triggers   대상 리소스의 스케일링을 활성화하는 트리거 목록, 기본값은 hpa.cpuhpa.memory에서 계산된 트리거
logging.level info 로깅 레벨
maxReplicas 10 HPA maxReplicas
maxUnavailable 1 HPA maxUnavailable
minReplicas 2 HPA maxReplicas
podLabels {} 보조 포드 레이블. 선택기에 사용되지 않습니다.
resources.requests.cpu 100m Spamcheck 최소 CPU
resources.requests.memory 100M Spamcheck 최소 메모리
securityContext.fsGroup 1000 포드가 시작되어야 하는 그룹 ID
securityContext.runAsUser 1000 포드가 시작되어야 하는 사용자 ID
securityContext.fsGroupChangePolicy   볼륨의 소유권 및 권한을 변경하는 정책 (requires Kubernetes 1.23)
serviceLabels {} 보조 서비스 레이블
service.externalPort 8001 Spamcheck 외부 포트
service.internalPort 8001 Spamcheck 내부 포트
service.type ClusterIP Spamcheck 서비스 유형
serviceAccount.automountServiceAccountToken false 기본 ServiceAccount 접근 토큰이 포드에 마운트되어야 하는지 여부를 나타냅니다.
serviceAccount.create false ServiceAccount를 생성해야 하는지 여부를 나타냅니다.
serviceAccount.enabled false ServiceAccount를 사용해야 하는지 여부를 나타냅니다.
tolerations [] 포드 할당을 위한 내성 레이블
extraEnvFrom {} 노출할 추가 환경 변수 목록
priorityClassName   우선 순위 클래스 포드에 할당됩니다.

KEDA 구성

keda 섹션은 일반 HorizontalPodAutoscalers 대신 KEDA ScaledObjects의 설치를 가능하게 합니다.

이 구성은 선택 사항이며 사용자 정의 또는 외부 메트릭에 따라 자동 스케일링이 필요할 때 사용할 수 있습니다.

대부분의 설정은 가능한 경우 hpa 섹션에 설정된 값으로 기본값이 설정됩니다.

다음이 참인 경우, CPU 및 메모리 트리거는 hpa 섹션에 설정된 CPU 및 메모리 임계값에 따라 자동으로 추가됩니다:

  • triggers가 설정되어 있지 않습니다.
  • 해당 request.cpu.request 또는 request.memory.request 설정도 0이 아닌 값으로 설정되어 있습니다.

트리거가 설정되지 않으면 ScaledObject가 생성되지 않습니다.

자세한 설정에 대해서는 KEDA 문서를 참조하세요.

이름 유형 기본값 설명
enabled Boolean false KEDA ScaledObjectsHorizontalPodAutoscalers 대신 사용합니다.
pollingInterval Integer 30 각 트리거를 확인하는 간격입니다.
cooldownPeriod Integer 300 마지막 트리거가 활성 상태로 보고된 후 리소스를 0으로 다시 스케일링하기 전까지 기다리는 기간입니다.
minReplicaCount Integer   KEDA가 리소스를 축소할 최소 복제본 수, 기본적으로 hpa.minReplicas로 설정됩니다.
maxReplicaCount Integer   KEDA가 리소스를 늘릴 최대 복제본 수, 기본적으로 hpa.maxReplicas로 설정됩니다.
fallback Map   KEDA 폴백 구성, 문서를 참조하세요.
hpaName String   KEDA가 생성할 HPA 리소스의 이름, 기본적으로 keda-hpa-{scaled-object-name}로 설정됩니다.
restoreToOriginalReplicaCount Boolean   ScaledObject가 삭제된 후 대상 리소스를 원래 복제본 수로 다시 스케일링할지 여부를 지정합니다.
behavior Map   업스케일 및 다운스케일 동작에 대한 사양으로, 기본적으로 hpa.behavior로 설정됩니다.
triggers Array   대상 리소스의 스케일링을 활성화하는 트리거 목록, 기본적으로 hpa.cpuhpa.memory에서 계산된 트리거로 설정됩니다.

차트 구성 예제

serviceAccount

이 섹션은 ServiceAccount를 생성해야 하는지, 기본 액세스 토큰이 포드에 마운트되어야 하는지를 제어합니다.

이름 유형 기본값 설명
automountServiceAccountToken Boolean false 기본 ServiceAccount 액세스 토큰이 포드에 마운트되어야 하는지를 제어합니다. 특정 사이드카가 올바르게 작동하기 위해 요구되지 않는 한 이를 활성화하지 않아야 합니다 (예: Istio).
create Boolean false ServiceAccount를 생성해야 하는지를 나타냅니다.
enabled Boolean false ServiceAccount를 사용할 것인지 여부를 나타냅니다.

tolerations

tolerations는 오염된 워커 노드에 포드를 스케줄할 수 있도록 허용합니다.

아래는 tolerations의 사용 예입니다:

tolerations:
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoExecute"

affinity

자세한 정보는 affinity를 참조하세요.

annotations

annotations는 Spamcheck 포드에 주석을 추가할 수 있도록 해줍니다. 예를 들어:

annotations:
  kubernetes.io/example-annotation: annotation-value

resources

resources는 Spamcheck 포드가 소모할 수 있는 최소 및 최대 리소스(메모리 및 CPU)를 구성할 수 있도록 해줍니다.

예를 들어:

resources:
  requests:
    memory: 100m
    cpu: 100M

livenessProbe/readinessProbe

deployment.livenessProbedeployment.readinessProbe는 특정 시나리오에서 Spamcheck 포드의 종료를 제어하는 데 도움이 되는 메커니즘을 제공합니다.

예를 들어, 컨테이너가 고장난 상태일 때입니다.

deployment:
  livenessProbe:
    initialDelaySeconds: 10
    periodSeconds: 20
    timeoutSeconds: 3
    successThreshold: 1
    failureThreshold: 10
  readinessProbe:
    initialDelaySeconds: 10
    periodSeconds: 5
    timeoutSeconds: 2
    successThreshold: 1
    failureThreshold: 3

이 구성에 대한 추가 세부정보는 공식 Kubernetes Documentation를 참조하세요.