Private Service Connect를 사용한 서비스 게시 및 사용

1. 소개

Private Service Connect를 사용하면 서비스 프로듀서가 서비스 소비자에게 비공개로 서비스를 제공할 수 있습니다. Private Service Connect는 다음과 같은 이점을 제공합니다.

  • 서비스 프로듀서 VPC 네트워크는 둘 이상의 서비스 소비자를 지원할 수 있습니다.
  • 각 소비자는 자신이 정의한 내부 IP 주소에 연결합니다. Private Service Connect는 네트워크 주소 변환 (NAT)을 수행하여 요청을 서비스 프로듀서로 라우팅합니다.

45b90d50690dd111.png

그림 2. Private Service Connect는 엔드포인트 및 서비스 연결을 사용하여 서비스 소비자가 소비자의 VPC 네트워크에서 서비스 프로듀서의 VPC 네트워크에 있는 서비스로 트래픽을 전송할 수 있도록 합니다 (확대하려면 클릭).

학습할 내용

  • Private Service Connect 혜택
  • 서비스 소비자의 주요 개념
  • 서비스 제작자의 주요 개념
  • 제작자 환경 만들기
  • 서비스 연결을 통해 서비스 (생산자 환경) 노출
  • 소비자 환경 만들기
  • 소비자 네트워크에서 전달 규칙 만들기
  • TCP 소비자 액세스 확인
  • 사용 설정 및 프록시 프로토콜 확인
  • 정책 액세스 제어 사용 설정

필요한 항목

  • 내부 부하 분산기 지식
  • 두 개의 프로젝트에서 VPC를 만드는 기능

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 네트워크에서 요청이 전송되면 소스 NAT (SNAT)를 사용하여 소비자의 소스 IP 주소가 Private Service Connect 서브넷 중 하나에서 선택한 IP 주소로 변환됩니다.

소비자 연결 IP 주소 정보를 유지하려면 소비자 연결 정보 보기를 참조하세요.

이러한 서브넷은 VM 인스턴스 또는 전달 규칙과 같은 리소스에 사용할 수 없습니다. 서브넷은 들어오는 소비자 연결의 SNAT에 대한 IP 주소를 제공하는 데만 사용됩니다.

각 소비자 VM에 네트워크 주소 변환을 위한 1,024개의 소스 튜플이 할당되도록 Private Service Connect 서브넷은 소비자 VM 63개마다 IP 주소를 하나 이상 포함해야 합니다.

Private Service Connect 서브넷의 최소 크기는 /24입니다.

서비스 연결

서비스 프로듀서가 서비스 연결을 통해 서비스를 노출합니다.

  • 서비스를 노출하기 위해 서비스 제작자는 서비스의 부하 분산기 전달 규칙을 참조하는 서비스 연결을 만듭니다.
  • 서비스 소비자는 서비스에 액세스하기 위해 해당 서비스 연결을 참조하는 엔드포인트를 만듭니다.

연결 환경설정

서비스를 만들 때 이를 사용 가능하게 만드는 방법을 선택합니다. 다음의 2가지 옵션이 있습니다.

  • 모든 프로젝트의 연결을 자동으로 수락합니다. 모든 서비스 소비자가 엔드포인트를 구성하고 서비스에 자동으로 연결할 수 있습니다.
  • 선택한 프로젝트의 연결 수락 - 서비스 소비자가 서비스에 연결하도록 엔드포인트를 구성하며 서비스 제작자는 연결 요청을 수락하거나 거부합니다.

5. 테스트 환경

소비자 네트워크는 서비스 제작자에 대한 요청을 시작하는 데 사용되는 TCP 고정 IP 주소와 제작자의 서비스 연결 (게시된 서비스)에 매핑되는 대상-서비스 연결로 구성됩니다.

이제 생산자 네트워크를 살펴보겠습니다. 생산자 네트워크에 소비자 네트워크에 대한 매핑이 없는 대신 제작자 네트워크에는 소비자가 서비스에 사용하는 서비스 연결 (게시된 서비스)이 포함되어 있습니다. 실습에서 프로듀서의 서비스 연결은 TCP 애플리케이션을 지원하는 백엔드 서비스에 매핑된 레이어 4 내부 부하 분산기 (Producer-forwarding-rule)입니다.

