배포 설계 · 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
권한을 나눈 이유
배포 권한 분리
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 화면으로 배포 결과를 제시합니다.
이미지와 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까지 순서대로 검증했습니다.
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 밖에 뒀습니다.