1. 소개
Private Service Connect 인터페이스는 프로듀서 Virtual Private Cloud (VPC) 네트워크가 소비자 VPC 네트워크의 다양한 대상에 연결을 시작할 수 있게 해주는 리소스입니다. 프로듀서 및 소비자 네트워크는 다른 프로젝트 및 조직에 포함될 수 있습니다.
네트워크 연결이 Private Service Connect 인터페이스의 연결을 수락하면 Google Cloud는 네트워크 연결에 지정된 소비자 서브넷의 IP 주소를 인터페이스에 할당합니다. 소비자 및 프로듀서 네트워크는 내부 IP 주소를 사용하여 연결되고 통신할 수 있습니다.
네트워크 연결과 Private Service Connect 인터페이스 간의 연결은 Private Service Connect 엔드포인트와 서비스 연결 간의 연결과 유사하지만 두 가지 주요 차이점이 있습니다.
- 네트워크 연결을 사용하면 프로듀서 네트워크가 소비자 네트워크 (관리형 서비스 이그레스)로의 연결을 시작할 수 있고, 엔드포인트를 사용하면 소비자 네트워크가 프로듀서 네트워크 (관리형 서비스 인그레스)에 대한 연결을 시작할 수 있습니다.
- Private Service Connect 인터페이스 연결은 전환됩니다. 즉, 프로듀서 네트워크는 소비자 네트워크에 연결된 다른 네트워크와 통신할 수 있습니다.
빌드할 항목
소비자 VPC에서 단일 psc-network-attachment를 만들면 L4 내부 부하 분산기의 백엔드로 두 개의 PSC 인터페이스가 생성됩니다. 프로듀서 VPC에서 tiger는 백엔드-vpc의 cosmo에 curl을 전송합니다. 생산자의 VPC에서 백엔드 및 후속 PSC 인터페이스를 활용하여 트래픽을 cosmo로 라우팅하는 내부 부하 분산기로서 대상 트래픽 192.168.20.0/28 다음 홉에 대한 정적 경로를 만듭니다. 개요는 그림 1을 참고하세요.
비공개 서비스 액세스를 사용할 때 고객 VPC에 VPC 피어링된 Google 관리 서비스에도 동일한 접근 방식을 사용할 수 있습니다.
그림 1
학습할 내용
- 네트워크 연결을 만드는 방법
- 제작자가 네트워크 연결을 사용하여 PSC 인터페이스를 백엔드로 만드는 방법
- ILB를 다음 홉으로 사용하여 프로듀서에서 소비자로 통신을 설정하는 방법
- VPC 피어링을 통해 프로듀서 VM (tiger)에서 소비자 VM (cosmo)에 대한 액세스를 허용하는 방법
필요한 항목
- Google Cloud 프로젝트
- IAM 권한
- Compute 네트워크 관리자 (roles/compute.networkAdmin)
- Compute 인스턴스 관리자 (roles/compute.instanceAdmin)
- Compute 보안 관리자 (roles/compute.securityAdmin)
2. 시작하기 전에
튜토리얼을 지원하도록 프로젝트 업데이트
이 튜토리얼에서는 $variables를 사용하여 Cloud Shell에서 gcloud 구성을 구현합니다.
Cloud Shell에서 다음을 실행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. 소비자 설정
소비자 VPC 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Private Service Connect 네트워크 연결 서브넷 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
백엔드 VPC 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks create backend-vpc --project=$projectid --subnet-mode=custom
백엔드 VPC 서브넷 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=backend-vpc --region=us-central1
백엔드-VPC 방화벽 규칙 만들기
Cloud Shell에서 psc-network-attachment 서브넷에서 cosmo로의 트래픽에 대한 인그레스 규칙을 만듭니다.
gcloud compute firewall-rules create allow-ingress-to-cosmo \
--network=backend-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="192.168.20.0/28" \
--enable-logging
Cloud Router 및 NAT 구성
VM 인스턴스에 공개 IP 주소가 없으므로 이 튜토리얼에서는 소프트웨어 패키지 설치에 Cloud NAT를 사용합니다. Cloud NAT를 사용하면 비공개 IP 주소가 있는 VM이 인터넷에 액세스할 수 있습니다.
Cloud Shell에서 Cloud Router를 만듭니다.
gcloud compute routers create cloud-router-for-nat --network backend-vpc --region us-central1
Cloud Shell에서 NAT 게이트웨이를 만듭니다.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
4. IAP 사용 설정
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있도록 하려는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell에서 IAP 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ssh-iap-consumer \
--network backend-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. 소비자 VM 인스턴스 만들기
Cloud Shell 내에서 소비자 VM 인스턴스 cosmo를 만듭니다.
gcloud compute instances create cosmo \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=cosmo-subnet-1 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to cosmo's backend server !!' | tee /var/www/html/index.html
EOF"
인스턴스의 IP 주소를 가져와 저장합니다.
Cloud Shell에서 cosmo VM 인스턴스에 대해 describe를 실행합니다.
gcloud compute instances describe cosmo --zone=us-central1-a | grep networkIP:
6. Private Service Connect 네트워크 연결
네트워크 연결은 Private Service Connect 인터페이스의 소비자 측을 나타내는 리전별 리소스입니다. 단일 서브넷을 네트워크 연결과 연결하면 프로듀서가 해당 서브넷에서 Private Service Connect 인터페이스에 IP를 할당합니다. 서브넷은 네트워크 연결과 동일한 리전에 있어야 합니다. 네트워크 연결은 프로듀서 서비스와 동일한 리전에 있어야 합니다.
네트워크 연결 만들기
Cloud Shell에서 네트워크 연결을 만듭니다.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--producer-accept-list=$projectid \
--subnets=intf-subnet
네트워크 연결 나열
Cloud Shell에서 네트워크 연결을 나열합니다.
gcloud compute network-attachments list
네트워크 연결 설명
Cloud Shell에서 네트워크 연결을 설명합니다.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
프로듀서가 Private Service Connect 인터페이스를 만들 때 사용할 psc-network-attachment URI를 기록해 둡니다. 예를 들어 다음과 같습니다.
user$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-07T11:27:33.116-07:00'
fingerprint: 8SDsvG6TfYQ=
id: '5014253525248340730'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
producerAcceptLists:
- $projectid
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/intf-subnet
7. 소비자 VPC와 백엔드 VPC 간에 VPC 피어링 설정
소비자 VPC와 백엔드 VPC 간에 VPC 피어링 연결을 만듭니다. 이렇게 하면 Google에서 네트워크 연결을 위한 교차 조직 피어링 외에도 관리형 서비스의 고객 VPC에 연결하는 방식이 복제됩니다. VPC 피어링은 각 VPC에서 구성해야 합니다.
소비자 VPC와 백엔드 VPC 간의 피어링
소비자에서 백엔드 VPC로의 VPC 피어링 연결 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks peerings create consumer-to-backend-vpc \
--network=consumer-vpc \
--peer-project=$projectid \
--peer-network=backend-vpc \
--stack-type=IPV4_ONLY
백엔드에서 소비자 VPC로 VPC 피어링 연결 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks peerings create backend-to-consumer-vpc \
--network=backend-vpc \
--peer-project=$projectid \
--peer-network=consumer-vpc \
--stack-type=IPV4_ONLY
VPC 피어링 상태 세부정보 확인
Cloud Shell에서 VPC 피어링이 '활성' 및 '연결됨' 상태인지 확인합니다.
gcloud compute networks peerings list
예:
user@cloudshell$ gcloud compute networks peerings list
NAME: backend-to-consumer-vpc
NETWORK: backend-vpc
PEER_PROJECT: $projectid
PEER_NETWORK: consumer-vpc
STACK_TYPE: IPV4_ONLY
PEER_MTU:
IMPORT_CUSTOM_ROUTES: False
EXPORT_CUSTOM_ROUTES: False
STATE: ACTIVE
STATE_DETAILS: [2023-06-07T11:42:27.634-07:00]: Connected.
NAME: consumer-to-backend-vpc
NETWORK: consumer-vpc
PEER_PROJECT: $projectid
PEER_NETWORK: backend-vpc
STACK_TYPE: IPV4_ONLY
PEER_MTU:
IMPORT_CUSTOM_ROUTES: False
EXPORT_CUSTOM_ROUTES: False
STATE: ACTIVE
STATE_DETAILS: [2023-06-07T11:42:27.634-07:00]: Connected.
8. 프로듀서 설정
프로듀서 VPC 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom
프로듀서 서브넷 만들기
Cloud Shell 내에서 psc 인터페이스의 vNIC0에 사용되는 서브넷을 만듭니다.
gcloud compute networks subnets create prod-subnet --project=$projectid --range=10.20.1.0/28 --network=producer-vpc --region=us-central1
Cloud Shell에서 tiger 인스턴스에 사용되는 서브넷을 만듭니다.
gcloud compute networks subnets create prod-subnet-2 --project=$projectid --range=10.30.1.0/28 --network=producer-vpc --region=us-central1
Cloud Shell에서 내부 부하 분산기에 사용되는 서브넷을 만듭니다.
gcloud compute networks subnets create prod-subnet-3 --project=$projectid --range=172.16.10.0/28 --network=producer-vpc --region=us-central1
Cloud Router 및 NAT 구성
VM 인스턴스에 공개 IP 주소가 없으므로 이 튜토리얼에서는 소프트웨어 패키지 설치에 Cloud NAT를 사용합니다. Cloud NAT를 사용하면 비공개 IP 주소가 있는 VM이 인터넷에 액세스할 수 있습니다.
Cloud Shell에서 Cloud Router를 만듭니다.
gcloud compute routers create cloud-router-for-nat-producer --network producer-vpc --region us-central1
Cloud Shell에서 NAT 게이트웨이를 만듭니다.
gcloud compute routers nats create cloud-nat-us-central1-producer --router=cloud-router-for-nat-producer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
IAP 사용 설정
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있도록 하려는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell에서 IAP 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ssh-iap-producer \
--network producer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
프로듀서 VM 인스턴스 만들기
Cloud Shell에서 소비자 VM 인스턴스 tiger를 만듭니다.
gcloud compute instances create tiger \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=prod-subnet-2 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump"
9. 제작자 방화벽 규칙 만들기
프로듀서 VPC에서 prod-subnet-2에서 producer-vpc의 모든 인스턴스로의 통신을 허용하는 인그레스 방화벽 규칙을 만듭니다.
Cloud Shell에서 제작자 방화벽 규칙을 만듭니다.
gcloud compute --project=$projectid firewall-rules create allow-tiger-ingress --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=10.30.1.0/28 --enable-logging
10. Private Service Connect 인터페이스 만들기
Private Service Connect 인터페이스는 프로듀서 Virtual Private Cloud (VPC) 네트워크가 소비자 VPC 네트워크의 다양한 대상에 연결을 시작할 수 있게 해주는 리소스입니다. 프로듀서 및 소비자 네트워크는 다른 프로젝트 및 조직에 포함될 수 있습니다.
네트워크 연결이 Private Service Connect 인터페이스의 연결을 수락하면 Google Cloud는 네트워크 연결에 지정된 소비자 서브넷의 IP 주소를 인터페이스에 할당합니다. 소비자 및 프로듀서 네트워크는 내부 IP 주소를 사용하여 연결되고 통신할 수 있습니다.
이 튜토리얼에서는 내부 부하 분산기의 백엔드가 될 Private Service Connect 네트워크 연결을 사용하여 두 개의 인스턴스를 만듭니다.
Cloud Shell에서 Private Service Connect 인터페이스 (rabbit)를 만들고 네트워크 연결 설명 출력에서 이전에 식별된 psc-network-attachment URI를 삽입합니다.
gcloud compute instances create rabbit --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment --metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart"
Cloud Shell에서 Private Service Connect 인터페이스 (fox)를 만들고 네트워크 연결 설명 출력에서 이전에 식별된 psc-network-attachment URI를 삽입합니다.
gcloud compute instances create fox --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment --metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart"
다중 NIC 유효성 검사
PSC 인터페이스가 적절한 IP 주소로 구성되었는지 확인합니다. vNIC0은 제작자 prod-subnet (10.20.1.0/28)을 사용하고 vNIC1은 소비자 intf-subnet (192.168.10.0/28)을 사용합니다.
gcloud compute instances describe rabbit --zone=us-central1-a | grep networkIP:
gcloud compute instances describe fox --zone=us-central1-a | grep networkIP:
예:
user$ gcloud compute instances describe rabbit --zone=us-central1-a | grep networkIP:
networkIP: 10.20.1.2
networkIP: 192.168.10.2
user$ gcloud compute instances describe fox --zone=us-central1-a | grep networkIP:
networkIP: 10.20.1.3
networkIP: 192.168.10.3
11. 비관리형 인스턴스 그룹을 만들고 토끼와 여우를 추가합니다.
다음 섹션에서는 PSC 인터페이스 인스턴스 rabbit과 fox로 구성된 비관리형 인스턴스 그룹을 만듭니다.
Cloud Shell에서 비관리형 인스턴스 그룹을 만듭니다.
gcloud compute instance-groups unmanaged create psc-interface-instances-ig --project=$projectid --zone=us-central1-a
Cloud Shell에서 인스턴스 그룹에 fox 및 rabbit 인스턴스를 추가합니다.
gcloud compute instance-groups unmanaged add-instances psc-interface-instances-ig --project=$projectid --zone=us-central1-a --instances=fox,rabbit
12. TCP 상태 점검, 백엔드 서비스, 전달 규칙, 방화벽 만들기
Cloud Shell에서 백엔드 상태 확인을 만듭니다.
gcloud compute health-checks create http hc-http-80 --port=80
Cloud Shell 내에서 백엔드 서비스 만들기
gcloud compute backend-services create psc-interface-backend --load-balancing-scheme=internal --protocol=tcp --region=us-central1 --health-checks=hc-http-80
gcloud compute backend-services add-backend psc-interface-backend --region=us-central1 --instance-group=psc-interface-instances-ig --instance-group-zone=us-central1-a
Cloud Shell 내에서 전달 규칙 만들기
gcloud compute forwarding-rules create psc-ilb --region=us-central1 --load-balancing-scheme=internal --network=producer-vpc --subnet=prod-subnet-3 --address=172.16.10.10 --ip-protocol=TCP --ports=all --backend-service=psc-interface-backend --backend-service-region=us-central1
Cloud Shell에서 백엔드 상태 점검을 사용 설정하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create ilb-health-checks --allow tcp:80,tcp:443 --network producer-vpc --source-ranges 130.211.0.0/22,35.191.0.0/16
13. PSC 인터페이스용 Linux IP 테이블 만들기 - rabbit
PSC 인터페이스 인스턴스에서 프로듀서가 소비자 서브넷에 통신할 수 있도록 Linux IP 테이블을 구성합니다.
Private Service Connect 인터페이스의 게스트 OS 이름 찾기
라우팅을 구성하려면 Private Service Connect 인터페이스의 게스트 OS 이름을 알아야 하며, 이는 Google Cloud의 인터페이스 이름과 다릅니다.
Cloud Shell에서 IAP를 사용하여 psc-interface VM인 rabbit에 로그인합니다.
gcloud compute ssh rabbit --project=$projectid --zone=us-central1-a --tunnel-through-iap
Cloud Shell에서 psc-interface 인스턴스의 IP 주소를 가져옵니다.
ip a
예:
user@rabbit:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:0a:14:01:02 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.20.1.2/32 brd 10.20.1.2 scope global dynamic ens4
valid_lft 59396sec preferred_lft 59396sec
inet6 fe80::4001:aff:fe14:102/64 scope link
valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:02 brd ff:ff:ff:ff:ff:ff
altname enp0s5
inet 192.168.10.2/32 brd 192.168.10.2 scope global dynamic ens5
valid_lft 66782sec preferred_lft 66782sec
inet6 fe80::4001:c0ff:fea8:a02/64 scope link
valid_lft forever preferred_lft forever
PSC 인터페이스의 게이트웨이 IP 찾기
네트워크 인터페이스 목록에서 Private Service Connect 인터페이스의 IP 주소와 연결된 인터페이스 이름(예: ens5(vNIC1))을 찾아 저장합니다.
라우팅을 구성하려면 Private Service Connect 인터페이스의 기본 게이트웨이의 IP 주소를 알아야 합니다.
Cloud Shell에서는 PSC 인터페이스가 vNIC1과 연결되어 있으므로 1을 사용합니다.
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
예를 들어 기본 gw 192.168.10.1이 생성됩니다.
user@rabbit:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1
소비자 서브넷 경로 추가
Private Service Connect 인터페이스에 연결되는 각 소비자 서브넷에 대해 Private Service Connect 인터페이스의 기본 게이트웨이 경로를 추가해야 합니다. 이렇게 하면 소비자 네트워크에 바인딩된 트래픽이 Private Service Connect 인터페이스에서 이그레스됩니다.
경로 테이블 유효성 검사
Cloud Shell에서 현재 경로를 확인합니다.
ip route show
예:
user@rabbit:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
Cloud Shell에서 cosmo-subnet-1에 경로를 추가합니다.
sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
경로 테이블 유효성 검사
Cloud Shell에서 업데이트된 추가 경로를 확인합니다.
ip route show
예:
user@rabbit:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
192.168.20.0/28 via 192.168.10.1 dev ens5
IP 테이블 규칙 만들기
Cloud Shell에서 현재 IP 테이블을 확인합니다.
sudo iptables -t nat -L -n -v
예:
user@rabbit:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Cloud Shell에서 IP 테이블 업데이트
sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
Cloud Shell에서 업데이트된 IP 테이블을 확인합니다.
sudo iptables -t nat -L -n -v
예:
user@rabbit:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens5 0.0.0.0/0 0.0.0.0/0
14. PSC 인터페이스의 Linux IP 테이블 만들기 - fox
PSC 인터페이스 인스턴스에서 프로듀서가 소비자 서브넷에 통신할 수 있도록 Linux IP 테이블을 구성합니다.
Private Service Connect 인터페이스의 게스트 OS 이름 찾기
라우팅을 구성하려면 Private Service Connect 인터페이스의 게스트 OS 이름을 알아야 하며, 이는 Google Cloud의 인터페이스 이름과 다릅니다.
새 Cloud Shell 탭을 열고 프로젝트 설정을 업데이트합니다.
Cloud Shell에서 다음을 실행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Cloud Shell에서 IAP를 사용하여 psc-interface VM fox에 로그인합니다.
gcloud compute ssh fox --project=$projectid --zone=us-central1-a --tunnel-through-iap
Cloud Shell에서 psc-interface 인스턴스의 IP 주소를 가져옵니다.
ip a
예:
user@fox:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:0a:14:01:03 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.20.1.3/32 brd 10.20.1.3 scope global dynamic ens4
valid_lft 65601sec preferred_lft 65601sec
inet6 fe80::4001:aff:fe14:103/64 scope link
valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:03 brd ff:ff:ff:ff:ff:ff
altname enp0s5
inet 192.168.10.3/32 brd 192.168.10.3 scope global dynamic ens5
valid_lft 63910sec preferred_lft 63910sec
inet6 fe80::4001:c0ff:fea8:a03/64 scope link
valid_lft forever preferred_lft forever
PSC 인터페이스의 게이트웨이 IP 찾기
네트워크 인터페이스 목록에서 Private Service Connect 인터페이스의 IP 주소와 연결된 인터페이스 이름(예: ens5(vNIC1))을 찾아 저장합니다.
라우팅을 구성하려면 Private Service Connect 인터페이스의 기본 게이트웨이의 IP 주소를 알아야 합니다.
Cloud Shell에서는 PSC 인터페이스가 vNIC1과 연결되어 있으므로 1을 사용합니다.
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
예를 들어 기본 gw 192.168.10.1이 생성됩니다.
user@fox:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1
소비자 서브넷 경로 추가
Private Service Connect 인터페이스에 연결되는 각 소비자 서브넷에 대해 Private Service Connect 인터페이스의 기본 게이트웨이 경로를 추가해야 합니다. 이렇게 하면 소비자 네트워크에 바인딩된 트래픽이 Private Service Connect 인터페이스에서 이그레스됩니다.
경로 테이블 유효성 검사
Cloud Shell에서 현재 경로를 확인합니다.
ip route show
예:
user@fox:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
Cloud Shell에서 cosmo-subnet-1에 경로를 추가합니다.
sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
경로 테이블 유효성 검사
Cloud Shell에서 업데이트된 추가 경로를 확인합니다.
ip route show
예:
user@fox:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
192.168.20.0/28 via 192.168.10.1 dev ens5
IP 테이블 규칙 만들기
Cloud Shell에서 현재 IP 테이블을 확인합니다.
sudo iptables -t nat -L -n -v
예:
user@fox:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Cloud Shell에서 IP 테이블을 업데이트합니다.
sudo iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
Cloud Shell에서 업데이트된 IP 테이블을 확인합니다.
sudo iptables -t nat -L -n -v
예:
user@fox:~$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens5 0.0.0.0/0 0.0.0.0/0
15. 경로 테이블 업데이트
producer-vpc에서 소비자 서브넷 192.168.20.0/28에 대한 정적 경로를 만들고 다음 홉을 내부 부하 분산기로 설정합니다. 생성되면 대상 192.168.20.0/28의 모든 패킷 (producer-vpc 내)이 내부 부하 분산기로 전달됩니다.
새 Cloud Shell 탭을 열고 프로젝트 설정을 업데이트합니다.
Cloud Shell에서 다음을 실행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Cloud Shell에서 producer-vpc 경로 테이블을 정적 경로로 업데이트합니다.
gcloud beta compute routes create producer-to-cosmo-subnet-1 --project=$projectid --network=producer-vpc --priority=1000 --destination-range=192.168.20.0/28 --next-hop-ilb=psc-ilb --next-hop-ilb-region=us-central1
16. tiger에서 cosmo로의 연결 성공 여부 확인
Curl 유효성 검사
curl을 실행하여 제작자 VM 인스턴스인 tiger가 소비자 인스턴스인 cosmo와 통신할 수 있는지 확인해 보겠습니다.
새 Cloud Shell 탭을 열고 프로젝트 설정을 업데이트합니다.
Cloud Shell에서 다음을 실행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Cloud Shell에서 IAP를 사용하여 tiger 인스턴스에 로그인합니다.
gcloud compute ssh tiger --project=$projectid --zone=us-central1-a --tunnel-through-iap
tiger 인스턴스에서 이전에 튜토리얼에서 확인한 cosmo의 IP 주소에 대해 curl을 실행합니다.
curl -v <cosmo's IP Address>
예:
user@tiger:~$ curl -v 192.168.20.2
* Trying 192.168.20.2:80...
* Connected to 192.168.20.2 (192.168.20.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.20.2
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 09 Jun 2023 03:49:42 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Fri, 09 Jun 2023 03:28:37 GMT
< ETag: "27-5fda9f6ea060e"
< Accept-Ranges: bytes
< Content-Length: 39
< Content-Type: text/html
<
Welcome to cosmo's backend server !!
축하합니다. curl 명령어를 실행하여 producer-vpc에서 backend-vpc로의 연결을 확인했습니다.
17. 삭제
Cloud Shell에서 튜토리얼 구성요소를 삭제합니다.
gcloud compute instances delete cosmo --zone=us-central1-a --quiet
gcloud compute instances delete rabbit --zone=us-central1-a --quiet
gcloud compute instances delete fox --zone=us-central1-a --quiet
gcloud compute instances delete tiger --zone=us-central1-a --quiet
gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet
gcloud compute firewall-rules delete allow-ingress-to-cosmo allow-tiger-ingress ilb-health-checks ssh-iap-consumer ssh-iap-producer --quiet
gcloud beta compute routes delete producer-to-cosmo-subnet-1 --quiet
gcloud compute forwarding-rules delete psc-ilb --region=us-central1 --quiet
gcloud compute backend-services delete psc-interface-backend --region=us-central1 --quiet
gcloud compute instance-groups unmanaged delete psc-interface-instances-ig --zone=us-central1-a --quiet
gcloud compute health-checks delete hc-http-80 --quiet
gcloud compute networks subnets delete cosmo-subnet-1 prod-subnet prod-subnet-2 prod-subnet-3 intf-subnet --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat-producer --region=us-central1 --quiet
gcloud compute networks delete consumer-vpc --quiet
gcloud compute networks delete producer-vpc --quiet
gcloud compute networks delete backend-vpc --quiet
18. 축하합니다
축하합니다. Private Service Connect 인터페이스를 구성하고 검증했으며 VPC 피어링을 통한 소비자 및 프로듀서 연결을 검증했습니다.
소비자 인프라를 만들고 프로듀서가 소비자와 프로듀서 통신을 연결하는 멀티 닉 VM을 만들 수 있는 네트워크 연결을 추가했습니다. PSC 인터페이스를 사용하여 제작자 VPC의 내부 부하 분산기와 정적 경로를 통해 VPC 피어링을 통해 퍼스트 파티/서드 파티 서비스와 통신하는 방법을 알아봤습니다.
Cosmopup은 튜토리얼이 정말 좋다고 생각합니다.
다음 단계
다음 튜토리얼을 확인해 보세요.
- Private Service Connect를 소비하여 GKE로 서비스 게시 및 사용
- Private Service Connect를 소비한 서비스 게시 및 사용
- Private Service Connect 및 내부 TCP 프록시 부하 분산기를 사용하여 하이브리드 네트워킹을 통해 온프레미스 서비스에 연결