NAT 서브넷 및 연결된 방화벽 규칙은 프로듀서 애플리케이션과의 통신을 허용합니다.

28b09284a99eb60b.png

자습형 환경 설정

  1. Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 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 vpc-demo-producer --project=$prodproject --subnet-mode=custom

서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2

Cloud NAT 인스턴스 만들기

Cloud NAT는 PSC에 사용되는 NAT와 다릅니다. Cloud NAT는 애플리케이션 패키지를 다운로드하기 위한 인터넷 액세스에 명시적으로 사용됩니다.

Cloud Router 만들기

Cloud Shell 사용

gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2

Cloud NAT 만들기

Cloud Shell 사용

gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

8. 컴퓨팅 인스턴스 만들기

Cloud Shell에서 인스턴스 www-01 만들기

gcloud compute instances create www-01 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

Cloud Shell에서 인스턴스 만들기 www-02

gcloud compute instances create www-02 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

9. 비관리형 인스턴스 그룹 만들기

www-01 및 www-02

Cloud Shell 사용

gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a

gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02

gcloud compute health-checks create http hc-http-80 --port=80

10. TCP 백엔드 서비스, 전달 규칙 및 방화벽

Cloud Shell에서 백엔드 서비스 만들기

gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80

gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a

Cloud Shell에서 전달 규칙 만들기

gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2

Cloud Shell에서 백엔드 상태 점검을 사용 설정하는 방화벽 규칙 만들기

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging

IAP에서 VM 인스턴스에 연결할 수 있도록 허용하려면 다음과 같은 방화벽 규칙을 만듭니다.

  • IAP를 사용하여 액세스할 수 있도록 하려는 모든 VM 인스턴스에 적용됩니다.
  • IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.

Cloud Shell 사용

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

11. TCP NAT 서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect

12. TCP 서비스 연결 및 방화벽 규칙 만들기

Cloud Shell에서 TCP 서비스 연결 만들기

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp

TCP 서비스 연결 유효성 검사

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2

Cloud Shell에서 ILB 백엔드에 대한 TCP NAT 서브넷 액세스를 허용하는 방화벽 규칙 만들기

gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging

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

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

다음 섹션에서 소비자 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

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-west2

TCP 애플리케이션의 고정 IP 주소 만들기

Cloud Shell 사용

gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --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

Cloud NAT 인스턴스 만들기

Cloud NAT는 PSC에 사용되는 NAT와 다릅니다. 애플리케이션 패키지를 다운로드하기 위해 인터넷 액세스에 명시적으로 사용되는 Cloud NAT

Cloud Router 만들기

Cloud Shell 사용

gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2

Cloud NAT 만들기

Cloud Shell 사용

gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

14. 테스트 인스턴스 VM 만들기

Cloud Shell 사용

gcloud compute instances create test-instance-1 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=consumer-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install iperf3 -y
apt-get install tcpdump -y'

15. TCP 서비스 연결 만들기

Cloud Shell 사용

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

16. 유효성 검사

CURL, TCPDUMP 및 방화벽 로그를 사용하여 소비자와 생산자 간의 통신을 검증합니다.

소비자의 프로젝트 내에서 고정 IP 주소가 생산자와 통신을 시작하는 데 사용됩니다. 소비자 전달 규칙에 고정 IP 주소 매핑은 다음 구문을 통해 검증됩니다.

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

소비자 VPC Cloud Shell에서 TCP 전달 규칙 및 고정 IP를 식별합니다.

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2

출력:

IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T13:34:23.359-07:00'
id: '2768158450402915488'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
<snip>

17. TCP 유효성 검사

참고: 다음 섹션에서 프로듀서 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

Producer Project에서 'www-01'을 식별합니다. &amp; 'www-02' 인스턴스당 하나의 SSH 세션을 실행할 수 있습니다

6d0bb8c5cb115876.png

출처: 'www-01' TCPDUMP를 실행하여 NAT 모니터링

sudo tcpdump -i any net 192.168.0.0/16 -n

