본문 바로가기
DevOps

Terraform으로 ArgoCD + GitHub Deploy Key 구성 시 SSH 인증 오류 해결기

by Rainbound-IT 2025. 8. 8.
반응형

목차

     

    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이 불일치.

    해결

    1. SSH 개인키 포맷 통일
      • TLS provider의 private_key_openssh 사용.
      sshPrivateKey = tls_private_key.github.private_key_openssh
    2. URL 완전 일치
      • 예: git@github.com:smith/smith-test.git
      • Application repoURL과 Secret url을 동일하게.
    3. Deploy Key 등록 확인
      • 레포 Settings → Deploy keys에 동일한 공개키가 있는지 확인.
    4. 로컬 테스트
       
    ssh -T -i argocd-github-deploy-key.pem git@github.com

    3. 최종 동작 확인

    1. terraform apply 후, ArgoCD UI에서 해당 Application이 Synced 상태로 표시.
    2. 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 접속 테스트로 먼저 검증.
    반응형

    댓글