Dataproc 클러스터 네트워크 구성

Dataproc 연결 요구사항

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

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

규칙 네트워크 Direction 우선순위 소스 범위 프로토콜:포트
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 네트워크에 적용해야 합니다.

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

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

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

  • 규칙의 대상은 클러스터 VM을 식별해야 합니다. 대상이 VPC 네트워크에 있는 모든 VM이거나 대상 태그나 대상 서비스 계정을 사용하여 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 클러스터 인스턴스 간에 전송된 패킷이 삭제된 경우 이는 방화벽 규칙을 조정해야 한다는 의미일 수 있습니다.

VPC 네트워크 만들기

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

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

gcloud 명령어

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

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

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

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

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"
    },
    ...

Console

클러스터 맞춤설정 패널의 네트워크 구성 섹션에서 네트워크를 선택합니다. 네트워크를 선택한 후 서브네트워크 선택기에 클러스터를 만들기 위해 선택한 리전에서 이용 가능한 서브네트워크가 표시됩니다.

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

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

프로젝트에서 Dataproc 클러스터를 만듭니다. 공유 VPC 시나리오에서 프로젝트는 서비스 프로젝트가 됩니다. 프로젝트 번호를 참조해야 합니다. 프로젝트 번호를 찾으려면 다음 안내를 따르세요.

  1. Cloud Console에서 IAM 및 관리자 설정 페이지를 엽니다. Dataproc 클러스터를 만들 프로젝트를 선택하고 프로젝트 ID를 복사합니다.

공유 VPC 관리자 역할이 있는 주 구성원은 다음 단계를 수행해야 합니다. 배경 정보는 공유 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 flag로 전달하여 클러스터의 리전에서 자동 서브네트워크를 사용하는 클러스터를 만들 수 있습니다.

‑‑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 네트워크를 사용할 때는 다음 제한사항과 전략에 유의하세요.