1. 소개
Private Service Connect를 사용하면 서비스 제작자가 서비스 소비자에게 비공개적으로 서비스를 제공할 수 있습니다. Private Service Connect의 이점은 다음과 같습니다.
- 서비스 프로듀서 VPC 네트워크는 두 명 이상의 서비스 소비자를 지원할 수 있습니다.
- 각 소비자는 자신이 정의한 내부 IP 주소에 연결합니다. Private Service Connect는 네트워크 주소 변환 (NAT)을 수행하여 요청을 서비스 제작자에게 라우팅합니다.

그림 2. Private Service Connect는 엔드포인트 및 서비스 연결을 사용하여 서비스 소비자가 해당 소비자의 VPC 네트워크에서 서비스 제작자의 VPC 네트워크에 있는 서비스로 트래픽을 보낼 수 있도록 합니다 (확대하려면 클릭).
학습할 내용
- Private Service Connect 이점
- 서비스 소비자의 주요 개념
- 서비스 제작자의 주요 개념
- 생산자 환경 만들기
- 서비스 연결을 통해 서비스 (프로듀서 환경) 노출
- 소비자 환경 만들기
- 소비자 네트워크에서 전달 규칙 만들기
- 소비자 액세스 권한 확인
- 정책 액세스 제어 사용 설정
- 이그레스 방화벽 규칙을 사용하여 소비자 전달 규칙에 대한 액세스 차단
필요한 항목
- GKE 클러스터 및 서비스 배포에 관한 지식
- 내부 부하 분산기에 대한 지식
- 두 프로젝트에서 VPC를 만들 수 있음
- GKE 클러스터를 만들 수 있음
2. Private Service Connect 이점
PSC를 사용하면 VPC 피어링을 사용하는 것과 비교해 다음과 같은 여러 이점이 있습니다.
비공개 IP 공간 제어 향상
- 서비스 소비자는 액세스하려는 관리형 서비스에 연결하는 데 사용되는 비공개 IP 주소를 제어할 수 있습니다.
- 서비스 소비자는 VPC에서 소비되는 백엔드 서비스의 비공개 IP 주소 범위를 예약하지 않아도 됩니다. 프로듀서 서비스에 연결하려면 자체 서브넷에서 IP 주소만 선택하면 됩니다.
- 서비스 프로듀서는 VPC에 여러 소비자 VPC를 제공하는 서비스가 포함된 멀티 테넌트 모델을 배포할 수 있습니다. 서브넷 범위가 중복되는 소비자는 더 이상 문제가 되지 않습니다.
- 서비스 제공업체는 더 많은 IP 주소를 위해 소비자에게 연락하지 않고도 필요한 만큼 서비스의 VM 인스턴스를 확장할 수 있습니다.
보안 및 격리 향상
- 서비스 소비자는 서비스 프로듀서와의 통신을 시작할 수 있습니다. 이 단방향 연결은 방화벽 구성을 크게 간소화할 뿐만 아니라 서비스 프로듀서에서 발생하는 악성 트래픽의 위험도 줄여줍니다.
- 서비스 프로듀서는 소비자 VPC의 서브넷 범위를 기반으로 방화벽 규칙을 변경할 필요가 없습니다. 서비스에 구성된 NAT IP 주소 범위에 대한 방화벽 규칙을 만들면 됩니다.
확장성 개선
- PSC는 수천 개의 소비자를 지원하여 확장성이 뛰어난 설계를 지원하며 서비스 프로듀서가 확장성이 뛰어난 멀티 테넌트 또는 단일 테넌트 서비스를 제공할 수 있도록 지원합니다.
- Private Service Connect를 사용하는 서비스 소비자는 VPC에서 필요한 리소스를 만들 수 있습니다. 이 규모는 프로듀서 VPC에 생성된 이러한 리소스의 수에 영향을 받지 않습니다.
3. 서비스 소비자의 주요 개념
Private Service Connect 엔드포인트를 사용하여 VPC 네트워크 외부에 있는 서비스를 사용할 수 있습니다. 서비스 소비자가 대상 서비스에 연결되는 Private Service Connect 엔드포인트를 만듭니다.
엔드포인트
Private Service Connect 엔드포인트를 사용하여 대상 서비스에 연결합니다. 엔드포인트는 VPC 네트워크에 내부 IP 주소를 가지며 전달 규칙 리소스를 기반으로 합니다.
트래픽을 엔드포인트로 전송하여 VPC 네트워크 외부의 대상으로 전달합니다.
대상
Private Service Connect 엔드포인트에는 연결하려는 서비스인 대상이 있습니다.
- API 번들:
- 모든 API: 대부분의 Google API
- VPC-SC: VPC 서비스 제어에서 지원하는 API
- 다른 VPC 네트워크의 게시된 서비스입니다. 이 서비스는 자체 조직 또는 서드 파티에서 관리될 수 있습니다.
게시된 서비스
엔드포인트를 서비스 프로듀서의 서비스에 연결하려면 서비스의 서비스 연결이 필요합니다. 서비스 연결 URI 형식: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
4. 서비스 제작자의 주요 개념
소비자에게 서비스를 제공하려면 소비자 IP 주소의 네트워크 주소 변환 (NAT)에 사용할 전용 서브넷을 하나 이상 만드세요. 그런 다음 해당 서브넷을 참조하는 서비스 연결을 만듭니다.
Private Service Connect 서브넷
서비스를 노출하기 위해 서비스 제작자는 먼저 Private Service Connect를 사용하여 하나 이상의 서브넷을 만듭니다.
소비자 VPC 네트워크에서 요청이 전송되면 소비자의 소스 IP 주소는 소스 NAT (SNAT)를 사용하여 Private Service Connect 서브넷 중 하나에서 선택된 IP 주소로 변환됩니다.
소비자 연결 IP 주소 정보를 보관하려면 소비자 연결 정보 보기를 참고하세요.
이러한 서브넷은 VM 인스턴스 또는 전달 규칙과 같은 리소스에 사용할 수 없습니다. 서브넷은 수신되는 소비자 연결의 SNAT에 IP 주소를 제공하기 위해서만 사용됩니다.
Private Service Connect 서브넷에는 63개의 소비자 VM마다 1개 이상의 IP 주소가 포함되어야 하므로 각 소비자 VM에는 네트워크 주소 변환을 위한 1,024개의 소스 튜플이 할당됩니다.
Private Service Connect 서브넷의 최소 크기는 /24입니다.
서비스 연결
서비스 프로듀서가 서비스 연결을 통해 서비스를 노출합니다.
- 서비스 프로듀서는 서비스를 노출하기 위해 서비스의 부하 분산기 전달 규칙을 참조하는 서비스 연결을 만듭니다.
- 서비스 소비자는 서비스에 액세스하기 위해 서비스 연결을 참조하는 엔드포인트를 만듭니다.
연결 환경설정
서비스를 만들 때 이를 사용 가능하게 만드는 방법을 선택합니다. 다음의 2가지 옵션이 있습니다.
- 모든 프로젝트의 연결 자동 수락 - 모든 서비스 소비자가 엔드포인트를 구성하고 서비스에 자동으로 연결할 수 있습니다.
- 선택한 프로젝트의 연결 수락 - 서비스 소비자는 서비스에 연결하도록 엔드포인트를 구성하고, 서비스 제작자는 연결 요청을 수락 또는 거부합니다.
요건 및 제한사항
- Private Service Connect 제한사항이 적용됩니다.
- GKE 버전 1.21.4-gke.300 이상에서 서비스 연결을 만들 수 있습니다.
- 여러 서비스 연결 구성에서는 동일한 서브넷을 사용할 수 없습니다.
- 내부 TCP/UDP 부하 분산기를 사용하는 GKE 서비스를 만들어야 합니다.
5. 테스트 환경
소비자 네트워크는 프로듀서의 서비스 연결 (게시된 서비스)에 매핑되는 대상 서비스 연결 외에도 서비스 프로듀서에 대한 요청을 시작하는 데 사용되는 고정 IP 주소로 구성됩니다.

