백엔드를 통해 리전 Google API에 액세스

이 가이드에서는 리전 Google API에 액세스하도록 Private Service Connect 백엔드를 사용해서 내부 애플리케이션 부하 분산기를 구성하는 방법을 설명합니다.

백엔드에 대한 자세한 내용은 백엔드 정보를 참조하세요.

Private Service Connect에 사용되는 내부 애플리케이션 부하 분산기는 공유 VPC 네트워크연결된 네트워크에서 연결될 수 있습니다.

역할

Compute 부하 분산기 관리자 역할(roles/compute.loadBalancerAdmin)에는 이 가이드에서 설명하는 태스크를 수행하는 데 필요한 권한이 포함되어 있습니다.

지원되는 서비스

지원되는 리전 서비스 엔드포인트 목록을 참조하세요.

시작하기 전에

  • 프로젝트에서 Compute Engine API사용 설정합니다.

  • 서비스 디렉터리에서 부하 분산 전달 규칙을 등록하려면 프로젝트에서 Service Directory API사용 설정합니다. 서비스 디렉터리를 구성하려면 Google Cloud CLI 또는 API를 사용하여 전달 규칙을 만들어야 합니다.

  • 프록시 전용 서브넷이 아직 없으면 만듭니다. 내부 애플리케이션 부하 분산기를 만들려는 VPC 네트워크 및 리전에 단일 프록시 전용 서브넷이 있어야 합니다. 해당 네트워크와 리전 내의 모든 내부 애플리케이션 부하 분산기에서 이 서브넷을 사용합니다.

  • 아직 없으면 도메인에 대해 비공개 키 및 자체 관리형 인증서를 만듭니다. 자체 관리형 SSL 인증서 사용 1단계를 참조하세요. 부하 분산기를 구성할 때 대상 HTTPS 프록시를 만들려면 비공개 키 및 인증서가 필요합니다.

네트워크 엔드포인트 그룹 만들기

부하 분산기를 사용하여 제공할 각 서비스에 대해 Private Service Connect 네트워크 엔드포인트 그룹(NEG)을 만듭니다.

콘솔

  1. Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.

    네트워크 엔드포인트 그룹으로 이동

  2. 네트워크 엔드포인트 그룹 만들기를 클릭합니다.

  3. 네트워크 엔드포인트 그룹의 이름을 입력합니다.

  4. 네트워크 엔드포인트 그룹 유형네트워크 엔드포인트 그룹(Private Service Connect)을 선택합니다.

  5. 네트워크 엔드포인트 그룹의 리전을 선택합니다.

  6. 네트워크 엔드포인트 그룹의 대상 서비스를 선택합니다.

  7. 만들기를 클릭합니다.

gcloud

gcloud compute network-endpoint-groups create NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=TARGET_SERVICE \
    --region=REGION

다음을 바꿉니다.

  • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.

  • TARGET_SERVICE: 연결할 대상 서비스입니다. 지원되는 리전 서비스 엔드포인트 목록을 참조하세요.

  • REGION: 네트워크 엔드포인트 그룹을 만들 리전입니다. 리전은 연결할 서비스와 동일한 리전이어야 합니다.

부하 분산기 구성

모든 부하 분산기 구성요소를 Private Service Connect 네트워크 엔드포인트 그룹과 동일한 리전에 만들어야 합니다.

콘솔

구성 시작

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 부하 분산기 만들기를 클릭합니다.
  3. 부하 분산기 유형에서 애플리케이션 부하 분산기(HTTP/HTTPS)를 선택하고 다음을 클릭합니다.
  4. 공개 또는 내부에서 내부를 선택하고 다음을 클릭합니다.
  5. 리전 간 또는 단일 리전 배포리전 워크로드에 적합을 선택하고 다음을 클릭합니다.
  6. 구성을 클릭합니다.

