< Lab >
Lab into : Use Terraform to Create a Network Peering transcript
실습: Terraform을 사용하여 네트워크 피어링 스크립트 생성
- Terraform을 통해 내부 주소를 통해서만 통신을 허용하는 두 개의 네트워크를 피어링
Use Terraform to Create a Network Peering transcript
Terraform을 사용하여 네트워크 피어링 스크립트 생성
- 두 네트워크 피어링
- Project info에서 프로젝트 ID를 찾아서 복사
+) Project ID : qwiklabs-gcp-00-5977c1538818 - 클라우드 쉘을 활성화한 후 실습의 완료 버전이 포함된 깃허브 리포지토리 복제 후 폴더 이동
git clone https://github.com/GoogleCloudPlatform/training-data-analyst cd ~/training-data-analyst/courses/db-migration/terraform-create-peering/
- 2개의 네트워크와 2개의 테스트 서버를 생성하기 위한 Terraform 파일 확인
ls
- Open Editor를 클릭 후 terraform.tfvars 파일에서 project_id 변수를 프로젝트 ID와 일치하도록 변경
# GCP Settings project_id = "qwiklabs-gcp-00-5977c1538818" gcp_region_1 = "us-central1" gcp_zone_1 = "us-central1-a" # GCP Network Variables subnet_cidr_public = "10.1.1.0/24" subnet_cidr_private = "10.2.2.0/24"
- Terraform을 초기화하고 리소스를 생성
terraform init terraform plan terraform apply -auto-approve
- 콘솔에서 Compute Enigne을 클릭해 공용 네트워크와 개인 네트워크를 가진 두 개의 머신을 확인
개인 네트워크를 가진 머신의 내부 IP 주소를 복사한 후 public-test-server- 로 시작하는 이름을 가진 IP 주소에 SSH로 연결 - 개인 컴퓨터에서 Ping을 실행할 경우 작동하지 않는 것을 확인
ping 10.2.2.2
- 콘솔에서 VPC 네트워크 - VPC 네트워크 피어링을 클릭하면 아직은 피어링된 네트워크가 없는 것을 확인
- 클라우드 쉘에서 vpc-peering.tf라는 파일 생성
cd ~/training-data-analyst/courses/db-migration/terraform-create-peering/ touch vpc-peering.tf
- Open Editor를 클릭하고 방금 생성한 파일에 작성
피어링 요청은 두 네트워크 모두에서 이루어져야 하므로 두 개의 네트워크 피어링이 있는 이유
하나는 공용 네트워크에서 사설 네트워크로, 다른 하나는 반대 방향
resource "google_compute_network_peering" "public-private" { name = "peering1" network = google_compute_network.public-vpc.self_link peer_network = google_compute_network.private-vpc.self_link } resource "google_compute_network_peering" "private-public" { name = "peering2" network = google_compute_network.private-vpc.self_link peer_network = google_compute_network.public-vpc.self_link }
- 피어링 생성
terraform apply -auto-approve
- 콘솔로 돌아가 VPC 네트워크 피어링 페이지를 새로고침하여 피어링이 생성되고 활성화된 것을 확인
- 공개 테스트 서버의 SSH 창으로 다시 전환하면 Ping 명령이 작동하기 시작
- Ctrl + c를 눌러 명령을 중지한 다음 exit를 입력해 SSH 세션을 닫음
- 외부 IP가 없는 VM 배포
- 네트워크가 피어링되면 사설 네트워크의 시스템에는 공용 IP 주소가 필요하지 않으므로
private-test-server-linux.tf 파일을 열어 19행을 주석 처리한 후
더 이상 외부 IP 주소가 없기 때문에 해당 값을 출력할 수 없으므로 VM의 외부 IP 주소를 출력하는 코드를 찾아 NONE으로 변경
# Create Test Server in Private VPC resource "google_compute_instance" "private-test-server-linux" { name = "private-test-server-linux-${random_id.instance_id.hex}" machine_type = "f1-micro" zone = var.gcp_zone_1 tags = ["allow-ssh"] boot_disk { initialize_params { image = "debian-cloud/debian-9" } } metadata_startup_script = "sudo apt-get update;" network_interface { network = google_compute_network.private-vpc.name subnetwork = google_compute_subnetwork.private-subnet_1.name # access_config { } 주석 처리 } } output "private-test-server-linux" { value = google_compute_instance.private-test-server-linux.name } output "private-test-server-linux-external-ip" { value = "NONE" } output "private-test-server-linux-internal-ip" { value = google_compute_instance.private-test-server-linux.network_interface.0.network_ip }
- Cloud Shell 터미널로 돌아가 변경 사항을 적용
terraform apply -auto-approve
- 콘솔의 Compute Engine으로 이동해 개인 VM에 외부 IP 주소가 없는 것을 확인하고
공용 VM에 SSH로 연결하고 내부 IP 주소를 통해 개인 서버를 계속 ping할 수 있는지 확인
두 개의 네트워크를 피어링하면 내부 IP 주소를 사용하여 해당 네트워크의 시스템 간에 통신할 수 있으므로
데이터베이스는 외부 IP 주소 없이 개인 네트워크에 배포할 수 있으며 해당 데이터베이스는 피어링된 네트워크에서만 연결 가능
이를 통해 데이터베이스를 보호
그러므로 여전히 ping 작동 - Cloud Shell 터미널로 돌아가 모든 항목을 삭제
terraform destroy -auto-approve