이제 프로듀서 네트워크를 살펴보겠습니다. 프로듀서 네트워크에는 소비자 네트워크에 대한 매핑이 없습니다. 대신 프로듀서 네트워크에는 소비자가 서비스를 위해 사용하는 서비스 연결 (게시된 서비스)이 포함되어 있습니다. 프로듀서의 서비스 연결은 GKE 인그레스 L4 ILB (게시된 서비스)에 의해 노출되어 GKE 포드 및 연결된 애플리케이션과의 통신을 지원합니다.
NAT 서브넷은 소비자 VPC 네트워크에서 요청이 전송될 때 사용됩니다. 소비자의 소스 IP 주소는 소스 NAT (SNAT)를 사용하여 Private Service Connect 서브넷 중 하나에서 선택된 IP 주소로 변환됩니다.
이러한 서브넷은 VM 인스턴스 또는 전달 규칙과 같은 리소스에 사용할 수 없습니다. 서브넷은 수신되는 소비자 연결의 SNAT에 IP 주소를 제공하기 위해서만 사용됩니다.
GKE Private Service Connect용 L4ILB에 대해 자세히 알아보고 이 실습에서 참조하는 콘텐츠에 직접 액세스하려면 다음을 따르세요.
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.



- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로
PROJECT_ID로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다. - 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 '삭제' 안내를 따르세요. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.
6. 시작하기 전에
Codelab에는 두 개의 프로젝트가 필요하지만 PSC에는 필요하지 않습니다. 단일 또는 여러 프로젝트를 지원하는 참조를 확인하세요.
단일 프로젝트 - 프로듀서 및 컨슈머 네트워크를 지원하도록 프로젝트 업데이트
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME consumerproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
여러 프로젝트 - 프로듀서 네트워크를 지원하도록 프로젝트 업데이트
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
다음 색상 코드 규칙을 참고하세요.

