Dataproc 클러스터 네트워크 구성

개요

Dataproc 클러스터에서 마스터 및 작업자 VM으로 구성된 Compute Engine 가상 머신 인스턴스가 ICMP, TCP(모든 포트), UDP(모든 포트)를 사용하여 서로 통신할 수 있어야 합니다.

방화벽 규칙 요구사항

Dataproc를 사용하려면 다음 특성을 가진 인그레스 허용 방화벽 규칙을 만들어야 합니다.

  • 규칙의 소스가 클러스터 VM을 포함해야 합니다. IP 주소 범위를 사용하여 소스를 정의하거나 소스 태그 또는 소스 서비스 계정을 사용하여 VM을 식별할 수 있습니다. 소스 지정을 생략하면 방화벽 규칙에 해당 범위 0.0.0.0/0(모든 IP 주소)가 소스로 사용됩니다. Dataproc VM에 외부 IP 주소가 있으면 인터넷 어디에서든 트래픽을 허용할 수 있습니다. 따라서 요구를 충족하고 클러스터를 보호할 수 있도록 가능한 한 소스 범위를 좁게 정의해야 합니다.

  • 규칙의 대상은 클러스터 VM을 식별해야 합니다. 대상이 VPC 네트워크의 모든 VM이거나, 대상 태그 또는 대상 서비스 계정을 사용하여 대상 VM을 식별할 수 있습니다.

  • 규칙에는 TCP(모든 포트, 0~65535), UDP(모든 포트, 0~65535), ICMP의 프로토콜 및 포트가 포함되어야 합니다.

    gcloud compute firewall-rules create my-subnet-firewall-rule --allow tcp
    
    특정 소스 범위로 인그레스 허용 방화벽 규칙을 지정하거나 네트워크 태그 또는 서비스 계정으로 Google Cloud VM을 식별하는 것이 가장 좋습니다. 자세한 내용은 방화벽 규칙 개요를 참조하세요.

소스 IP 범위를 설정하는 방법

Google Cloud Console에서 또는 gcloud 명령줄 도구를 사용하여 방화벽 규칙을 만들 때 소스 IP 범위를 설정할 수 있습니다.

콘솔

Cloud Console 방화벽 규칙 만들기 페이지를 사용하여 소스 IP 범위가 지정된 방화벽 규칙을 만듭니다.

gcloud 명령어

gcloud compute firewall-rules create 명령어를 사용하여 소스 IP 범위가 지정된 방화벽 규칙을 만듭니다.

gcloud compute firewall-rules create "tcp-rule" --allow tcp:80 \
    --source-ranges="10.0.0.0/22,10.0.0.0/14" \
    --description="Narrowing TCP traffic"

Google Cloud Console VM 인스턴스→네트워크 세부정보 페이지에는 Dataproc 클러스터의 인스턴스에 적용 가능한 방화벽 규칙이 표시되어 있습니다. 기본 네트워크를 사용하는 경우 10.128.0.0/9 소스 범위의 인그레스를 허용하는 미리 입력된 default-allow-internal 방화벽 규칙이 포함됩니다. 미리 입력된 이 방화벽 규칙을 삭제하거나 기본 네트워크 이외의 VPC 네트워크를 사용할 경우, 인그레스 트래픽이 묵시적 거부 인그레스 규칙에 의해 차단됩니다. 이 경우 클러스터에 있는 인스턴스의 모든 TCP 및 UDP 포트에 대한 트래픽을 허용하는 인그레스 허용 방화벽 규칙을 만들어야 합니다. 네트워크 또는 보안 관리자를 위한 자세한 내용은 방화벽 규칙 개요를 참조하세요.

VPC 네트워크 만들기

Dataproc 클러스터를 만들 때 자체 Virtual Private Cloud(VPC) 네트워크를 지정할 수 있습니다. 이렇게 하려면 먼저 방화벽 규칙을 사용하여 VPC 네트워크를 만들어야 합니다. 그런 다음 클러스터를 만들 때 네트워크를 클러스터와 연결합니다.

VPC 네트워크 만들기

Cloud Console에서 또는 gcloud compute networks create 명령줄 도구를 사용하여 VPC 네트워크를 만들 수 있습니다. 자동 모드 VPC 네트워크 또는 커스텀 모드 VPC 네트워크를 만들 수 있습니다(아래부터는 각각 '자동' 및 '커스텀' 네트워크라고 부름). 자동 네트워크는 각 Compute Engine 리전의 서브넷을 사용하여 자동으로 구성됩니다. 커스텀 네트워크는 서브넷을 사용하여 자동으로 구성되지 않습니다. 따라서 커스텀 네트워크를 만들 때, 하나 이상의 Compute Engine 리전에 하나 이상의 서브넷을 만들어야 합니다. 자세한 내용은 VPC 네트워크 유형을 참조하세요.

Cloud Console에서 자동 네트워크와 커스텀 네트워크를 만들 때 이용 가능한 옵션에 대해 살펴보겠습니다.

자동

