GCP 인프라 삽질기 - VM, Load Balancer, 그리고 깨달음

GCP Infrastructure Journey - VMs, Load Balancers, and Lessons Learned

GCP Infrastructure Journey

1. 초기 요구사항

1. Initial Requirements

들어가며: 저는 전문 인프라 엔지니어가 아닙니다. 개발자로서 최소한의 클라우드 지식만 가지고 프로덕션 인프라를 세팅해야 하는 상황이었죠. 하지만 Orbitron과 함께라면 가능했습니다. 이 글에 담긴 모든 작업 - VM 생성, LB 설정 시도, 문제 분석, 새로운 방법 제안, 최종 인프라 구성, 그리고 이 문서 작성까지 - 모두 Orbitron AI가 수행했습니다. 저는 대화를 통해 요구사항을 전달하고, Orbitron이 제안하는 방향을 검토하며 함께 진행했을 뿐입니다.
Preface: I'm not a professional infrastructure engineer. As a developer with minimal cloud knowledge, I needed to set up production infrastructure. But with Orbitron, it was possible. Everything in this post - VM creation, LB configuration attempts, problem analysis, proposing new approaches, final infrastructure setup, and even writing this document - was all performed by Orbitron AI. I simply communicated my requirements through conversation and reviewed the directions Orbitron proposed.

배경

Background

기존 VM(test-vm)은 default 네트워크에서 External IP와 포트를 열어두고 기능 테스트를 마친 서버였습니다. 기능적으로는 검증이 끝났지만, 보안이 취약한 상태로 운영할 수는 없었죠. 이제 프로젝트 전용 Private VPC로 네트워크를 이전하고 보안을 강화한 실제 프로덕션 환경이 필요한 상황이었습니다.

The existing VM (test-vm) in the default network had completed functional testing with open External IP and ports. While functionality was verified, it couldn't remain in production with weak security. It was time to migrate to a project-isolated Private VPC and set up a proper production environment with enhanced security.

처음에는 작업의 목표가 뚜렷하지 않았습니다. 막연하게 "이런 게 필요하겠지"라고 생각만 했었죠:

Initially, the goals weren't clear. I just vaguely thought "I probably need something like this":

  • 기존 VM의 이미지를 복사
  • Copy the image from existing VM
  • Private VPC에 새 VM 생성
  • Create new VM in Private VPC
  • 기존 instance-group과 내부 통신
  • Internal communication with existing instance-group
  • Internal LB + External LB 구성
  • Configure Internal LB + External LB

간단해 보였지만... 현실은 녹록지 않았습니다.

It seemed simple... but reality had other plans.

2. 1단계: VM 및 이미지 생성

2. Step 1: VM and Image Creation

성공 Success
test-vm (default 네트워크, us-central1-f)
  → 이미지 생성 (test-vm-image)
  → 새 VM 생성 (production-vm, Private VPC, 500GB 표준 디스크)
test-vm (default network, us-central1-f)
  → Create image (test-vm-image)
  → Create new VM (production-vm, Private VPC, 500GB standard disk)
결과: 성공! 첫 단계는 순조롭게 진행되었습니다.
Result: Success! The first step went smoothly.

3. 2단계: Managed Instance Group 생성

3. Step 2: Managed Instance Group Creation

실패 Failed
인스턴스 템플릿 생성 → MIG 생성 (production-mig)
  → 자동으로 인스턴스 1개 생성 (production-mig-xxxx)
Create instance template → Create MIG (production-mig)
  → Auto-created 1 instance (production-mig-xxxx)

문제 발견

Problems Found

  • 단일 VM만 사용할 예정인데 MIG가 불필요
  • MIG는 자동 확장/복구용인데 요구사항에 맞지 않음
  • MIG unnecessary when only using a single VM
  • MIG is for auto-scaling/recovery which doesn't fit requirements
결과: MIG 삭제 결정. 불필요한 복잡도를 추가할 뻔했습니다.
Result: Decided to delete MIG. Almost added unnecessary complexity.

4. 3단계: Internal Load Balancer 시도

4. Step 3: Internal Load Balancer Attempt

실패 Failed

생성 과정

Creation Process

Internal Backend Service (app-internal-backend)
  → MIG 연결
  → Forwarding Rule (10.x.x.x:80)
Internal Backend Service (app-internal-backend)
  → Connect MIG
  → Forwarding Rule (10.x.x.x:80)