7. 프로듀서 VPC 네트워크 만들기

VPC 네트워크
Cloud Shell 사용
gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom
GKE 클러스터 서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access
GKE 클러스터 만들기
Cloud Shell 사용
gcloud container clusters create gke-psc-l4 \
--release-channel=rapid \
--enable-ip-alias \
--zone=us-central1-a \
--network gke-producer-l4-vpc \
--num-nodes 1 \
--subnetwork node-subnet1 \
--cluster-secondary-range-name pod \
--services-secondary-range-name service
Private Service Connect (NAT 서브넷)의 서브넷 만들기
Private Service Connect에 사용할 전용 서브넷을 하나 이상 만들어야 합니다. Google Cloud 콘솔을 사용하여 서비스를 게시하는 경우 해당 절차 중에 서브넷을 만들 수 있습니다.
Private Service Connect 서브넷에 대한 자세한 내용은 Private Service Connect 서브넷을 참고하세요.
Cloud Shell 사용
gcloud beta compute networks subnets create gke-nat-subnet \
--project $prodproject \
--network gke-producer-l4-vpc \
--region us-central1 \
--range 100.100.10.0/24 \
--purpose PRIVATE_SERVICE_CONNECT
8. 워크로드 및 서비스 배포
다음 매니페스트는 샘플 웹 애플리케이션 컨테이너 이미지를 실행하는 배포를 설명합니다. Cloud Shell에서 매니페스트를 my-deployment.yaml로 저장합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: psc-ilb
spec:
replicas: 3
selector:
matchLabels:
app: psc-ilb
template:
metadata:
labels:
app: psc-ilb
spec:
containers:
- name: whereami
image: gcr.io/google-samples/whereami:v1.2.1
ports:
- name: http
containerPort: 8080
readinessProbe:
httpGet:
path: /healthz
port: 8080
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 1
클라우드 셸에서 클러스터에 매니페스트 적용
kubectl apply -f my-deployment.yaml
서비스 만들기
다음 매니페스트는 TCP 포트 8080에 내부 TCP/UDP 부하 분산기를 만드는 서비스를 설명합니다. Cloud Shell에서 매니페스트를 my-service.yaml로 저장합니다.
apiVersion: v1
kind: Service
metadata:
name: gke-l4-psc
annotations:
networking.gke.io/load-balancer-type: "Internal"
spec:
type: LoadBalancer
selector:
app: psc-ilb
ports:
- port: 80
targetPort: 8080
protocol: TCP
클라우드 셸에서 클러스터에 매니페스트 적용
kubectl apply -f my-service.yaml
Create ServiceAttachment
다음 매니페스트는 만든 서비스를 서비스 소비자에게 노출하는 ServiceAttachment를 설명합니다. Cloud Shell에서 매니페스트를 my-psc.yaml로 저장합니다.
apiVersion: networking.gke.io/v1beta1 kind: ServiceAttachment metadata: name: emoji-sa namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - gke-nat-subnet proxyProtocol: false resourceRef: kind: Service name: gke-l4-psc
클라우드 셸에서 클러스터에 매니페스트 적용
kubectl apply -f my-psc.yaml
ServiceAttachment에는 다음 필드가 있습니다.
- connectionPreference: 고객의 서비스 연결 방법을 결정하는 연결 환경설정입니다. ACCEPT_AUTOMATIC을 사용하여 자동 프로젝트 승인을 사용하거나 ACCEPT_MANUAL을 사용하여 명시적인 프로젝트 승인을 사용할 수 있습니다. 자세한 내용은 Private Service Connect를 사용하여 서비스 게시를 참고하세요.
- natSubnets: 서비스 연결에 사용할 서브네트워크 리소스 이름의 목록입니다.
- proxyProtocol: true로 설정된 경우 소비자 소스 IP 및 Private Service Connect 연결 ID를 요청에서 사용할 수 있습니다. 이 필드는 선택사항이며 제공되지 않은 경우 false가 기본값입니다.
- consumerAllowList: ServiceAttachment에 연결할 수 있는 소비자 프로젝트의 목록입니다. 이 필드는 connectionPreference가 ACCEPT_MANUAL인 경우에만 사용할 수 있습니다. 이 필드 및 기타 옵션에 대한 자세한 내용은 Private Service Connect를 사용하여 서비스 게시를 참고하세요.
프로듀서 유효성 검사
서비스 연결 세부정보 보기
Cloud Shell에서 다음 명령어를 사용하여 ServiceAttachment의 세부정보를 확인할 수 있습니다.
kubectl describe serviceattachment emoji-sa
GKE L4 ILB 보기
클라우드 콘솔에서 네트워크 서비스 → 부하 분산 → 프런트엔드로 이동합니다.
이전에 정의된 노드 서브넷 192.168.10.0/24에 맞는 프런트엔드 IP 주소를 확인합니다. 아래 스크린샷을 참고하세요. IP 주소는 다를 수 있습니다.