출처: 'www-02' TCPDUMP를 실행하여 NAT 모니터링

sudo tcpdump -i any net 192.168.0.0/16 -n

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

소비자 프로젝트에서 'test-instance-1'을 식별합니다. 두 개의 세션을 실행할 수 있습니다

'test-instance-1'에서 상속됨 세션 1은 TCPDUMP를 실행하여 소비자 모니터링

sudo tcpdump -i any host 10.0.60.100 -n

'test-instance-1'에서 상속됨 세션 2가 TCP 유효성 검사 수행

curl -v 10.0.60.100 

18. 관찰 - 소비자

'test-instance-1'에서 상속됨 세션 2 CURL이 성공하고 200 OK를 반환합니다.

@test-instance-1:~$ curl -v 10.0.60.100 
* Rebuilt URL to: 10.0.60.100/
*   Trying 10.0.60.100...
* TCP_NODELAY set
* Connected to 10.0.60.100 (10.0.60.100) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.60.100
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 14 Jul 2021 21:20:22 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT
< ETag: "1d-5c71aed5edabd"
< Accept-Ranges: bytes
< Content-Length: 29
< Content-Type: text/html
< 
Page on www-01 in us-west2-a
* Curl_http_done: called premature == 0
* Connection #0 to host 10.0.60.100 left intact

'test-instance-1'에서 상속됨 세션 1 TCPDUMP가 VM 인스턴스를 식별 → TCP 고정 IP 통신 및 응답

21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

방화벽 로깅

로그 탐색기를 사용하여 방화벽 규칙 'vpc-consumner-psc' 확인 VM 인스턴스와 고정 IP 간의 흐름을 캡처하고 있습니다.

  1. Cloud 콘솔에서 작업 로깅 식별 → 로그 탐색기
  2. 쿼리 필드에서 아래 항목을 소비자 프로젝트로 업데이트하고 '쿼리 실행'을 선택합니다.

logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. 쿼리 결과는 제공된 스크린샷당 다음을 제공합니다.

b573c878a8d6d01f.png

  1. 로그를 확장하고 아래에 제공된 출력을 확인합니다. dest_ip를 확인하세요. 10.0.60.100은 STATIC TCP IP이고 src_ip: 10.0.60.2는 VM 인스턴스 IP 주소입니다.

1b4f46b3e61f6f12.png

19. 관찰 - 제작자

백엔드 인스턴스 'www-01'에서 또는 'www-02' TCP NAT 서브넷과 TCP ILB 간에 다음과 같은 통신이 관찰됩니다.

21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

20. 방화벽 로깅

로그 탐색기를 사용하여 'vpc-demo-allowpsc-tcp' 방화벽 규칙 검증 TCP NAT를 캡처하고 다음 단계를 수행하여 TCP ILB 흐름을 완료합니다.

  1. Cloud 콘솔에서 작업 로깅 식별 → 로그 탐색기
  2. 쿼리 필드에서 아래 항목을 yourprodproject로 업데이트하고 '쿼리 실행'을 선택하세요.

logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-Produce/firewall:vpc-demo-allowpsc-tcp")

  1. 쿼리 결과는 제공된 스크린샷당 다음을 제공합니다.

8ce6b0d17d76ad6d.png

  1. 로그를 확장하고 아래에 제공된 출력을 확인합니다. TCP ILB dest_ip: 10.0.2.10과 NAT TCP source_range (192.168.0.0/24)를 메모하고 각 src_ip: 192.168.0.2입니다.

e157a7af8cb667e.png

21. 프록시 프로토콜 사용

기본적으로 Private Service Connect는 소비자의 소스 IP 주소를 서비스 프로듀서의 VPC 네트워크에 있는 Private Service Connect 서브넷 중 하나의 주소로 변환합니다. 대신 소비자의 원래 소스 IP 주소를 보려면 프록시 프로토콜을 사용 설정할 수 있습니다. 프록시 프로토콜이 사용 설정된 경우 PROXY 프로토콜 헤더에서 소비자의 소스 IP 주소와 PSC 연결 ID를 가져올 수 있습니다.

e9d1c49971b10ed0.png

문서 참조

생산자 게시 서비스 삭제