문제 발견

Problems Found

  • Private VPC 내부 통신은 방화벽 규칙(vpc-allow-internal-all)으로 이미 허용됨
  • 10.0.0.0/8 대역 내 모든 TCP/UDP 포트 통신 가능
  • 단일 VM이므로 내부 IP로 직접 통신하면 됨
  • Internal LB는 여러 VM 간 트래픽 분산용인데 불필요
  • Private VPC internal communication already allowed via firewall rules (vpc-allow-internal-all)
  • All TCP/UDP ports accessible within 10.0.0.0/8 range
  • Single VM can communicate directly via internal IP
  • Internal LB for multi-VM traffic distribution is unnecessary
결과: Internal LB 삭제. 이미 있는 방화벽 규칙으로 충분했습니다.
Result: Deleted Internal LB. Existing firewall rules were sufficient.

5. 4단계: External HTTP(S) Load Balancer 시도

5. Step 4: External HTTP(S) Load Balancer Attempt

실패 Failed

생성 과정

Creation Process

Health Check (app-health-check, TCP 80)
  → Backend Service (app-external-backend)
  → Unmanaged Instance Group (app-external-ig)
  → URL Map (app-external-lb)
  → HTTP Proxy (app-http-proxy)
  → Forwarding Rule (xxx.xxx.xxx.xxx:80)

문제 1: Health Check 실패

Problem 1: Health Check Failure

  • 헬스 체크가 80 포트 확인 → 리버스 프록시는 443 포트만 외부 바인딩
  • 해결: 헬스 체크를 443 포트로 변경 (app-health-check-443)
  • Health check on port 80 → Reverse proxy only binds port 443 externally
  • Solution: Changed health check to port 443 (app-health-check-443)

문제 2: HTTPS 추가 시도

Problem 2: HTTPS Addition Attempt

HTTPS Proxy 생성 시도
  → 기존 SSL 인증서 사용 시도
Attempted HTTPS Proxy creation
  → Tried using existing SSL certificate
치명적 문제 발견:
  • 기존 SSL 인증서는 다른 서비스에서 사용 중
  • 도메인: app.example.com, auth.example.com
  • 새 도메인 api.example.com에는 사용 불가
Critical Problem Found:
  • Existing SSL certificate already in use by other services
  • Domains: app.example.com, auth.example.com
  • Cannot use for new domain api.example.com

근본적 문제

Fundamental Problem

  • VM 내부에서 이미 SSL 자동 발급을 처리 중
  • GCP HTTP(S) LB는 자체 SSL 인증서 필요
  • SSL 이중 처리 불가: LB에서 SSL 종료하면 VM 내부 SSL 처리와 충돌
  • VM already handles auto SSL certificate issuance internally
  • GCP HTTP(S) LB requires its own SSL certificate
  • Cannot have dual SSL handling: SSL termination at LB conflicts with VM's internal SSL processing
결과: HTTP(S) LB 방식 포기
Result: Abandoned HTTP(S) LB approach

6. 5단계: External TCP Load Balancer 시도

6. Step 5: External TCP Load Balancer Attempt

실패 Failed

개념

Concept

  • SSL Passthrough: LB가 암호화된 트래픽을 복호화하지 않고 그대로 전달
  • VM 내부에서 SSL 처리 가능
  • SSL Passthrough: LB forwards encrypted traffic without decryption
  • VM handles SSL processing internally

생성 과정

Creation Process

고정 IP 생성 (app-external-ip, xxx.xxx.xxx.xxx)
  → TCP Backend Service (app-tcp-backend)
  → TCP Proxy (app-tcp-proxy)
  → Forwarding Rules (80, 443 포트)
  → DNS: api.example.com → xxx.xxx.xxx.xxx
Create static IP (app-external-ip, xxx.xxx.xxx.xxx)
  → TCP Backend Service (app-tcp-backend)
  → TCP Proxy (app-tcp-proxy)
  → Forwarding Rules (ports 80, 443)
  → DNS: api.example.com → xxx.xxx.xxx.xxx

문제 1: 리버스 프록시 80 포트 미바인딩

Problem 1: Reverse Proxy Port 80 Not Bound

reverse-proxy   80/tcp, 0.0.0.0:443->443/tcp
  • 80 포트가 컨테이너 내부만 열림
  • 해결: docker-compose에서 "80:80" 추가
  • Port 80 only open inside container
  • Solution: Added "80:80" in docker-compose

