Dataproc 클러스터 네트워크 구성

이 페이지에서는 Dataproc 클러스터 네트워크 구성 요구사항 및 옵션에 대해 설명합니다.

Dataproc 연결 요구사항

Dataproc 클러스터는 Google API 및 기타 리소스에 안전하게 액세스하기 위해 경로 및 방화벽 요구사항을 충족하는 VPC 네트워크에 있어야 합니다.

경로 요구사항

클러스터 VM에서 실행되는 Dataproc 에이전트는 작업 및 보고 상태를 가져오기 위해 Dataproc 제어 API에 액세스할 수 있도록 인터넷 경로가 필요합니다. 생성된 VPC 네트워크에는 인터넷에 대한 시스템 생성 기본 경로가 포함됩니다. 인터넷에 대한 기본 경로를 삭제하지 않는 것이 좋습니다. 방화벽을 사용하여 네트워크 액세스를 제어하세요. 내부 IP 전용 클러스터에서도 Dataproc 제어 API 및 기타 Google 서비스(예: Cloud Storage)에 액세스하기 위해 인터넷에 대한 이 기본 경로가 필요하지만 해당 트래픽은 Google 데이터 센터를 벗어나지 않습니다.

방화벽 요구사항

Dataproc 클러스터 가상 머신(VM)은 ICMP, TCP(모든 포트), UDP(모든 포트) 프로토콜을 사용하여 서로 통신할 수 있어야 합니다.

default VPC 네트워크의 default-allow-internal 방화벽 규칙은 Dataproc 클러스터 연결 요구사항을 충족하고 다음과 같이 VPC 네트워크에 있는 모든 VM의 10.128.0.0/9 소스 범위에서 인그레스를 허용합니다.

규칙 네트워크 방향 우선순위 소스 범위 프로토콜:포트
default-allow-internal default 수신 65534 10.128.0.0/9 tcp:0-65535,udp:0-65535,icmp
  • default-allow-internal 방화벽 규칙을 삭제하면 default 네트워크의 인그레스 트래픽이 암시적 인그레스 거부 규칙에 의해 차단됩니다.

  • default-allow-internal 방화벽 규칙을 삭제하거나 default VPC 네트워크를 사용하지 않는 경우 Dataproc 연결 요구사항을 충족하는 자체 규칙을 만들어 클러스터의 VPC 네트워크에 적용해야 합니다.

권장사항: 소스 IP 범위를 사용하거나 네트워크 태그 또는 서비스 계정을 기준으로 클러스터 VM을 식별하여 클러스터 VM 사이에서만 인그레스 연결을 허용하는 클러스터 VPC 네트워크에 대한 인그레스 방화벽 규칙을 만듭니다.

인그레스 방화벽 규칙 만들기

사용자, 네트워크 또는 보안 관리자가 Dataproc 클러스터 VPC 네트워크에 적용할 인그레스 방화벽 규칙을 만드는 경우 다음 특성이 있어야 합니다.

  • sources 매개변수는 패킷의 소스를 지정합니다. 모든 Dataproc 클러스터 VM이 서로 통신할 수 있어야 합니다. IP 주소 범위 또는 VM과 연결된 소스 태그나 서비스 계정을 기준으로 클러스터에 있는 VM을 식별할 수 있습니다.

  • 규칙의 대상은 클러스터 VM을 식별해야 합니다. 대상이 VPC 네트워크에 있는 모든 VM일 수도 있고, IP 주소 범위, 대상 태그, 대상 서비스 계정에 따라 VM을 식별할 수도 있습니다.

  • 규칙에 다음 프로토콜 및 포트가 포함되어야 합니다.

    • TCP(모든 포트, 0~65535)
    • UDP(모든 포트, 0~65535)
    • ICMP

    Dataproc는 여러 포트에서 실행되는 서비스를 사용합니다. 모든 포트를 지정하면 서비스가 성공적으로 실행됩니다.

VPC 방화벽 규칙 진단

