반응형
목차
1. 환경 구성 개요
Terraform으로 다음 리소스를 구성했습니다.
- ArgoCD (Helm Chart)
- GitHub Deploy Key 생성 (TLS provider)
- ArgoCD Repository Secret 생성 (SSH Private Key 저장)
- Application 리소스 생성 (kubernetes_manifest)
변수 예시:
git_repo_url = "git@github.com:smith/smith-test.git"
git_repo_path = "argocd"
git_target_revision = "main"
argocd_app_namespace = "default"
2. 발생한 오류
2.1 ArgoCD Repository Secret 생성 시 SSH Agent 에러
Error: POST https://api.github.com/repos/brun-ds/aws-pipeline-test/keys: 404 Not Found
원인
- Secret에 sshPrivateKey가 정상적으로 들어가지 않아, ArgoCD가 SSH Agent 방식으로 인증을 시도.
- Terraform에서 base64encode()로 이중 인코딩이 되면서 키를 읽을 수 없었음.
해결
- Kubernetes Secret 생성 시 base64 인코딩 제거, 프로바이더의 data 속성으로 평문 전달.
- type: git 필드도 반드시 포함.
resource "kubernetes_secret_v1" "argocd_repo" {
metadata {
name = "repo-aws-pipeline-test"
namespace = "argocd"
labels = {
"argocd.argoproj.io/secret-type" = "repository"
}
}
data = {
type = "git"
url = var.git_repo_url
sshPrivateKey = tls_private_key.github.private_key_openssh
}
type = "Opaque"
depends_on = [helm_release.argocd]
}
2.2 SSH 핸드셰이크 실패
Failed to load target state: ... SSH agent requested but SSH_AUTH_SOCK not-specified
원인
- Secret에 저장된 SSH 키가 GitHub Deploy Key와 불일치하거나, 포맷이 맞지 않음.
- Application의 repoURL과 Secret의 url이 불일치.
해결
- SSH 개인키 포맷 통일
- TLS provider의 private_key_openssh 사용.
sshPrivateKey = tls_private_key.github.private_key_openssh - URL 완전 일치
- 예: git@github.com:smith/smith-test.git
- Application repoURL과 Secret url을 동일하게.
- Deploy Key 등록 확인
- 레포 Settings → Deploy keys에 동일한 공개키가 있는지 확인.
- 로컬 테스트
ssh -T -i argocd-github-deploy-key.pem git@github.com
3. 최종 동작 확인
- terraform apply 후, ArgoCD UI에서 해당 Application이 Synced 상태로 표시.
- GitHub Deploy Key 사용 로그 확인:여기서 publickey 인증 성공 메시지 확인.
kubectl -n argocd logs deploy/argocd-repo-server
4. 정리
Terraform으로 ArgoCD + GitHub Private Repo를 연동할 때 SSH 인증 오류는 주로 아래 이유로 발생합니다.
- GitHub owner/레포명 불일치
- Secret에 잘못된 키 포맷 저장
- base64 이중 인코딩
- Application과 Secret의 repoURL 불일치
예방 팁
- Secret엔 string_data 대신 data를 사용하고 base64 인코딩을 직접 하지 않기.
- TLS provider에서 private_key_openssh를 사용해 키 포맷을 통일.
- 로컬에서 SSH 접속 테스트로 먼저 검증.
반응형
'DevOps' 카테고리의 다른 글
| EKS에서 Amazon DocumentDB 연결 테스트: 왜 telnet은 안되고 mongo는 될까? (1) | 2025.08.12 |
|---|---|
| AWS ALB + Grafana: 헬스체크는 unhealty지만 접속은 되는 이유와 해결법 (0) | 2025.08.08 |
| Terraform으로 AWS ALB Ingress 삭제 시 finalizer에 걸려 무한 대기하는 문제 해결기 (0) | 2025.08.08 |
| AWS ALB Ingress Controller – 포트 & Path 기반 라우팅 완전 정리 (0) | 2025.08.08 |
| GitHub Actions로 FastAPI Docker 이미지 AWS ECR에 자동 배포하기 (0) | 2025.08.07 |
댓글