문제 2: 404 Page Not Found

Problem 2: 404 Page Not Found

  • 리버스 프록시가 요청은 받았지만 라우팅 규칙 없음
  • api.example.com 도메인에 대한 라우터 설정 필요
  • Reverse proxy received request but no routing rules
  • Router configuration needed for api.example.com domain
치명적 문제: SSL 인증서 자동 발급 실패
Critical Problem: Auto SSL Certificate Issuance Failed

SSL 인증서 자동 발급(ACME HTTP-01 Challenge) 동작 방식

How Auto SSL Certificate Issuance (ACME HTTP-01 Challenge) Works

1. 리버스 프록시가 인증 기관에 인증서 요청
2. 인증 기관: "api.example.com/.well-known/acme-challenge/TOKEN 에 파일 올려"
3. 리버스 프록시: 해당 경로에 파일 생성
4. 인증 기관: api.example.com → DNS 조회 → xxx.xxx.xxx.xxx (TCP LB IP)
5. 인증 기관: xxx.xxx.xxx.xxx:80 으로 HTTP 요청
6. TCP LB: 요청을 VM(10.x.x.x)으로 전달
7. 리버스 프록시: 파일 응답
8. 인증 기관: 인증 성공 → 인증서 발급
1. Reverse proxy requests certificate from CA
2. CA: "Upload file to api.example.com/.well-known/acme-challenge/TOKEN"
3. Reverse proxy: Creates file at that path
4. CA: api.example.com → DNS lookup → xxx.xxx.xxx.xxx (TCP LB IP)
5. CA: HTTP request to xxx.xxx.xxx.xxx:80
6. TCP LB: Forwards request to VM (10.x.x.x)
7. Reverse proxy: Responds with file
8. CA: Verification success → Issue certificate

실제 문제

The Actual Problem

DNS: api.example.com → xxx.xxx.xxx.xxx (TCP LB)
인증 기관 → TCP LB → VM
DNS: api.example.com → xxx.xxx.xxx.xxx (TCP LB)
CA → TCP LB → VM

하지만:

However:

  • TCP LB는 프록시 프로토콜 사용
  • 인증 기관이 보는 IP: TCP LB IP
  • 리버스 프록시가 보는 클라이언트 IP: TCP LB의 내부 IP
  • 도메인 검증 실패 가능성 또는 네트워크 지연/타임아웃
  • TCP LB uses proxy protocol
  • IP seen by CA: TCP LB IP
  • Client IP seen by reverse proxy: TCP LB's internal IP
  • Possible domain verification failure or network latency/timeout

추가 문제:

Additional Problems:

  • TCP LB 헬스 체크가 443 포트만 확인
  • 인증 기관은 80 포트로 검증 시도
  • 타이밍 이슈 발생 가능
  • TCP LB health check only checks port 443
  • CA attempts verification on port 80
  • Possible timing issues
결과: TCP LB도 포기
Result: Abandoned TCP LB as well

7. 최종 해결: VM External IP 직접 사용

7. Final Solution: Direct VM External IP

성공 Success
드디어 해결! 가장 단순한 방법이 정답이었습니다.
Finally solved! The simplest approach was the answer.

구성

Configuration

1. VM 외부 IP를 고정 IP로 승격
   - 임시 IP → 고정 IP (vm-static-ip)

2. DNS 직접 연결
   - api.example.com → VM 고정 IP (VM 직접)

3. VM 내부에서 직접 인증서 발급
   - 인증 기관 → api.example.com → VM IP
   - 리버스 프록시가 HTTP-01 Challenge 직접 처리
   - 인증서 자동 발급 성공
1. Promoted VM external IP to static IP
   - Ephemeral IP → Static IP (vm-static-ip)

2. Direct DNS connection
   - api.example.com → VM static IP (direct to VM)

3. Certificate issuance directly from VM
   - CA → api.example.com → VM IP
   - Reverse proxy handles HTTP-01 Challenge directly
   - Auto certificate issuance successful

왜 이게 작동하는가

Why This Works