게시된 서비스 보기
클라우드 콘솔에서 네트워크 서비스 → Private Service Connect → 게시된 서비스로 이동합니다.
실습에서 사용된 네트워크(gke-producer-l4-vpc,)가 있는 서비스를 식별합니다. 아래 스크린샷을 참고하세요. 서비스 및 타겟 값은 다를 수 있습니다.

아래 화면으로 이동하는 서비스 이름을 클릭하고 기본 정보에 채워진 서비스 연결 세부정보를 확인합니다. 또한 소비자가 아직 서비스에 등록하지 않았으므로 '연결된 프로젝트'가 비어 있습니다. 연결 환경설정이 'ACCEPT_AUTOMATICALLY'로 설정되어 있으므로 수락 및 거부는 회색으로 표시됩니다. 서비스 연결 yaml (my-psc.yaml)을 수정하여 언제든지 이 옵션을 'ACCEPT_MANUAL'로 변경할 수 있습니다.


9. 소비자 VPC 네트워크 만들기

다음 섹션에서는 소비자 VPC가 별도의 프로젝트에 구성됩니다. 소비자 네트워크와 프로듀서 네트워크 간의 통신은 소비자 네트워크에 정의된 서비스 연결을 통해 이루어집니다.
Codelab에는 두 개의 프로젝트가 필요하지만 PSC에는 필요하지 않습니다. 단일 또는 여러 프로젝트를 지원하는 참조를 확인하세요.
단일 프로젝트 - 프로듀서 및 컨슈머 네트워크를 지원하도록 프로젝트 업데이트
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME prodproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
여러 프로젝트 - 네트워크를 사용하는 소비자를 지원하도록 프로젝트 업데이트
Cloud Shell 내에 프로젝트 ID가 설정되어 있는지 확인합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME echo $consumerproject
VPC 네트워크
Cloud Shell 사용
gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom
PSC용 서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create consumer-subnet --project=$consumerproject --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1
VM 인스턴스용 서브넷 만들기
Cloud Shell 사용
gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1
게시된 서비스에 액세스하기 위한 고정 IP 주소 만들기
Cloud Shell 사용
gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100
방화벽 규칙 만들기
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서의 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달을 위해 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell 사용
gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
PSC에 필요하지는 않지만 소비자 PSC 트래픽을 생산자 서비스 연결로 모니터링하기 위해 이그레스 방화벽 규칙을 만듭니다.
gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging
10. 소비자 테스트 인스턴스 1 만들기
Cloud Shell 사용
gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud
11. 소비자 테스트 인스턴스 2 만들기
Cloud Shell 사용
gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud
12. 서비스 연결 만들기
이전 단계에서 프로듀서 서비스 연결 문자열을 안전한 곳에 복사했으므로 저장된 값을 'target-service-attachment' 필드에 삽입해 보겠습니다.