기본 구성

  1. 부하 분산기의 이름을 입력합니다.
  2. 부하 분산기의 리전을 선택합니다.
  3. 부하 분산기의 네트워크를 선택합니다.

    네트워크에는 NEG 및 부하 분산기를 만들려는 리전의 프록시 전용 서브넷이 포함되어야 합니다. 서브넷이 없으면 서브넷 예약을 클릭하여 서브넷을 만들 수 있습니다.

  4. 계속하려면 창을 열어둡니다.

백엔드 구성

Private Service Connect 네트워크 엔드포인트 그룹은 부하 분산기 백엔드 유형입니다. 구성하려는 백엔드마다 백엔드 서비스를 만듭니다.

  1. 백엔드 구성을 클릭합니다.
  2. 구성하려는 Private Service Connect 네트워크 엔드포인트 그룹마다 백엔드 서비스를 만듭니다.

    1. 백엔드 서비스 만들기 또는 선택 메뉴에서 백엔드 서비스 만들기를 선택합니다.
    2. 백엔드 서비스의 이름을 입력합니다.
    3. 백엔드 유형Private Service Connect 네트워크 엔드포인트 그룹으로 설정합니다.
    4. Private Service Connect 대상 유형리전별 Google API로 설정합니다.
    5. 프로토콜에 HTTPS를 선택합니다.

    6. 백엔드 섹션에서 새 백엔드 메뉴를 클릭하고 Private Service Connect 네트워크 엔드포인트 그룹을 선택합니다.

      새 Private Service Connect 네트워크 엔드포인트 그룹을 만들어야 하는 경우 Private Service Connect 네트워크 엔드포인트 그룹 만들기를 클릭합니다.

라우팅 규칙

수신되는 HTTPS 요청을 특정 백엔드 서비스나 백엔드 버킷으로 라우팅하는 규칙 집합을 URL 맵이라고 합니다. URL 맵에 대한 자세한 내용은 URL 맵 개요를 참조하세요.