SSL 인증서 검증 흐름:
1. DNS: api.example.com → VM 고정 IP (VM 직접)
2. 인증 기관 → VM IP:80 (중간 프록시 없음)
3. 리버스 프록시가 직접 응답
4. 인증서 발급 성공 ✅
SSL Certificate Verification Flow:
1. DNS: api.example.com → VM static IP (direct to VM)
2. CA → VM IP:80 (no intermediate proxy)
3. Reverse proxy responds directly
4. Certificate issuance successful ✅
"리버스 프록시의 SSL 자동 발급을 끄면 HTTP(S) LB로 해결되는 거 아니야?"

맞습니다. 그것도 하나의 방법입니다. 하지만 이번에는 그렇게 하지 않았습니다:

  • 기존 구성 유지: 이미 동작하는 리버스 프록시 + SSL 자동 발급 구성을 굳이 변경할 필요 없음
  • 단일 VM: LB의 장점(트래픽 분산, 고가용성)이 필요 없는 상황
  • 비용: GCP LB는 시간당 비용 발생, VM 직접 연결은 추가 비용 없음
  • 단순함: 네트워크 이전이 목적이었지, 아키텍처 재설계가 목적이 아니었음

만약 고가용성이 필요해지면? 그때는 리버스 프록시의 SSL 자동 발급을 끄고, GCP Managed SSL Certificate + HTTP(S) LB로 전환하면 됩니다.

"If you disable the reverse proxy's auto SSL, can't you just use HTTP(S) LB?"

Yes, that's a valid approach. But we chose not to for these reasons:

  • Keep existing setup: No need to change a working reverse proxy + auto SSL configuration
  • Single VM: LB benefits (traffic distribution, high availability) weren't needed
  • Cost: GCP LB has hourly costs, direct VM connection has no additional cost
  • Simplicity: The goal was network migration, not architecture redesign

What if high availability is needed later? Then disable the reverse proxy's auto SSL and switch to GCP Managed SSL Certificate + HTTP(S) LB.

8. 6단계: 내부 API 보안 강화 (3000 포트)

8. Step 6: Internal API Security Hardening (Port 3000)

성공 Success

요구사항

Requirements

  • production-vm의 3000 포트는 내부 서버에서만 접근 가능해야 함
  • 허용 대상: 내부 개발 서버들 (dev-server-1, dev-server-2)
  • Port 3000 on production-vm should only be accessible from internal servers
  • Allowed: Internal development servers (dev-server-1, dev-server-2)

문제 상황

Problem Situation

  • 초기에는 80, 443 포트를 전체 공개(0.0.0.0/0)로 설정
  • 3000 포트도 외부에서 접근 가능한 상태였음
  • 특정 서버만 허용하려 했으나 외부 IP가 없는 문제 발견
  • Initially, ports 80, 443 were publicly open (0.0.0.0/0)
  • Port 3000 was also accessible from outside
  • Tried to allow only specific servers but discovered no external IP issue

외부 통신 vs 내부 통신

External vs Internal Communication

외부 통신 (External IP 사용) - 문제 발생:

External Communication (Using External IP) - Problem:

dev-server-1 (내부 IP만 존재)
  → NAT Gateway (IP 변환)
  → 인터넷
  → production-vm (External IP)

문제점:
- 소스 IP가 NAT Gateway IP로 변경됨
- 특정 서버만 허용하는 방화벽 규칙 적용 불가
dev-server-1 (internal IP only)
  → NAT Gateway (IP translation)
  → Internet
  → production-vm (External IP)

Problems:
- Source IP changes to NAT Gateway IP
- Cannot apply firewall rules for specific servers

내부 통신 (Internal IP 사용) - 해결:

Internal Communication (Using Internal IP) - Solution:

dev-server-1 (10.x.x.2)
  → Private VPC 내부
  → production-vm (10.x.x.5)

장점:
- 소스 IP가 그대로 유지됨
- 방화벽 규칙으로 특정 IP만 허용 가능
- 외부 인터넷을 거치지 않아 더 안전하고 빠름
dev-server-1 (10.x.x.2)
  → Inside Private VPC
  → production-vm (10.x.x.5)

Advantages:
- Source IP preserved
- Firewall rules can allow specific IPs
- Safer and faster without going through external internet

해결 과정

Resolution Process

1. 서버 내부 IP 확인

1. Check Server Internal IPs

gcloud compute instances describe dev-server-1 \
  --format="value(networkInterfaces[0].networkIP)" \
  --zone=asia-northeast3-a
# 결과: 10.x.x.2

