반응형
1. 들어가며
ArgoCD는 GitOps 방식으로 Kubernetes 애플리케이션을 관리할 수 있는 강력한 도구입니다.
하지만 운영 환경에서는 단순히 배포만 잘 된다고 끝이 아니죠. 애플리케이션의 동기화(Sync) 성공/실패 상태를 빠르게 알림으로 받아볼 수 있어야 합니다.
ArgoCD는 이를 위해 Slack Notifications 기능을 제공합니다.
이번 글에서는 EKS 환경에서 Slack 알림을 설정하는 방법과, 실제로 적용해본 Webhook 방식과 Token 방식의 차이점을 정리해보겠습니다.
2. Webhook 방식 적용기
저희는 먼저 Webhook 방식을 적용했습니다.
Webhook은 Slack에서 제공하는 Incoming Webhook URL을 사용해 메시지를 보내는 방식으로, 설정이 간단하고 빠릅니다.
주요 문제와 해결
- Terraform Validation 오류
- CronJob 리소스에서 metadata 블록 누락 → 빈 metadata {} 블록 추가로 해결
- Slack 알림 "not_authed" 에러
- service.slack 대신 service.webhook.slack을 사용해야 정상 동작
- Secret 참조 문제
- Slack Webhook URL이 잘못된 위치에 생성 → notifications.secret.items에 정의해야 올바르게 참조됨
- 과도한 로그 출력
- Controller가 1분마다 로그 출력 → 로그 레벨을 error로 낮추어 해결
- (단, 1분 주기 스캔은 소스코드에 고정되어 변경 불가)
최종 동작하는 Webhook 설정 예시
notifications:
enabled: true
controller:
replicas: 1
env:
- name: ARGOCD_NOTIFICATIONS_CONTROLLER_SELF_SERVICE_NOTIFICATION_ENABLED
value: "false"
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 256Mi
cm:
create: true
secret:
create: true
items:
slack-webhook: "${var.slack_webhook}"
notifiers:
service.webhook.slack: |
url: $slack-webhook
headers:
- name: Content-Type
value: application/json
templates:
template.app-sync-succeeded: |
webhook:
slack:
method: POST
body: |
{
"text": "✅ *{{.app.metadata.name}}* sync **SUCCEEDED**\n• Project: `{{.app.spec.project}}`\n• Revision: `{{.app.status.sync.revision}}`"
}
triggers:
trigger.on-sync-succeeded: |
- when: app.status.operationState != nil
&& app.status.operationState.phase == 'Succeeded'
&& app.status.sync.status == 'Synced'
oncePer: app.status.operationState.syncResult.revision
send: [app-sync-succeeded]
subscriptions:
- recipients:
- slack
triggers:
- on-sync-succeeded
✅ 간단히 설정할 수 있고, 기본적인 성공/실패 알림에는 충분했습니다.
3. Token 방식 살펴보기
Webhook 방식으로 운영하던 중, 더 풍부한 메시지 포맷과 다채널 전송이 필요할 수 있다는 점을 고려해 Token 방식도 조사했습니다.
Token 방식은 Slack Web API를 사용하는 방식으로, Slack App 생성과 Bot Token 발급이 필요합니다.
Token 방식 설정 단계
- Slack App 생성 → 워크스페이스에 설치
- Bot Token 권한 부여 (chat:write, chat:write.public)
- OAuth Token (xoxb-...) 발급
- ArgoCD Secret에 Token 저장
- Notifier와 Template을 Slack API 형식으로 작성
Token 방식 예시
notifications:
notifiers:
service.slack: |
token: $slack-token
username: ArgoCD
icon: ":argo:"
templates:
template.app-sync-succeeded: |
slack:
attachments: |
[{
"title": "✅ Application Synced Successfully",
"color": "good",
"fields": [
{
"title": "Application",
"value": "{{.app.metadata.name}}",
"short": true
},
{
"title": "Environment",
"value": "{{.app.metadata.namespace}}",
"short": true
},
{
"title": "Revision",
"value": "{{.app.status.sync.revision}}",
"short": false
}
],
"actions": [
{
"type": "button",
"text": "Open ArgoCD",
"url": "{{.context.argocdUrl}}/applications/{{.app.metadata.name}}"
}
]
}]
subscriptions:
- recipients:
- slack:#dev-deployments
- slack:#ops-alerts
triggers:
- on-sync-succeeded
여기서는 버튼까지 포함된 리치 메시지를 보낼 수 있습니다.
4. 두 방식 비교
| 구분 | Webhook 방식 | Token 방식 |
| 인증 | Webhook URL | Slack Bot Token (OAuth) |
| 채널 지정 | Webhook 생성 시 채널 고정 | recipients에서 채널 동적 지정 가능 |
| 메시지 표현 | 단순 텍스트/JSON | 첨부/블록/버튼 등 풍부한 포맷 지원 |
| 설정 난이도 | 간단 (URL만 필요) | 복잡 (앱 생성 및 권한 설정 필요) |
| 보안 관리 | URL 재발급 가능 | 토큰 회수/회전 가능 |
| 활용도 | 기본 알림에 적합 | 운영 고도화, 고급 기능 활용 적합 |
5. 우리가 Webhook 방식을 선택한 이유
- 간단함: Slack App 권한 관리 불필요
- 안정성: 인증 오류 가능성 적음
- 충분한 기능: 단순 알림 목적에는 적합
- 유지보수 용이: Token Rotation 관리 불필요
6. Token 방식을 고려해야 할 때
- 알림 메시지를 풍부하게 커스터마이징해야 할 때
- 여러 채널에 동시에 전송해야 할 때
- 버튼, 스레드, 리액션 등 고급 Slack 기능을 활용해야 할 때
- 메시지 포맷 제어가 중요한 환경에서
7. 마이그레이션 방법 (Webhook → Token)
- Slack App 생성 후 Token 발급
- Secret 수정 → slack-token 저장
- Notifier를 service.slack으로 변경
- Template을 Slack Attachment 포맷으로 업데이트
- Subscriptions에서 slack:#channel-name 형식으로 채널 지정
8. 마무리
- Webhook 방식: 단순 알림 목적에 빠르고 쉽게 적용 가능
- Token 방식: 더 풍부한 메시지와 다채널 전송이 필요할 때 유용
반응형
'DevOps' 카테고리의 다른 글
| GitHub Actions · AWS OIDC · Reusable Workflow · Terraform IaC 정리 (0) | 2025.09.04 |
|---|---|
| Terraform에서 AWS SSM Parameter Store 활용하기 (0) | 2025.09.04 |
| EKS 환경에서 ArgoCD Notifications와 Slack 연동하기 (1) | 2025.09.01 |
| ArgoCD 배포 시 실패한 Pod는 삭제됐는데 ReplicaSet은 남아있다? 괜찮은 걸까? (1) | 2025.08.29 |
| Argo CD CLI login 트러블슈팅 (ALB/Ingress, gRPC-Web, Windows) (0) | 2025.08.29 |
댓글