아래의 Cloud Console 스크린샷은 서브네트워크(자동 모드 VPC 네트워크) 자동 만들기를 위해 채워지는 Cloud Console 입력란을 보여줍니다. 방화벽 규칙을 1개 이상 선택해야 합니다. 네트워크의 VM 인스턴스 간에 완전한 내부 IP 네트워킹 액세스를 사용 설정하려면 udp:0-65535;tcp:0-65535;icmp 포트를 여는 network-name-allow-internal 규칙을 선택해야 합니다. 또한 표준 SSH 포트 22를 여는 network-name-allow-ssh 규칙을 선택하여 네트워크에 대한 SSH 연결을 허용할 수 있습니다.

맞춤

네트워크를 만들 때 커스텀 서브네트워크를 선택하는 경우(커스텀 모드 VPC 네트워크) 각 서브네트워크의 리전 및 비공개 IP 주소 범위를 지정해야 합니다. 네트워크의 VM 간에 완전한 내부 액세스를 사용 설정하려면 10.0.0.0/8의 IP 주소 범위(또는 해당하는 경우 10.128.0.0/16 같은 보다 제한적인 범위)를 지정해야 합니다.

네트워크가 만들어진 커스텀 서브네트워크의 방화벽 규칙을 제공합니다. 다시 말해 네트워크의 VM 간에 완전한 네트워크 액세스를 사용 설정하려면 udp:0-65535;tcp:0-65535;icmp 포트를 여는 방화벽 규칙을 선택하거나 만드세요(아래 Cloud Console 스크린샷 참조).

VPC 네트워크를 사용하는 클러스터 만들기

gcloud 명령어

‑‑network 또는 ‑‑subnet 플래그와 함께 Cloud SDK gcloud dataproc clusters create 명령어를 사용하여 자동 또는 커스텀 서브네트워크를 사용하는 클러스터를 만들 수 있습니다.

‑‑network 플래그 사용
‑‑network 플래그를 사용하여 클러스터가 만들어지는 리전의 네트워크와 이름이 동일한 서브네트워크를 사용하는 클러스터를 만들 수 있습니다.

gcloud dataproc clusters create my-cluster \
    --network network-name \
    --region=region \
    ... other args ...

예를 들어 자동 네트워크는 각 리전에서 자동 네트워크와 이름이 동일한 서브넷으로 만들어지므로, 자동 네트워크 이름을 ‑‑network 플래그(‑‑network auto-net-name)로 전달하여 클러스터의 리전에서 자동 서브네트워크를 사용하는 클러스터를 만들 수 있습니다.

‑‑subnet 플래그 사용
‑‑subnet 플래그를 사용하여 클러스터가 만들어지는 리전에서 자동 또는 커스텀 서브네트워크를 사용하는 클러스터를 만들 수 있습니다. 클러스터에서 사용하는 서브넷의 전체 리소스 경로를 ‑‑subnet 플래그로 전달해야 합니다.

gcloud dataproc clusters create cluster-name \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

REST API

clusters.create 요청의 일부로 networkUri 또는 subnetworkUri GceClusterConfig 필드를 지정할 수 있습니다.

예시

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b"
    },
    ...

콘솔

VM이 네트워크의 비공개 IP 주소 범위에 완전히 액세스할 수 있도록 허용하는 방화벽 규칙을 사용하여 VPC 네트워크를 만든 후에는 Cloud Console의 클러스터 만들기 페이지에서 클러스터를 만들 수 있습니다. 클러스터 맞춤설정 패널의 네트워크 구성 섹션에서 기본 네트워크를 선택합니다. 네트워크를 선택한 후 서브네트워크 선택기에 클러스터를 만들기 위해 선택한 리전에서 이용 가능한 서브네트워크가 표시됩니다.

다른 프로젝트에서 VPC 네트워크를 사용하는 클러스터 만들기

Dataproc 클러스터는 서비스 프로젝트로 참여하여 공유 VPC 네트워크를 사용할 수 있습니다. 공유 VPC를 사용하면 공유 VPC 네트워크가 호스트 프로젝트라는 다른 프로젝트에서 정의됩니다. 호스트 프로젝트는 연결된 서비스 프로젝트의 IAM 구성원이 사용할 수 있습니다. 배경 정보는 공유 VPC 개요를 참조하세요.

프로젝트에서 Dataproc 클러스터를 만듭니다. 공유 VPC 시나리오에서 이 프로젝트가 서비스 프로젝트가 됩니다. 이 프로젝트의 프로젝트 번호를 참조해야 합니다. 다음은 프로젝트 번호를 찾는 한 가지 방법입니다.

  1. IAM 및 관리자 페이지 설정 탭으로 이동합니다.

  2. 페이지 상단의 프로젝트 드롭다운 목록에서 Dataproc 클러스터를 만드는 데 사용할 프로젝트를 선택합니다.

  3. 프로젝트 번호를 확인합니다.