gcloud compute instances describe dev-server-2 \
  --format="value(networkInterfaces[0].networkIP)" \
  --zone=asia-northeast3-a
# 결과: 10.x.x.4
gcloud compute instances describe dev-server-1 \
  --format="value(networkInterfaces[0].networkIP)" \
  --zone=asia-northeast3-a
# Result: 10.x.x.2

gcloud compute instances describe dev-server-2 \
  --format="value(networkInterfaces[0].networkIP)" \
  --zone=asia-northeast3-a
# Result: 10.x.x.4

2. 3000 포트 전용 방화벽 규칙 생성

2. Create Firewall Rule for Port 3000

gcloud compute firewall-rules create allow-3000-from-dev \
  --direction=INGRESS \
  --priority=1000 \
  --network=private-vpc \
  --action=ALLOW \
  --rules=tcp:3000 \
  --source-ranges=10.x.x.2/32,10.x.x.4/32 \
  --target-tags=production

3. VM에 타겟 태그 추가

3. Add Target Tag to VM

gcloud compute instances add-tags production-vm \
  --tags=production \
  --zone=asia-northeast3-a

4. 기존 공개 방화벽 규칙 삭제

4. Delete Existing Public Firewall Rules

gcloud compute firewall-rules delete vpc-allow-http --quiet
gcloud compute firewall-rules delete vpc-allow-https --quiet
보안 개선 효과:
  • 최소 권한 원칙: 필요한 서버만 접근 가능
  • 내부 통신 강제: 외부 인터넷을 거치지 않음
  • IP 기반 제어: 소스 IP로 명확한 접근 제어
  • 공격 표면 축소: 80, 443 포트 공개 규칙 제거
Security Improvements:
  • Least Privilege Principle: Only necessary servers can access
  • Internal Communication Enforced: No external internet routing
  • IP-based Control: Clear access control via source IP
  • Reduced Attack Surface: Removed public rules for ports 80, 443

9. 각 LB가 실패한 이유 요약

9. Summary: Why Each LB Failed

Load Balancer 실패 이유
Internal LB 불필요: VPC 내부는 방화벽 규칙으로 이미 통신 가능
용도: 여러 VM 간 내부 트래픽 분산 (단일 VM에는 불필요)
External HTTP(S) LB SSL 이중 처리 불가: LB에서 SSL 종료 + VM 내부 SSL 처리 충돌
인증서 문제: GCP 인증서 필요하지만 VM에서 자동 발급 사용 중
복잡도: VM 내부에서 이미 리버스 프록시 역할 수행 중
External TCP LB SSL 인증서 자동 발급 실패:
- DNS가 LB IP를 가리킴
- 인증 기관이 VM에 직접 도달 못함
- 프록시 계층 추가로 검증 복잡도 증가
불필요한 복잡도: 단일 VM에 프록시 계층 추가는 오버엔지니어링
Load Balancer Failure Reason
Internal LB Unnecessary: VPC internal communication already allowed via firewall rules
Purpose: Internal traffic distribution among multiple VMs (not needed for single VM)
External HTTP(S) LB Dual SSL handling impossible: SSL termination at LB conflicts with VM's internal SSL
Certificate issue: GCP certificate required but VM uses auto-issuance
Complexity: VM already performs reverse proxy role internally
External TCP LB Auto SSL certificate issuance failed:
- DNS points to LB IP
- CA cannot reach VM directly
- Added proxy layer increases verification complexity
Unnecessary complexity: Adding proxy layer to single VM is over-engineering

10. 최종 아키텍처

10. Final Architecture

현재 구성

Current Configuration

인터넷
  ↓
api.example.com (DNS)
  ↓
VM 고정 외부 IP
  ↓
리버스 프록시 (80, 443 포트)
  ↓ (라우팅)
app-api (3000 포트)
Internet
  ↓
api.example.com (DNS)
  ↓
VM Static External IP
  ↓
Reverse Proxy (ports 80, 443)
  ↓ (routing)
app-api (port 3000)

방화벽 구성

Firewall Configuration