부하 분산기에 백엔드 서비스 하나만 구성하는 경우 기본 라우팅 규칙으로 충분하며 프런트엔드 구성으로 건너뛸 수 있습니다.

  1. 백엔드 서비스가 2개를 초과하면 라우팅 규칙을 클릭합니다.
  2. 단순한 호스트 및 경로 규칙을 선택합니다.
  3. 각 백엔드에서 다음을 수행합니다.
    1. 호스트 및 경로 규칙 추가
    2. 호스트에 이 서비스에 요청을 보내는 데 사용할 호스트 이름을 입력합니다(예: pubsub.example.com).
    3. 경로에 경로를 입력합니다(예: /*).
    4. 백엔드에 백엔드 서비스를 선택합니다.

프런트엔드 구성

  1. 프런트엔드 구성을 클릭합니다.
  2. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  3. 부하 분산기의 이름을 입력합니다.
  4. 프로토콜 필드에서 HTTPS(HTTP/2 포함)를 선택합니다.
  5. 부하 분산기의 서브네트워크를 선택합니다.
  6. HTTPS 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
  7. IP 주소에 메뉴에서 IP 주소를 선택합니다.

    새 IP 주소를 예약하려면 IP 주소 만들기를 클릭합니다.

  8. 인증서 드롭다운 목록을 클릭합니다.

    1. 사용할 자체 관리형 SSL 인증서 리소스가 이미 있으면 메뉴에서 이를 선택합니다.
    2. 그 이외의 경우 새 인증서 만들기를 선택합니다.
    3. 인증서 이름을 입력합니다.
    4. 해당 필드에 다음 PEM 형식의 파일을 업로드합니다.
      • 인증서
      • 비공개 키
    5. 만들기를 클릭합니다.
  9. 완료를 클릭합니다.

검토 및 완료

  1. 검토 및 완료를 클릭하여 구성을 검토합니다.
  2. 만들기를 클릭합니다.

gcloud

  1. 만든 네트워크 엔드포인트 그룹마다 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=HTTPS \
        --region=REGION
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
    • REGION: 백엔드 서비스를 만들 리전입니다.
  2. 생성된 백엔드 서비스마다 해당하는 NEG를 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --network-endpoint-group=NEG_NAME \
        --region=REGION
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
    • REGION: 백엔드의 리전입니다.
  3. 부하 분산기의 URL 맵을 만듭니다.

    URL 맵은 기본 백엔드 서비스를 참조해야 합니다. 하나의 백엔드 서비스로 부하 분산기를 구성하는 경우 백엔드 서비스를 기본값으로 설정합니다. 다음 단계에서 만드는 호스트 규칙 및 경로 일치자에서 참조되는 여러 백엔드 서비스를 사용하도록 부하 분산기를 구성하는 경우 URL 맵 기본값으로 사용할 백엔드 서비스 중 하나를 선택합니다.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME \
        --region=REGION
    

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵의 이름입니다.

    • DEFAULT_BACKEND_SERVICE_NAME: 부하 분산기의 기본값 이름입니다. 기본값은 호스트 규칙이 요청된 호스트 이름과 일치할 때 사용됩니다.

    • REGION: URL 맵을 만들 리전입니다.

  4. URL 맵에 백엔드 서비스를 더 추가합니다.

    URL 맵에서 둘 이상의 백엔드 서비스를 참조해야 하는 경우 다음 단계를 완료합니다. URL 맵이 하나의 백엔드 서비스만 참조하는 경우에는 이 단계를 건너뜁니다.

    1. 백엔드 서비스마다 경로 일치자를 추가합니다. 경로 일치자를 백엔드 서비스당 하나씩 만들어야 합니다.

      gcloud compute url-maps add-path-matcher URL_MAP_NAME \
          --path-matcher-name=PATH_MATCHER \
          --default-service=BACKEND_SERVICE_NAME \
          --region=REGION
      

      다음을 바꿉니다.

      • URL_MAP_NAME: URL 맵의 이름입니다.
      • PATH_MATCHER: 경로 일치자의 이름입니다.
      • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
      • REGION: URL 맵의 리전입니다.
    2. 각 호스트 이름에 대해 호스트 규칙을 추가합니다.

      호스트 규칙마다 경로 일치자를 하나씩 참조할 수 있지만 2개 이상의 호스트 규칙이 동일한 경로 일치자를 참조할 수 있습니다.

      gcloud compute url-maps add-host-rule URL_MAP_NAME \
          --hosts=HOST \
          --path-matcher-name=PATH_MATCHER \
          --region=REGION
      

      다음을 바꿉니다.

      • URL_MAP_NAME: URL 맵의 이름입니다.
      • HOST: 이 호스트에 대해 요청을 전송할 호스트 이름입니다. 예를 들면 pubsub.example.com입니다.
      • PATH_MATCHER: 경로 일치자의 이름입니다.
      • REGION: URL 맵의 리전입니다.
  5. 대상 HTTPS 프록시를 만듭니다.

    1. gcloud compute ssl-certificates create 명령어를 사용하여 리전별 SSL 인증서 리소스를 만듭니다. 내부 애플리케이션 부하 분산기에서는 Google 관리 인증서가 지원되지 않습니다.

      gcloud compute ssl-certificates create CERTIFICATE \
          --certificate=LB_CERT \
          --private-key=LB_PRIVATE_KEY \
          --region=REGION
      

      다음을 바꿉니다.

      • CERTIFICATE: 인증서의 이름입니다.

      • LB_CERT: 자체 관리형 인증서에 대한 PEM 형식 인증서의 경로입니다.

      • LB_PRIVATE_KEY: 자체 관리형 인증서에 대한 PEM 형식 비공개 키 파일의 경로입니다.

      • REGION: 인증서의 리전입니다.

    2. 리전별 SSL 인증서 리소스를 사용해서 gcloud compute target-https-proxies create 명령어로 대상 HTTPS 프록시를 만듭니다.

      gcloud compute target-https-proxies create PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --region=REGION \
          --ssl-certificates=CERTIFICATE
      

      다음을 바꿉니다.

      • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
      • URL_MAP_NAME: URL 맵의 이름입니다.
      • REGION: 인증서 리소스의 리전입니다.
      • CERTIFICATE: 인증서 리소스의 이름입니다.
  6. 전달 규칙에 리전 내부 IPv4 주소를 예약합니다.

    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 \
        --region=REGION \
        --subnet=SUBNETWORK
    

    다음을 바꿉니다.

    • ADDRESS_NAME: IP 주소 리소스의 이름입니다.
    • REGION: IP 주소를 만들 리전입니다.
    • SUBNET: IP 주소를 만들 서브넷입니다.

    다음 명령어를 실행하여 예약된 IP 주소를 봅니다. 부하 분산기를 만든 후에는 IP 주소를 사용하여 구성을 확인할 수 있습니다.

    gcloud compute addresses describe ADDRESS_NAME \
        --format="get(address)" --region=REGION
    
  7. 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create 명령어를 사용하여 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=NETWORK \
        --address=ADDRESS_NAME \
        --ports=443 \
        --region=REGION \
        --target-https-proxy=PROXY_NAME \
        --target-https-proxy-region=PROXY_REGION \
       [--service-directory-registration=SD_SERVICE_NAME]
    

    다음을 바꿉니다.

    • FWD_RULE: 전달 규칙의 이름입니다.

    • NETWORK: 전달 규칙을 만들 리전입니다.

    • ADDRESS_NAME: 예약된 IP 주소입니다.

    • REGION: 전달 규칙의 리전입니다.

    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.

    • PROXY_REGION: 대상 HTTPS 프록시의 리전입니다.

    • SD_SERVICE_NAME: 부하 분산기를 등록하려는 서비스 디렉터리 서비스의 URI입니다. 형식은 projects/PROJECT/locations/REGION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME입니다. --service-directory-registration 지정은 선택사항입니다.

구성 확인

  1. VM 인스턴스를 만듭니다.

    gcloud compute instances create VM_NAME \
        --network=NETWORK \
        --image-project=debian-cloud --image-family=debian-12 \
        --zone=ZONE
    

    다음을 바꿉니다.

    • VM_NAME: 가상 머신의 이름입니다.

    • NETWORK: VM의 네트워크입니다.

    • ZONE: VM의 영역입니다.

  2. VM에 연결합니다.

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. curl를 사용하여 구성을 확인합니다. 이 명령어는 Host 헤더를 설정하고 사용자 정의 IP 주소를 지정하여 DNS 변환을 우회합니다. HTTPS에 포트 443을 사용하는 것처럼 프로토콜의 기본 포트를 사용하는 경우 포트를 생략할 수 있습니다.

    필요한 경우 -k 플래그를 사용하면 인증서 유효성 검사를 건너뛸 수 있습니다. 자체 서명된 인증서를 사용해 대상 HTTPS 프록시를 구성했거나 인증서에 서명한 인증 기관의 인증서가 VM에 없는 경우 유효성 검사를 건너뛰어야 할 수 있습니다.

    curl -iv --resolve HOSTNAME:443:IP_ADDRESS \
       'https://HOSTNAME/RESOURCE_URI'
    

    다음을 바꿉니다.

    • HOSTNAME: URL 맵에 구성된 호스트 이름입니다(예: pubsub.example.com).
    • IP_ADDRESS: 부하 분산기의 전달 규칙의 IP 주소
    • RESOURCE_URI: 인증에 사용할 리소스의 나머지 URI입니다. 예를 들어 부하 분산기에서 Pub/Sub의 리전 엔드포인트로 요청을 전달하는 경우 rest?version=v1를 사용할 수 있습니다.

DNS 레코드 구성

전달 규칙의 IP 주소를 가리키도록 URL 맵에 추가한 각 호스트의 DNS 레코드를 구성합니다. Cloud DNS를 사용하여 DNS를 관리하는 경우 레코드 추가, 수정, 삭제를 참고하세요. 그렇지 않으면 DNS 서버에서 DNS 레코드를 구성합니다.

예를 들어 다음과 같은 구성을 만들었다고 가정해 보겠습니다.

  • 대상 서비스 pubsub.europe-west3.rep.googleapis.com을 사용하는 Private Service Connect NEG

  • Private Service Connect NEG를 백엔드로 사용하는 내부 애플리케이션 부하 분산기

  • pubsub.example.com의 호스트 규칙을 정의하는 URL 맵

이 구성이 제대로 작동하려면 pubsub.example.com이 전달 규칙의 IP 주소를 가리키도록 DNS 레코드를 만들어야 합니다.

이 구성을 사용하면 pubsub.example.com으로 전송된 요청은 부하 분산기로 전송되어 pubsub.europe-west3.rep.googleapis.com으로 전달됩니다.

백엔드에 요청을 전송하도록 클라이언트 구성

공개 서비스 엔드포인트 대신 백엔드를 통해 요청을 전송하려면 부하 분산기의 URL 맵에 정의한 호스트 이름(예: pubsub.example.com)으로 요청을 전송하도록 클라이언트를 구성해야 합니다. 커스텀 엔드포인트를 사용하도록 구성하는 방법은 클라이언트 또는 클라이언트 라이브러리 문서를 참조하세요. 다음 페이지에는 몇 가지 일반적인 클라이언트의 구성 단계가 나와 있습니다.

  • Python: 클라이언트 옵션에서 api_endpoint를 구성할 수 있습니다.

  • Go: ClientOptions에서 WithEndpoint를 구성할 수 있습니다.

  • .NET: 클라이언트의 빌더 클래스에서 Endpoint를 구성할 수 있습니다.

  • gcloud: gcloud CLI에서 api_endpoint_overrides를 구성할 수 있습니다.

온프레미스 호스트에서 백엔드에 액세스

온프레미스 네트워크가 VPC 네트워크에 연결되어 있으면 트래픽을 Private Service Connect 백엔드로 전송할 수 있습니다.

  • 온프레미스 네트워크는 내부 애플리케이션 부하 분산기와 동일한 리전에 있는 Cloud VPN 터널이나 VLAN 연결을 사용하는 내부 애플리케이션 부하 분산기가 포함된 VPC 네트워크에 연결되어야 합니다.

  • 온프레미스 네트워크에는 내부 애플리케이션 부하 분산기에 대한 적절한 경로가 있어야 합니다. Cloud VPN 터널 또는 VLAN 연결에 대해 BGP 세션을 관리하는 각 Cloud Router가 내부 애플리케이션 부하 분산기 전달 규칙에 사용되는 서브넷의 기본 IP 주소 범위를 공지하도록 구성되었는지 확인합니다. Cloud Router는 기본적으로 서브넷 경로를 공지합니다.

  • 내부 애플리케이션 부하 분산기 URL 맵의 호스트 이름이 내부 애플리케이션 부하 분산기 전달 규칙 IP 주소로 변환되도록 온프레미스 시스템을 구성해야 합니다. 온프레미스 네임서버에서 DNS 레코드를 만들거나 Cloud DNS를 사용할 수 있습니다.

    Cloud DNS 관리 비공개 영역을 사용하여 DNS 레코드를 만든 경우 다음 단계를 수행합니다.

    • 온프레미스 네트워크가 연결되는 VPC 네트워크에 인바운드 서버 정책을 만듭니다.

    • Cloud VPN 터널과 VLAN 연결이 있는 리전의 온프레미스 네트워크가 연결되는 VPC 네트워크에서 인바운드 전달자 진입점을 식별합니다.

    • URL 맵의 호스트 이름에 대한 DNS 요청을 Cloud DNS 인바운드 전달자 진입점에 전달하도록 온프레미스 DNS 네임서버를 구성합니다.

그림 1. Private Service Connect, Cloud Router, 온프레미스 호스트를 구성하면 리전 백엔드를 사용하여 Google API 및 서비스에 연결할 수 있습니다(확대하려면 클릭).