본문으로 이동
Kim Jongwon
Projects

배포 설계 · GKE GitOps 배포 경로 구현 · 2026.04.10 - 2026.04.20

GCP GKE GitOps Pipeline

GitHub Actions image push와 Argo CD sync를 분리한 GKE 배포 경로

CI가 클러스터 변경 권한을 갖지 않게 image push와 manifest sync 책임을 분리했습니다.

Cluster

2 nodes

GKE nodes Ready

Deploy

2/2

Deployment rollout

Ingress

HTTP 200

external endpoint response

GKE GitOps Flow

CI와 CD 책임을 분리한 배포 경로

Terraform apply부터 Ingress HTTP 200까지 실습 환경에서 검증했습니다.

01

Terraform

GCP APIs, VPC/Subnet, GKE, WIF

02

Actions

OIDC/WIF auth, Docker build/push

03

Registry

commit SHA image tag

04

Argo CD

k8s/ desired state sync

05

Ingress

external IP HTTP 200

Infra

Terraform apply, 2 nodes Ready

배포

Actions push, registry tag

실행 상태

Synced/Healthy, HTTP 200

Terraform → GitHub Actions → Artifact Registry → Argo CD → GKE 배포 결과

권한을 나눈 이유

배포 권한 분리

CI가 클러스터 변경 권한을 갖지 않아야 합니다. 이미지 빌드·푸시와 Kubernetes 동기화 책임을 두 개의 독립된 단계로 나누는 것이 핵심이었습니다.

작업 파트

  • Terraform 관리 범위에 GKE, VPC/Subnet, Artifact Registry, GitHub WIF prerequisite를 포함했습니다.
  • GitHub Actions는 image push까지, Argo CD는 manifest sync 이후를 담당하도록 책임을 분리했습니다.
  • Ingress, Argo CD, rollout, registry tag 화면으로 delivery path 전체를 검증했습니다.

핵심 결과

  • CI: GitHub Actions image build/push
  • CD: Argo CD k8s/ manifest sync
  • Auth: GitHub OIDC/WIF, no static key

배포 화면

Terraform부터 Ingress까지

아키텍처, Terraform, Actions, Registry, Argo CD, Ingress 화면으로 배포 결과를 제시합니다.

Terraform, GitHub Actions, Artifact Registry, Argo CD, GKE로 구성된 GitOps 파이프라인 전체 아키텍처
Step 1 전체 아키텍처 - GCP 실행 환경, Registry, Argo CD, GitHub Actions 관계
Terraform apply 성공 화면
Step 2 Terraform apply - GKE 인프라 적용
GitHub Actions CI 성공 화면
Step 3 GitHub Actions - OIDC/WIF image push
GCP Artifact Registry image tags 화면
Step 4 Artifact Registry - commit SHA image tag
Argo CD Application Synced Healthy 상태 화면
Step 5 Argo CD - Synced/Healthy
GKE Ingress external IP HTTP 200 응답 화면
Step 6 GKE Ingress - HTTP 200

이미지와 sync 분리

GitOps 배포 결과

Terraform, Actions, Registry, Argo CD, GKE 사이에서 책임이 바뀌는 지점을 설명합니다.

  • Terraform modules에 GCP APIs, VPC/Subnet, GKE, Artifact Registry, GitHub WIF prerequisite를 정의했습니다.
  • GitHub Actions는 OIDC/WIF로 인증해 Docker image를 Artifact Registry에 push하는 것까지만 담당합니다.
  • Argo CD가 k8s/ manifest를 GKE에 sync하고, Deployment/Service/Ingress 상태를 관리합니다.
  • Terraform apply 이후 image tag, rollout 2/2, Argo CD Synced/Healthy, Ingress HTTP 200까지 순서대로 검증했습니다.
GKETerraformGitHub ActionsArtifact RegistryArgo CD

CI workflow

CI/CD 책임 분리

프로젝트의 핵심 구현 지점입니다.

CI push와 GitOps sync 책임 분리

.github/workflows/ci.yml + gitops/argocd-app.yaml

permissions:
  contents: read
  id-token: write

- uses: google-github-actions/auth@v2
  with:
    workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
    service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

- name: Build and push image
  run: docker push "${IMAGE_URI}"

spec:
  source:
    path: k8s
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

배포 결과

검증 기록과 실행 증거

GKE 배포 권한, image push, Argo CD sync, rollout, Ingress 응답까지 도달했습니다.

CI/CD 책임 분리

  • GKE 배포 권한, OIDC/WIF 인증 경로, rollout/Ingress 상태는 저장소 validation 문서에 단계별로 기록돼 있습니다.
  • image tag 변경 지점을 manifest에서 명시적으로 관리하고, GitHub secrets와 Argo CD bootstrap은 Terraform state 밖에 뒀습니다.