Private Service Connect를 사용하여 GKE로 서비스 게시 및 사용

1. 소개

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

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

45b90d50690dd111.png

그림 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 네트워크에서 요청이 전송되면 소스 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가지 옵션이 있습니다.

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

요건 및 제한사항

  • Private Service Connect의 제한사항이 적용됩니다.
  • GKE 버전 1.21.4-gke.300 이상에서 서비스 연결을 만들 수 있습니다.
  • 여러 서비스 연결 구성에서는 동일한 서브넷을 사용할 수 없습니다.
  • 내부 TCP/UDP 부하 분산기를 사용하는 GKE 서비스를 만들어야 합니다.

5. 테스트 환경

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

1ce5607c0c56d77d.jpeg

이제 생산자 네트워크를 살펴보겠습니다. 생산자 네트워크에 소비자 네트워크에 대한 매핑이 없는 대신 제작자 네트워크에는 소비자가 서비스에 사용하는 서비스 연결 (게시된 서비스)이 포함되어 있습니다. GKE 포드와의 통신을 가능하게 하는 GKE 인그레스 L4 ILB (게시된 서비스)에 의해 생산자의 서비스 연결이 노출됩니다. 애플리케이션을 관리하는 데 사용할 수 있는 도구 모음입니다

NAT 서브넷은 소비자 VPC 네트워크에서 요청이 전송될 때 사용되며, 소비자의 소스 IP 주소는 소스 NAT (SNAT)를 사용하여 Private Service Connect 서브넷 중 하나에서 선택한 IP 주소로 변환됩니다.

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

GKE Private Service Connect용 L4ILB에 대해 자세히 알아보고 이 실습을 진행하는 데 사용된 콘텐츠에 직접 액세스하려면 다음을 참고하세요.

자습형 환경 설정

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로 PROJECT_ID로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다.
  • 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 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

다음 색상 코드 규칙을 참고하세요.

f251ebb137e37136.png

7. 생산자 VPC 네트워크 만들기

afe738fc869f0d6e.png

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

Cloud Shell에서 클러스터에 매니페스트 적용

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

Cloud Shell에서 클러스터에 매니페스트 적용

kubectl apply -f my-service.yaml

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

Cloud Shell에서 클러스터에 매니페스트 적용

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에 연결할 수 있는 소비자 프로젝트의 목록입니다. 이 필드는 connectionPreferenceACCEPT_MANUAL인 경우에만 사용할 수 있습니다. 이 필드 및 기타 옵션에 대한 자세한 내용은 Private Service Connect를 사용하여 서비스 게시를 참조하세요.

프로듀서 검증

서비스 연결 세부정보 보기

Cloud Shell에서 다음 명령어를 사용하여 ServiceAttachment의 세부정보를 볼 수 있습니다.

kubectl describe serviceattachment emoji-sa

GKE L4 ILB 보기

Cloud 콘솔에서 네트워크 서비스 → 부하 분산 → 프런트엔드로 이동합니다.

이전에 정의된 노드 서브넷 192.168.10.0/24에 해당하는 프런트엔드 IP 주소를 확인합니다. 아래 스크린샷을 참고하세요. IP 주소는 다를 수 있습니다.

ed7a25ed4774977b.png

게시된 서비스 보기

Cloud 콘솔에서 네트워크 서비스 → Private Service Connect → 게시된 서비스로 이동합니다.

실습에서 사용된 네트워크(gke-producer-l4-vpc,)로 서비스를 식별합니다. 아래 스크린샷을 참고하세요. 단, 서비스 및 대상 값은 다를 수 있습니다.

5a00836ee514b918.png

아래 화면으로 이동하는 서비스 이름을 클릭합니다. 기본 정보에 채워진 서비스 연결 세부정보를 확인합니다. 또한 '연결된 프로젝트'라는 가 비어 있습니다. 연결 환경설정'수락_자동

497f5f43920018c0.png

e246063a23771273.png

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

1f3c90f1e139e906.png

다음 섹션에서 소비자 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. 서비스 연결 만들기

이전 단계에서 Producer Service Attachment 문자열을 안전한 장소에 복사했습니다. 저장된 값을 'target-service-attachment'에 삽입해 보겠습니다. 필드를 확인합니다.

7abaccc4e24f1ef7.png

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 주소 매핑은 다음 구문을 통해 검증됩니다.

1f3c90f1e139e906.png

소비자 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

연결된 서비스 보기

Cloud 콘솔에서 네트워크 서비스 → Private Service Connect → 연결된 엔드포인트 및 새로 생성된 엔드포인트 보기

206bc00297aaa260.png

consumer-instance-1에 로그인하여 생산자 게시 서비스에 대한 액세스를 테스트해 보겠습니다.

Cloud Shell에서 +

81f3210b29faebd3.png

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에서 +

81f3210b29faebd3.png

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-consumner-psc' 확인 VM 인스턴스와 고정 IP 간의 흐름을 캡처하고 있습니다.

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

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

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

23e427b3060473.png

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

2669743fd1f1cb0d.png

15. 검증 - 생산자

afe738fc869f0d6e.png

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

89ded87a63888f60.png

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

15966d47423ebc5f.png

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

1f3c90f1e139e906.png

지금까지 두 인스턴스 모두 게시된 서비스에 액세스할 수 있음을 확인했습니다. 이제 이그레스 방화벽 규칙을 만들어 게시된 서비스에 대한 consumer-instance-2 액세스를 거부해 보겠습니다.

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

7fa2cda1dfec33a.png

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 간의 흐름을 캡처하고 있습니다.

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

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

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

83b4fc7348ac93cd.png

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

a344f75f67590655.png

17. 삭제 단계

생산자 네트워크 정리 단계

afe738fc869f0d6e.png

Producer 프로젝트 터미널의 단일 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

1f3c90f1e139e906.png

소비자 네트워크 정리 단계

소비자 프로젝트 터미널의 단일 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 혜택
  • 서비스 소비자의 주요 개념
  • 서비스 제작자의 주요 개념
  • 제작자 환경 만들기
  • 서비스 연결을 통해 서비스 (생산자 환경) 노출
  • 소비자 환경 만들기
  • 소비자 네트워크에서 전달 규칙 만들기
  • 소비자 액세스 검증
  • 정책 액세스 제어 사용 설정
  • 이그레스 방화벽 규칙을 사용하여 소비자 전달 규칙에 대한 액세스를 차단함