1. 소개
Private Service Connect를 사용하면 서비스 제작자가 서비스 연결을 통해 VPC 환경에 서비스를 노출하고 다른 VPC 환경의 소비자가 Private Service Connect 엔드포인트를 통해 해당 서비스에 액세스하도록 허용할 수 있습니다. 이러한 생산자 서비스는 VM 클러스터로 설계되며 각 VM은 동일한 포트 번호에서 동일한 서비스를 노출합니다. 이전에는 이러한 서비스 설계를 위해 소비자 측에 여러 개의 Private Service Connect 엔드포인트를 배포하거나 올바른 제작자 VM이 타겟팅되도록 제작자 측에서 IP 전달을 사용해야 했습니다.
이제 Private Service Connect에서 포트 매핑을 사용하여 올바른 대상을 기본적으로 타겟팅할 수 있습니다. 이 실습에서는 이 기능이 필요한 사용 사례와 포트 매핑 NEG를 Private Service Connect 워크로드에 배포하는 방법을 알아봅니다.
학습할 내용
- Private Service Connect 포트 매핑 사용 사례
- PSC 포트 매핑의 주요 이점
- 네트워크 요구사항
- 포트 매핑을 사용하여 Private Service Connect 제작자 서비스를 만듭니다.
- Private Service Connect 엔드포인트 만들기
- Private Service Connect 엔드포인트를 통해 프로듀서 서비스 호출
필요한 항목
- 소유자 권한이 있는 Google Cloud 프로젝트
2. Private Service Connect 포트 매핑 사용 사례
포트 매핑 기능은 PSC 사용 사례에만 해당하는 포트 매핑 NEG (네트워크 엔드포인트 그룹)를 사용합니다.
포트 매핑을 사용하여 이점을 얻을 수 있는 가장 일반적인 유형의 프로듀서는 NoSQL 데이터베이스 프로듀서와 Kafka 프로듀서입니다. 그러나 특정 VM 매핑 요구사항이 있는 동일한 포트에서 동일한 서비스를 노출하는 VM 클러스터가 필요한 모든 제작자는 이 기능을 사용할 수 있습니다.
프로듀서는 클라이언트 포트와 프로듀서 VM + 대상 포트 간의 매핑을 정의합니다. 그런 다음 제작자는 이 정보를 소비자와 공유해야 합니다. 소비자는 사전 정의된 포트를 사용하여 도달해야 하는 프로듀서 VM + 대상 포트를 고유하게 식별합니다. 소비자가 사용하는 포트는 프로듀서가 사용하는 포트와 다릅니다.
PSC 포트 매핑의 주요 이점
- 간단: 프로듀서는 포트 매핑으로 PSC 구성요소를 배포하고 소비자는 PSC 엔드포인트를 배포합니다. PSC는 네트워크 주소 변환을 자동으로 처리합니다.
- 비용 효율적: 추가 PSC 리소스나 프로듀서 VM CPU 사이클이 필요하지 않습니다. 가격은 다른 유형의 PSC 배포와 동일합니다.
- 고성능: 포트 매핑은 다른 PSC 모드와 동일한 선 속도 처리량과 짧은 지연 시간을 제공합니다.
- 확장 가능하고 IP 효율적: 소비자 VPC의 하나의 IP 주소로 최대 1,000개의 프로듀서 VM과 1,000개의 포트 매핑에 액세스할 수 있습니다.
3. 네트워크 요구사항
- 포트 매핑을 사용하려면 내부 네트워크 패스 스루 부하 분산기를 프로듀서 부하 분산기로 사용해야 합니다.
- PSC 백엔드나 PSC 인터페이스가 아닌 PSC 엔드포인트만 포트 매핑과 함께 사용할 수 있습니다.
- 포트 매핑 NEG는 리전 구성입니다.
- 포트 매핑 NEG는 PSC 연결에서만 사용할 수 있습니다. 클라이언트 VM이 프로듀서 부하 분산기 전달 규칙을 직접 호출하는 경우에는 작동하지 않습니다. 이는 이 Codelab에서 제작자 서비스가 테스트되는 방식에 반영됩니다.
- PSC 엔드포인트와 프로듀서 서비스 스택은 서로 다른 VPC에 있어야 합니다.
4. Codelab 토폴로지
프로듀서 VPC에서는 각각 2개의 웹 서버를 실행하는 VM 2개가 생성됩니다. 하나는 포트 1000에서 실행되고 하나는 포트 2000에서 실행됩니다. Portmap NEG, 내부 네트워크 패스 스루 부하 분산기, 서비스 연결을 설정하기 전에 각 서비스를 테스트합니다.
소비자 VPC에서 PSC 엔드포인트를 설정하고 클라이언트 VM에서 프로듀서 서비스에 대한 연결을 테스트합니다.
5. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.
6. 시작하기 전에
API 사용 설정
Cloud Shell 내에서 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
필요한 모든 서비스 사용 설정
gcloud services enable compute.googleapis.com
7. 프로듀서 VPC 네트워크 만들기
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create producer-vpc --subnet-mode custom
서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create producer-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT
PSC 서브넷은 네트워크 주소 변환을 위해 PSC 서비스 연결과 연결됩니다. 프로덕션 사용 사례의 경우 이 서브넷의 크기를 연결된 모든 PSC 엔드포인트의 인바운드 트래픽 양을 지원하도록 적절하게 조정해야 합니다. 자세한 내용은 PSC NAT 서브넷 크기 조정 문서를 참고하세요.
네트워크 방화벽 정책 및 방화벽 규칙 만들기
Cloud Shell 사용
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy producer-vpc-policy --network producer-vpc --name network-producer-vpc --global-firewall-policy
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있도록 하려는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell 사용
gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy producer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
다음 방화벽 규칙은 PSC 서브넷에서 네트워크의 모든 인스턴스로의 TCP 포트 1000~2000 트래픽을 허용합니다. 프로덕션 환경에서는 이 방화벽 규칙을 특정 프로듀서 서비스와 연결된 인스턴스로만 제한해야 합니다.
Cloud Shell 사용
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
다음 방화벽 규칙은 TCP 포트 1000~2000의 서비스 서브넷 내 모든 트래픽을 허용합니다. 이 규칙은 제작자 서비스가 적절하게 작동하는지 테스트하는 데 사용됩니다.
Cloud Shell 사용
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
제작자 VM 만들기 및 구성
VM 만들기
Cloud Shell 사용
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
다음 섹션에서는 각 프로듀서 VM의 포트 1000 및 2000에서 HTTP 서버를 시작합니다.
VM 구성
Cloud Shell 사용
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
portmap-vm1 세션의 Cloud Shell에서
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
새 Cloud Shell 창 열기
먼저 변수를 재설정합니다. Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
portmap-vm2 세션의 Cloud Shell
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. 테스트 프로듀서 서비스
먼저 포트맵 인스턴스의 IP 주소를 가져와야 합니다. 이 두 IP 주소를 모두 기록해 둡니다.
새 Cloud Shell 창 열기
먼저 변수를 재설정합니다. Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
테스트 인스턴스에 로그인합니다. Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
예상 출력
portmap-vm1 1000
Cloud Shell
curl [portmap-vm1 IP]:2000
예상 출력
portmap-vm1 2000
Cloud Shell
curl [portmap-vm2 IP]:1000
예상 출력
portmap-vm2 1000
Cloud Shell
curl [portmap-vm2 IP]:2000
예상 출력
portmap-vm2 2000
test-client-vm 종료
9. Portmap NEG로 프로듀서 서비스 만들기
부하 분산기 구성요소 만들기
Cloud Shell 사용
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Portmap NEG에 엔드포인트를 추가하여 클라이언트 포트에서 프로듀서 포트로의 매핑을 만듭니다. 프로듀서는 이 매핑을 만들고 이 정보를 소비자에게 전달하는 자체 메서드를 갖습니다. 특정 포트 매핑은 PSC를 통해 공유되지 않습니다.
Cloud Shell
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
부하 분산기 빌드를 완료합니다.
Cloud Shell
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
서비스 연결 만들기
Cloud Shell 사용
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet
그런 다음 서비스 연결 URI를 검색하여 기록하고 소비자 환경에서 PSC 엔드포인트를 구성합니다.
Cloud Shell
gcloud compute service-attachments describe portmap-service-attachment --region=$region
예상 출력 예시
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr
10. 소비자 VPC 네트워크 만들기
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create consumer-vpc --subnet-mode custom
서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
네트워크 방화벽 정책 및 방화벽 규칙 만들기
Cloud Shell 사용
gcloud compute network-firewall-policies create consumer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
소비자 네트워크에는 IAP 액세스의 SSH만 필요합니다.
11. VM, PSC 엔드포인트 만들기 및 연결 테스트
이제 Cloud Shell 창이 3개 열려 있어야 합니다. 하나는 portmap-vm1과 열린 세션이 있어야 합니다. 하나는 portmap-vm2와 열린 세션이 있어야 하고 하나는 작동하는 세션이어야 합니다.
테스트 VM 만들기
Cloud Shell 사용
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
PSC 엔드포인트 만들기
Cloud Shell 사용
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
연결 테스트
Cloud Shell 사용
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
정상 출력
portmap-vm1 1000
Cloud Shell 사용
curl 10.0.0.10:1002
정상 출력
portmap-vm1 2000
Cloud Shell 사용
curl 10.0.0.10:1003
정상 출력
portmap-vm2 1000
Cloud Shell 사용
curl 10.0.0.10:1004
정상 출력
portmap-vm2 2000
12. 정리 단계
VM 인스턴스 종료 (모든 창)
exit
단일 Cloud Shell 터미널에서 실험실 구성요소 삭제
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy --name=network-consumer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q gcloud compute networks subnets delete consumer-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Private Service Connect 포트 매핑 사용 사례
- PSC 포트 매핑의 주요 이점
- 네트워크 요구사항
- 포트 매핑을 사용하여 Private Service Connect 제작자 서비스를 만듭니다.
- Private Service Connect 엔드포인트 만들기
- Private Service Connect 엔드포인트를 통해 프로듀서 서비스 호출