Cloud Shell 사용
gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment
13. 유효성 검사 - 소비자
CURL 및 방화벽 로그를 사용하여 소비자 및 프로듀서 통신을 검증합니다.
소비자 프로젝트 내에서 고정 IP 주소는 프로듀서와의 통신을 시작하는 데 사용됩니다. 소비자 전달 규칙에 대한 고정 IP 주소의 이 매핑은 다음 구문을 실행하여 검증됩니다.

소비자 VPC의 Cloud 사용 셸에서 전달 규칙과 고정 IP를 식별합니다.
gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1
아래 출력에서 나중에 프로듀서에 연결하기 위해 10.0.60.100을 사용합니다.
IPAddress: 10.0.60.100 creationTimestamp: '2021-09-30T21:13:54.124-07:00' id: '3564572805904938477' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer networkTier: PREMIUM pscConnectionId: '36583161500548196' pscConnectionStatus: ACCEPTED
연결된 서비스 보기
클라우드 콘솔에서 네트워크 서비스 → Private Service Connect → 연결된 엔드포인트로 이동하여 새로 생성된 엔드포인트를 확인합니다.

consumer-instance-1에 로그인하여 프로듀서 게시 서비스에 대한 액세스를 테스트합니다.
Cloud Shell에서 +를 클릭하여 새 탭을 엽니다.