공유 VPC 관리자인 IAM 구성원이 다음 단계를 수행해야 합니다. 배경 정보는 공유 VPC 설정 지침을 참조하세요.

  1. 공유 VPC 호스트 프로젝트가 사용 설정되었는지 확인합니다.

  2. Dataproc 프로젝트를 호스트 프로젝트에 연결합니다.

  3. 호스트 프로젝트의 네트워크 사용자 역할을 갖도록 다음 서비스 계정 중 하나 또는 모두를 구성합니다. Dataproc에서 첫 번째 서비스 계정을 사용하도록 시도하고 필요한 경우 Google API 서비스 계정으로 돌아갑니다.

    • service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
    • Google API 서비스 계정, [project-number]@cloudservices.gserviceaccount.com
  4. IAM 및 관리자 페이지의 IAM 탭으로 이동합니다.

  5. 페이지 상단의 프로젝트 드롭다운 목록을 사용하여 호스트 프로젝트를 선택합니다.

  6. 추가를 클릭합니다. 다음 단계를 반복하여 두 서비스 계정을 추가합니다.

    1. 서비스 계정을 구성원 필드에 추가합니다.

    2. 역할 메뉴에서 Compute Engine > Compute 네트워크 사용자를 선택합니다.

    3. 추가를 클릭합니다.

두 서비스 계정 모두 호스트 프로젝트의 네트워크 사용자 역할이 있으면, VPC 네트워크를 사용하는 클러스터를 만들 수 있습니다.

내부 IP 주소만 사용하여 Dataproc 클러스터 만들기

공용 인터넷에서 격리된 Dataproc 클러스터를 만들 수 있습니다. 이 클러스터의 VM 인스턴스는 비공개 IP 서브네트워크(VM 인스턴스에 공개 IP 주소가 없음)를 통해 통신합니다. 이렇게 하려면 클러스터의 서브네트워크에 비공개 Google 액세스가 사용 설정되어 있어야 합니다. 그래야 클러스터 노드가 내부 IP에서 Cloud Storage와 같은 Google API 및 서비스에 액세스할 수 있습니다.

gcloud 명령어

‑‑no-address 플래그와 함께 gcloud dataproc clusters create 명령어를 사용하면 내부 IP 주소로만 Dataproc 클러스터를 만들 수 있습니다.

‑‑no-address 및 ‑‑network 플래그 사용
‑‑network 플래그와 함께 ‑‑no-address 플래그를 사용하여 클러스터가 만들어지는 리전의 네트워크와 이름이 동일한 서브네트워크를 사용하는 클러스터를 만들 수 있습니다.

gcloud dataproc clusters create my-cluster \
    --no-address \
    --network network-name \
    --region=region \
    ... other args ...

예를 들어 자동 네트워크는 각 리전에서 자동 네트워크와 이름이 동일한 서브넷으로 만들어지므로, 자동 네트워크 이름을 ‑‑network 플래그(‑‑network auto-net-name)로 전달하여 클러스터의 리전에서 자동 서브네트워크를 사용하는 클러스터를 만들 수 있습니다.

‑‑no-address 및 ‑‑subnet 플래그 사용
‑‑subnet 플래그와 함께 ‑‑no-address 플래그를 사용하여 클러스터가 만들어지는 리전에서 자동 또는 커스텀 서브네트워크를 사용하는 클러스터를 만들 수 있습니다. 클러스터에서 사용하는 서브넷의 전체 리소스 경로를 ‑‑subnet 플래그로 전달해야 합니다.

gcloud dataproc clusters create cluster-name \
    --no-address \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

REST API

clusters.create 요청의 일부로 GceClusterConfig internalIpOnly 필드를 'true'로 설정하여 내부 IP 주소만 사용 설정할 수 있습니다.

예시

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b",
      "internalIpOnly": true
    },
    ...

Console

Cloud Console의 Dataproc 클러스터 만들기 페이지에서 사용 설정된 비공개 Google 액세스로 Dataproc 클러스터를 만들 수 있습니다. 클러스터에 이 기능을 사용 설정하려면 클러스터 맞춤설정 패널에서 내부 IP만 클릭합니다.

기본적으로 내부 IP 전용 클러스터는 인터넷에 액세스할 수 없으므로 인터넷에서 종속 항목을 다운로드하는 작업(예: Maven Central에서 Spark 종속 항목 패키지 다운로드)이 실패합니다. 다음과 같은 방법으로 문제를 방지할 수 있습니다.

  1. Cloud NAT를 사용하여 인터넷에 대한 클러스터 액세스 권한을 사용 설정합니다.

  2. 종속 항목이 포함된 커스텀 이미지를 만듭니다(예: /usr/lib/spark/jars/의 Spark 종속 항목 패키지).

  3. 종속 항목을 Cloud Storage 버킷에 업로드한 다음 초기화 작업을 사용하여 클러스터 생성 중에 버킷의 종속 항목을 다운로드합니다.

Dataproc 및 VPC-SC 네트워크

관리자는 VPC 서비스 제어를 사용하여 Google 관리형 서비스 리소스 주위에 보안 경계를 정의하여 해당 서비스 간의 통신을 제어할 수 있습니다.

Dataproc 클러스터에서 VPC-SC 네트워크를 사용할 때는 다음 제한사항과 전략에 유의하세요.