우선순위가 높은 방화벽 규칙으로 처리되지 않은 패킷을 감사하려면 우선순위가 낮은(65534) 거부 방화벽 규칙을 두 개 만들면 됩니다. 묵시적인 방화벽 규칙과 달리 우선순위가 낮은 각 규칙에서 방화벽 규칙 로깅을 사용 설정할 수 있습니다.

  1. 인그레스 거부 규칙(소스 0.0.0.0/0, 모든 프로토콜, VPC 네트워크의 모든 대상)

  2. 이그레스 거부 규칙(대상 0.0.0.0/0, 모든 프로토콜, VPC 네트워크의 모든 대상)

  • 이와 같이 우선순위가 낮은 규칙과 방화벽 규칙 로깅을 사용하면 더 높은 우선순위(및 잠재적으로 더 구체적인) 방화벽 규칙으로 처리되지 않는 패킷을 로깅할 수 있습니다. 이 두 가지 낮은 우선순위 규칙은 '최종 삭제 패킷' 전략을 구현하여 보안 권장사항을 준수합니다.

  • 이러한 규칙의 방화벽 규칙 로그를 검사하여 패킷이 허용되도록 우선순위가 더 높은 규칙을 만들거나 수정해야 하는지 확인합니다. 예를 들어 Dataproc 클러스터 VM 간에 전송된 패킷이 삭제된 경우 이는 방화벽 규칙을 조정해야 한다는 의미일 수 있습니다.

VPC 네트워크 만들기

default VPC 네트워크를 사용하는 대신 자체 자동 모드 또는 커스텀 VPC 네트워크를 만들 수 있습니다. 클러스터를 만들 때 네트워크를 클러스터와 연결합니다.

Assured Workloads 환경: 규정 준수를 위해 Assured Workloads 환경을 사용할 때는 클러스터, VPC 네트워크, Cloud Storage 버킷이 Assured Workloads 환경 내에 포함되어야 합니다.

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

콘솔

클러스터 맞춤설정 패널의 네트워크 구성 섹션에서 네트워크를 선택합니다. 네트워크를 선택한 후 서브네트워크 선택기에 클러스터에 선택한 리전에서 사용할 수 있는 서브네트워크가 표시됩니다.

Google Cloud CLI

gcloud dataproc clusters create‑‑network 또는 ‑‑subnet 플래그와 함께 사용하여 네트워크의 서브넷에 클러스터를 만듭니다. ‐‐network 플래그를 사용하면 클러스터는 클러스터가 생성된 리전에 지정된 네트워크와 이름이 동일한 서브네트워크를 사용합니다.

--network example. 자동 네트워크는 각 리전의 서브넷으로 생성되고 각 서브넷에 네트워크 이름이 지정되므로 자동 모드 VPC 네트워크 이름을 ‑‑network 플래그로 전달할 수 있습니다. 클러스터는 ‐‐region 플래그로 지정된 리전에서 자동 모드 VPC 서브네트워크를 사용합니다.

gcloud dataproc clusters create CLUSTER_NAME \
    --network NETWORK_NAME \
    --region=REGION \
    ... other args ...

--subnet example. ‑‑subnet 플래그를 사용하여 클러스터 리전에서 자동 모드 또는 커스텀 VPC 네트워크 서브넷을 사용하는 클러스터를 만들 수 있습니다. 서브넷의 전체 리소스 경로를 지정합니다.

gcloud dataproc clusters create CLUSTER_NAMEW \
    --subnet projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
    --region=REGION \
    ... other args ...

REST API

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

예시

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "PROJECT_ID",
  "clusterName": CLUSTER_NAME,
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": SUBNET_NAME,
    },
    ...

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

