[GCP] Shared VPC

1. Shared VPC

같은 Organization 하위의 프로젝트 간에 VPC를 공유함으로써 Private IP로 통신할 수 있게 하여 보다 안전하게 네트워크를 구성할 수 있다.

Host 프로젝트에 Service 프로젝트를 여러개 붙이고 해제할 수 있으며 전체 서브넷이나 특정 서브넷을 공유하도록 설정할 수 있다.

2. 설정

Shared VPC 페이지에서 설정 가능하다. 설정을 위해서는 Organization의 Compute Shared VPC Admin Role을 먼저 부여해야 한다. 연결할 Service 프로젝트에는 Compute Engine과 GKE를 쓸 경우 Kubernetes Engine API를 Enable 해야 설정이 진행될 수 있다.

3. Shared VPC 에서 GKE를 생성할 경우

먼저 Host 프로젝트의 VPC Network에서 클러스터를 생성할 서브넷 아래에 Secondary IPv4 대역을 추가한다. 이후 Service 프로젝트에서 GKE 생성 시에 해당 IP 대역을 pods, service 대역에 할당한다.

4. 주의사항

  • SharedVPC로 구성된 서비스 프로젝트에서 Ingress Controller가 GKE 서비스 어카운트로 호스트 프로젝트의 방화벽 정책을 업데이트 하지 못해 수동으로 생성하라고 Ingress Event에 표시된다. 이는 권한 문제로 서비스 프로젝트의 GKE 서비스 어카운트에 Computer Security Admin Role을 부여하거나 Kubernetes 로그에 찍히는 Firewall 커맨드를 직접 관리자가 실행해 수동으로 조치할 수 있다.

    • 관련 Log

      Normal  XPN     4m (x28 over 169m)    loadbalancer-controller  
      Firewall change required by security admin: 
    • 권한 부여 커맨드

      gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
      --member=serviceAccount:service-[SERVICE_PROJECT_NUMBER]@container-engine-robot.iam.gserviceaccount.com \
      --role=roles/compute.securityAdmin