Cloud Shell에서 다음을 실행합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"
consumer-instance-1 인스턴스에 로그인한 후 전달 규칙 IP 주소 10.0.60.100에 대해 curl을 실행합니다.
Cloud Shell에서 다음을 실행합니다.
user@consumer-instance-1:~$ curl 10.0.60.100
출력 예
user@consumer-instance-1:~$ curl 10.0.60.100
{
"cluster_name": "gke-psc-l4",
"host_header": "10.0.60.100",
"node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
"pod_name": "psc-ilb-588887dfdb-w7tbr",
"pod_name_emoji": "🤷",
"project_id": "prodorijectid",
"timestamp": "2021-10-01T17:43:37",
"zone": "us-central1-a"
consumer-instance-2에 로그인하여 프로듀서 게시 서비스에 대한 액세스를 테스트합니다.
Cloud Shell에서 +를 클릭하여 새 탭을 엽니다.

Cloud Shell에서 다음을 실행합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"
Cloud Shell에서 다음을 실행합니다.
user@consumer-instance-2:~$ curl 10.0.60.100
출력 예
deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
"cluster_name": "gke-psc-l4",
"host_header": "10.0.60.100",
"node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
"pod_name": "psc-ilb-588887dfdb-4jdql",
"pod_name_emoji": "🧑🏿",
"project_id": "prodproject",
"timestamp": "2021-10-01T17:49:51",
"zone": "us-central1-a"
14. 방화벽 로깅 - 할당된 유효성 검사
로그 탐색기를 사용하여 방화벽 규칙 'vpc-consumer-psc'가 VM 인스턴스와 고정 IP 간의 흐름을 캡처하는지 확인합니다.
- Cloud 콘솔에서 작업 로깅 → 로그 탐색기를 식별합니다.
- 쿼리 필드에서 아래 항목을 yourconsumerproject로 업데이트하고 '쿼리 실행'을 선택합니다.
logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- 쿼리 결과는 제공된 스크린샷에 따라 다음을 제공합니다.

- 로그 (jsonPayload → Connection)를 펼치고 아래에 제공된 출력을 확인합니다. dest_ip: 10.0.60.100은 Producer 서비스에 액세스하는 데 사용되는 고정 TCP IP이고 src_ip: 10.0.70.10 또는 10.0.70.20은 VM 인스턴스 IP 주소입니다. 처리가 허용됩니다.

15. 유효성 검사 - 프로듀서

생산자 프로젝트에서 서비스 연결이 성공적으로 연결되었는지 확인합니다. 네트워크 서비스 → Private Service Connect → 게시된 서비스로 이동합니다.

서비스를 클릭하면 아래와 같이 연결된 소비자 프로젝트와 상태가 표시됩니다.

16. 게시된 서비스에 대한 액세스 제한

지금까지 두 인스턴스 모두 게시된 서비스에 액세스할 수 있음을 확인했습니다. 이제 게시된 서비스에 대한 consumer-instance-2 액세스를 거부하는 이그레스 방화벽 규칙을 만들어 보겠습니다.
기본적으로 GCP는 모든 이그레스를 허용하지만 모든 인그레스 트래픽은 거부합니다. 다음 단계에서는 게시된 서비스에 대한 액세스를 거부하기 위해 consumer-instance-2를 만들 때 사용되는 이전에 정의된 네트워킹 태그 'google2'를 기반으로 방화벽 규칙을 만듭니다.

+를 클릭하여 새 Cloud Shell 탭을 열고 Cloud Shell에서 다음 방화벽 규칙을 실행합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging
이제 consumer-instance-2가 게시된 서비스에 액세스할 수 있는지 테스트해 보겠습니다. 세션 시간이 초과된 경우 새 Cloud Shell을 열고 아래에 설명된 대로 VM에 로그인해야 합니다.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] projectname=YOUR-PROJECT-NAME echo $projectname gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"
Cloud Shell에서 다음을 실행합니다.
user@consumer-instance-2:~$ curl 10.0.60.100
출력 예
user@consumer-instance-2:~$ curl 10.0.60.100 curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out
방화벽 로깅 - 거부된 유효성 검사
로그 탐색기를 사용하여 방화벽 규칙 'psc-endpoint-deny-egress'가 VM 인스턴스와 고정 IP 간의 흐름을 캡처하는지 확인합니다.
- Cloud 콘솔에서 작업 로깅 → 로그 탐색기를 식별합니다.
- '쿼리' 필드에서 아래 항목을 consumerproject로 업데이트하고 '쿼리 실행'을 선택합니다.
logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")
- 쿼리 결과는 제공된 스크린샷에 따라 다음을 제공합니다.

- 로그를 펼치고 아래에 제공된 출력을 확인합니다. dest_ip: 10.0.60.100은 고정 TCP IP이고 src_ip: 10.0.70.10 또는 10.0.70.20은 VM 인스턴스 IP 주소입니다. 처리가 거부되었습니다.

17. 정리 단계
생산자 네트워크 정리 단계

생산자 프로젝트 터미널의 단일 Cloud Shell에서 실습 구성요소를 삭제합니다.
gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet gcloud compute networks delete gke-producer-l4-vpc --quiet

소비자 네트워크 정리 단계
소비자 프로젝트 터미널의 단일 Cloud Shell에서 실습 구성요소를 삭제합니다.
gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet gcloud compute firewall-rules delete psclab-iap-consumer --quiet gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet gcloud compute firewall-rules delete vpc-consumer-psc --quiet gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet gcloud compute networks delete vpc-demo-consumer --quiet
18. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- Private Service Connect 이점
- 서비스 소비자의 주요 개념
- 서비스 제작자의 주요 개념
- 생산자 환경 만들기
- 서비스 연결을 통해 서비스 (프로듀서 환경) 노출
- 소비자 환경 만들기
- 소비자 네트워크에서 전달 규칙 만들기
- 소비자 액세스 권한 확인
- 정책 액세스 제어 사용 설정
- 이그레스 방화벽 규칙을 사용하여 소비자 전달 규칙에 대한 액세스를 차단했습니다.