Dataproc 클러스터는 호스트 프로젝트에 정의된 공유 VPC 네트워크를 사용할 수 있습니다. Dataproc 클러스터가 생성된 프로젝트를 서비스 프로젝트라고 부릅니다.

  1. Dataproc 클러스터 프로젝트 번호를 찾습니다.

    1. Google Cloud 콘솔에서 IAM 및 관리자 설정 페이지를 엽니다. Dataproc 클러스터를 만들 프로젝트를 선택합니다. 프로젝트 ID를 복사합니다.
  2. 공유 VPC 관리자 역할이 있는 주 구성원은 다음 단계를 수행해야 합니다. 배경 정보는 공유 VPC 설정 지침을 참조하세요.

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

    2. 호스트 프로젝트에 Dataproc 클러스터 포함 프로젝트를 연결합니다.

    3. 호스트 프로젝트의 네트워크 사용자 역할을 갖도록 Dataproc 서비스 에이전트 서비스 계정(service-[project-number]@dataproc-accounts.iam.gserviceaccount.com)을 구성합니다.

      1. Google Cloud 콘솔에서 IAM 및 관리자 페이지를 엽니다.

      2. 프로젝트 선택기를 사용하여 새 호스트 프로젝트를 선택합니다.

      3. 액세스 권한 부여를 클릭합니다.

      4. 액세스 권한 부여 양식을 작성합니다.

        1. 주 구성원 추가: 서비스 계정을 입력합니다.

        2. 역할 할당: 필터 상자에 "Compute Network"를 삽입한 후 Compute Network 사용자 역할을 선택합니다.

        3. 저장을 클릭합니다.

  3. 서비스 계정에 호스트 프로젝트에 대한 Network User 역할이 지정된 후 공유 VPC 네트워크를 사용하는 클러스터를 만듭니다.

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

Dataproc 클러스터는 호스트 프로젝트에 정의된 공유 VPC 서브네트워크를 사용할 수 있습니다. Dataproc 클러스터가 생성된 프로젝트를 서비스 프로젝트라고 부릅니다.

  1. Dataproc 클러스터 프로젝트 번호를 찾습니다.

    1. Google Cloud 콘솔에서 IAM 및 관리자 설정 페이지를 엽니다. Dataproc 클러스터를 만들 프로젝트를 선택합니다. 프로젝트 ID를 복사합니다.
  2. 공유 VPC 관리자 역할이 있는 주 구성원은 다음 단계를 수행해야 합니다. 배경 정보는 공유 VPC 설정 지침을 참조하세요.

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

    2. 호스트 프로젝트에 Dataproc 클러스터 포함 프로젝트를 연결합니다.

    3. 호스트 프로젝트의 네트워크 사용자 역할을 갖도록 Dataproc 서비스 에이전트 서비스 계정(service-[project-number]@dataproc-accounts.iam.gserviceaccount.com)을 구성합니다.

      1. Google Cloud 콘솔에서 VPC 네트워크 페이지를 엽니다.

      2. 프로젝트 선택기를 사용하여 호스트 프로젝트를 선택합니다.

      3. Dataproc 클러스터에 사용되는 서브네트워크가 포함된 네트워크를 클릭합니다.

      4. VPC 네트워크 세부정보 페이지에서 클러스터에 사용할 서브네트워크 이름 옆의 체크박스를 클릭합니다.

      5. 정보 패널이 열리지 않았으면 정보 패널 표시를 클릭합니다.

      6. 각 서비스 계정에 대해 다음 단계를 수행합니다.

        1. 정보 패널에서 주 구성원 추가를 클릭합니다.

        2. 액세스 권한 부여 양식을 작성합니다.

          1. 주 구성원 추가: 서비스 계정을 입력합니다.

          2. 역할 할당: 필터 상자에 "Compute Network"를 삽입한 후 Compute Network 사용자 역할을 선택합니다.

          3. 저장을 클릭합니다.

  3. 서비스 계정에 호스트 프로젝트에 대한 Network User 역할이 지정된 후 공유 VPC 서브네트워크를 사용하는 클러스터를 만듭니다.

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

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

콘솔

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

gcloud CLI

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

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

gcloud dataproc clusters create CLUSTER_NAME \
    --no-address \
    --network NETWORK_NAME \
    --region=REGION \
    ... other args ...

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

‑‑no-address 및 ‑‑subnet 플래그 사용: ‑‑no-address 플래그와 함께 ‑‑subnet 플래그를 사용하여 클러스터가 생성되는 리전에서 자동 또는 커스텀 서브네트워크를 사용하는 클러스터를 만들 수 있습니다. ‑‑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
    },
    ...

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

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

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

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

Dataproc 및 VPC 서비스 제어 네트워크

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

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