참고: 다음 섹션에서 프로듀서 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

Cloud Shell에서 TCP 서비스 연결 삭제

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

Cloud Shell에서 서비스 연결이 삭제되었는지 확인 (나열된 항목 0개)

gcloud compute service-attachments list

프록시 프로토콜이 사용 설정된 TCP 서비스 연결 만들기

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \
--producer-forwarding-rule=vpc-demo-www-ilb-tcp \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=vpc-demo-us-west2-psc-tcp \
--enable-proxy-protocol

Cloud Shell에서 프록시 프로토콜이 사용 설정된 상태로 서비스 연결이 생성되는지 확인 (true)

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

Cloud Shell에서 TCP 전달 규칙 삭제

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

이전에 만든 (생성자) 서비스 연결과 연결할 TCP 전달 규칙을 다시 만듭니다.

Cloud Shell에서 TCP 전달 규칙 만들기

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \
--region=us-west2 --network=vpc-demo-consumer \
--address=vpc-consumer-psc-tcp \
--target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

프록시 프로토콜 유효성 검사

참고: 다음 섹션에서 프로듀서 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

Producer Project에서 'www-01'을 식별합니다. &amp; 'www-02' 인스턴스당 하나의 세션을 실행할 수 있습니다

6d0bb8c5cb115876.png

출처: 'www-01' TCPDUMP를 실행하여 NAT 모니터링

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

출처: 'www-02' TCPDUMP를 실행하여 NAT 모니터링

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

소비자 프로젝트에서 'test-instance-1'을 식별합니다. 단일 세션을 실행하고

'test-instance-1'에서 상속됨 세션에서 curl 수행

curl 10.0.60.100 

관찰 - 소비자

프록시 프로토콜 v2를 사용하도록 설정했지만 애플리케이션이 이를 지원하도록 구성되지 않은 경우 아래 예와 같이 클라이언트에서 연결하면 오류 메시지가 표시됩니다. 추가 프록시 v2 헤더를 수용하려면 Apache 업데이트가 필요합니다. 이는 Codelab에서 다루지 않습니다.

'test-instance-1'에서 상속됨 백엔드 쿼리가 성공하더라도 세션 CURL은 예상되는 400개의 잘못된 요청을 생성합니다.

@test-instance-1:~$ curl 10.0.60.100 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>

관찰 - 소비자

백엔드 인스턴스 'www-01'에서 또는 'www-02' TCP NAT 서브넷과 TCP ILB 간의 다음과 같은 통신은 캡처에 포함된 프록시 프로토콜에서 관찰됩니다.

대부분의 경우 tcpdump의 세 번째 패킷에는 관련 프록시 프로토콜 정보 요소 (IE)가 포함됩니다. 원하는 경우 프록시 프로토콜 IE가 포함된 39바이트의 패킷을 식별합니다.

192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP
        0x0000:  4500 004f 0000 4000 4006 6df4 c0a8 0003  E..O..@.@.m.....
        0x0010:  0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b  .......P..+<N%..
        0x0020:  5018 6e00 b617 0000 0d0a 0d0a 000d 0a51  P.n............Q
        0x0030:  5549 540a 2111 0017 0a00 3c02 0a00 3c64  UIT.!.....<...<d
        0x0040:  8138 0050 e000 0800 9b34 d70a 003c 64    .8.P.....4...<d

패킷 캡처에서 PROXY 프로토콜 서명(0d0a0d0a000d0a515549540a)을 확인합니다.

프록시 프로토콜 서명을 식별하면 아래와 같이 필드를 분해하고 디코딩할 수 있습니다.

PROXY 프로토콜 서명: 0d0a0d0a000d0a515549540a

기타 프록시 프로토콜 필드: 21 11 00 17

IP 및 포트: 0a003c02 0a003c64 8138 0050

TLV 유형: e0

TLV 길이: 00 08

pscConnection ID: 009b34d70a003c64

16진수

십진수 / IP

PROXY 프로토콜 서명

0d0a0d0a000d0a515549540a

버전, 프로토콜, 길이

21 11 0017

Src IP

0a003c02

10.0.60.2

DSL IP

0a003c64

10.0.60.100