vpc-allow-ssh-iap: IAP 터널 → 22
vpc-allow-internal-all: 10.0.0.0/8 → 모든 포트
allow-3000-from-dev: 10.x.x.2/32, 10.x.x.4/32 → 3000 (특정 서버만)
allow-http-https: 0.0.0.0/0 → 80, 443 (외부 웹 트래픽)
allow-lb-health-check: LB 헬스체크 → 3000
vpc-allow-ssh-iap: IAP tunnel → 22
vpc-allow-internal-all: 10.0.0.0/8 → all ports
allow-3000-from-dev: 10.x.x.2/32, 10.x.x.4/32 → 3000 (specific servers only)
allow-http-https: 0.0.0.0/0 → 80, 443 (external web traffic)
allow-lb-health-check: LB health check → 3000

장점

Advantages

  • 단순함: 불필요한 프록시 계층 없음
  • 비용 절감: LB 비용 없음
  • SSL 인증서 자동 발급: 리버스 프록시가 직접 인증서 발급
  • 고정 IP: VM 재시작해도 IP 유지
  • Simplicity: No unnecessary proxy layers
  • Cost savings: No LB costs
  • Auto SSL certificate issuance: Reverse proxy handles certificate directly
  • Static IP: IP persists even after VM restart

단점

Disadvantages

  • 단일 장애점: VM 다운 시 서비스 중단
  • DDoS 보호 부족: Cloud Armor 사용 불가
  • 확장성 제한: 트래픽 증가 시 수평 확장 어려움
  • Single point of failure: Service interruption when VM goes down
  • Lack of DDoS protection: Cannot use Cloud Armor
  • Limited scalability: Difficult to scale horizontally with traffic increase

11. 교훈

11. Lessons Learned

핵심 교훈들:
  1. 요구사항 명확화: "LB가 필요하다"가 아니라 "왜 필요한가" 먼저 확인
  2. 기존 구성 이해: VM 내부에서 이미 리버스 프록시 + SSL 처리 중인지 확인
  3. 단순함 우선: 단일 VM에는 직접 연결이 가장 간단
  4. SSL 자동 발급 제약: ACME HTTP-01 Challenge는 VM에 직접 도달 필요
  5. GCP LB 특성:
    • HTTP(S) LB: SSL 종료 필수
    • TCP LB: Passthrough 가능하지만 인증서 자동 발급 검증 복잡
  6. 내부 통신 우선: 같은 VPC 내에서는 내부 IP 사용이 더 안전하고 효율적
  7. NAT 제약 이해: NAT Gateway를 거치면 소스 IP 추적 불가
  8. 최소 권한: 전체 공개(0.0.0.0/0)보다 필요한 IP만 허용
Key Lessons:
  1. Clarify requirements: Ask "why is it needed" instead of just "I need an LB"
  2. Understand existing setup: Check if VM already handles reverse proxy + SSL internally
  3. Simplicity first: Direct connection is simplest for a single VM
  4. Auto SSL constraints: ACME HTTP-01 Challenge needs direct access to VM
  5. GCP LB characteristics:
    • HTTP(S) LB: SSL termination required
    • TCP LB: Passthrough possible but complicates auto certificate validation
  6. Prefer internal communication: Using internal IPs within same VPC is safer and more efficient
  7. Understand NAT constraints: Source IP tracking impossible through NAT Gateway
  8. Least privilege: Allow only necessary IPs instead of full public access (0.0.0.0/0)
결론: 단일 VM + 리버스 프록시 환경에서는 VM 외부 IP 직접 사용이 최선입니다!
Conclusion: For a single VM + reverse proxy environment, direct VM external IP is the best approach!
마치며: 이 모든 과정을 Orbitron과 함께 진행했습니다. 제가 한 일은 "프로덕션 환경 만들어줘"라고 요청하고, Orbitron이 시도하는 과정을 지켜보며 방향을 조정한 것뿐입니다. Orbitron은 직접 GCP 명령어를 실행하고, 문제가 발생하면 원인을 분석하고, 다른 방법을 제안했습니다. 마지막에는 이 삽질 과정을 문서로 정리해주기까지 했죠. 인프라 전문가가 아니어도, AI와 협업하면 복잡한 클라우드 인프라도 구축할 수 있다는 걸 직접 경험했습니다.
Final Thoughts: I went through this entire process with Orbitron. All I did was ask "set up a production environment" and watch as Orbitron worked, adjusting direction along the way. Orbitron executed GCP commands directly, analyzed problems when they occurred, and proposed alternative approaches. It even documented this entire journey at the end. I experienced firsthand that even without being an infrastructure expert, you can build complex cloud infrastructure through AI collaboration.