Src 포트

8138

33080

DS 포트

0050

80

TLV 유형 (PP2_TYPE_GCP)

e0

TLV 길이

0008

pscConnectionId

00004dde290a003c64

43686719580552292

pscConnectionId는 아래와 같이 소비자 전달 규칙을 설명하고 일치하는지 확인하여 확인할 수도 있습니다.

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

Cloud Shell에서 TCP 전달 규칙 설명

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2

pscConnectionID를 설명하는 출력

$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T16:50:31.766-07:00'
id: '4443494505307621032'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '43686719580552292'
pscConnectionStatus: ACCEPTED

22. 연결 정책

게시된 서비스의 프로젝트 자동 수락과 명시적 프로젝트 수락 간에 전환할 수 있습니다.

자동 수락에서 명시적 수락으로 변경해도 이 변경 전에 서비스에 연결된 소비자 엔드포인트에는 영향을 미치지 않습니다. 서비스 연결이 삭제될 때까지 기존 소비자 엔드포인트는 게시된 서비스에 연결할 수 있습니다. 새 소비자 엔드포인트를 수락해야 서비스에 연결할 수 있습니다. 자세한 내용은 게시된 서비스 액세스 요청 관리를 참고하세요.

이 실습 섹션에서는 소비자의 서비스 연결을 명시적으로 승인하도록 제작자의 연결 정책을 수정합니다.

참고: 다음 섹션에서 프로듀서 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

제작자 서비스 Cloud Shell에서 연결 환경설정 정책을 자동 수락에서 수동으로 수락으로 업데이트

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL

네트워크 서비스 → Private Service Connect → 게시된 서비스 → vpc-demo-psc-west2-tcp → 연결된 프로젝트로 이동하여 엔드포인트 상태를 식별합니다.

e1d90d1563e10731.png

고객 프로젝트가 '대기 중'으로 변경됨에 대한 알림 상태를 확인할 수 있습니다.

Cloud Shell에서 다음을 실행하여 소비자 프로젝트를 수락합니다. 적절한 프로젝트 이름으로 업데이트해야 합니다.

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20

네트워크 서비스 → Private Service Connect → 게시된 서비스 → vpc-demo-psc-west2-tcp → 연결된 프로젝트로 이동하여 엔드포인트 상태를 식별합니다.

35cba9ac640594a2.png

알림, 소비자 프로젝트가 '수락됨'으로 변경됨 상태를 확인할 수 있습니다.

23. 삭제 단계

생산자 네트워크 정리 단계

참고: 다음 섹션에서 프로듀서 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

Producer 프로젝트 터미널의 단일 Cloud Shell에서 실습 구성요소 삭제

gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet

gcloud compute routers delete crnatprod --region=us-west2 --quiet

gcloud compute instances delete www-01 --zone=us-west2-a --quiet

gcloud compute instances delete www-02 --zone=us-west2-a --quiet

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet

gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet

gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet

gcloud compute health-checks delete hc-http-80 --quiet

gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet

gcloud compute firewall-rules delete vpc-demo-health-checks --quiet

gcloud compute firewall-rules delete psclab-iap-prod --quiet

gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet

gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet

gcloud compute networks delete vpc-demo-producer --quiet

참고: 다음 섹션에서 소비자 서비스가 포함된 프로젝트에서 구성 업데이트를 실행합니다.

소비자 네트워크 정리 단계

Producer 프로젝트 터미널의 단일 Cloud Shell에서 실습 구성요소 삭제

gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet

gcloud compute routers delete crnatconsumer --region=us-west2 --quiet

gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

24. 축하합니다.

축하합니다. Codelab을 완료했습니다.

학습한 내용

  • Private Service Connect 혜택
  • 서비스 소비자의 주요 개념
  • 서비스 제작자의 주요 개념
  • 제작자 환경 만들기
  • 서비스 연결을 통해 서비스 (생산자 환경) 노출
  • 소비자 환경 만들기
  • 소비자 네트워크에서 전달 규칙 만들기
  • TCP 소비자 액세스 확인
  • 사용 설정 및 프록시 프로토콜 확인
  • 정책 액세스 제어 사용 설정