Configuración de la red de un clúster de Dataproc

Descripción general

Las instancias de máquina virtual de Compute Engine en un clúster de Dataproc que constan de VM principales y de trabajador deben poder comunicarse entre sí mediante ICMP, TCP (todos los puertos) y UDP (todos los puertos).

Requisito de la regla de firewall

Dataproc requiere que crees una regla de firewall de permiso de entrada con las siguientes características:

  • El parámetro fuentes especifica rangos de direcciones IP como fuentes para paquetes. En Dataproc, todas las VM del clúster deben poder comunicarse entre sí. Puedes identificar las VM en el clúster mediante la red de VPC, las etiquetas de origen o las cuentas de servicio conectadas a las VM. Si omites una especificación de rango de IP de origen, la regla de firewall usará el rango 0.0.0.0/0 (cualquier dirección IP) como el origen. Si las VM de Dataproc tienen direcciones IP externas, pueden aceptar tráfico desde cualquier lugar de Internet. Por lo tanto, debes definir la fuente para que sea lo más estrecha posible a fin de satisfacer tus necesidades y proteger el clúster.

  • El objetivo para la regla debe identificar las VM del clúster. El destino pueden ser todas las VM de la red de VPC o puedes identificar VM de destino específicas mediante etiquetas o cuentas de servicio de objetivo.

  • La regla debe incluir los siguientes protocolos y puertos: TCP (todos los puertos, de 0 a 65535), UDP (todos los puertos, de 0 a 65535) e ICMP. Dataproc usa servicios que se ejecutan en varios puertos y especificar todos los puertos ayudará a que los servicios se ejecuten de forma correcta.

Descripción general de las reglas de firewall predeterminadas de Dataproc

Dataproc usa la red de VPC predeterminada. Si no se especifica una red de VPC predeterminada, debes crear una VPC personalizada. Para crear una red de VPC personalizada, puede crear una red de VPC en modo automático o personalizado.

Si usas la red predeterminada, incluye una regla de firewall default-allow-internal prepropagada que permite la entrada desde el El rango de origen 10.128.0.0/9 de todas VM en la red de VPC (consulta el Requisito de regla de firewall para obtener información sobre cómo crear una regla de firewall más restrictiva). Si borras esta regla de firewall prepropagada o usas una red de VPC distinta de la red predeterminada, el tráfico de entrada se bloquea mediante la regla de denegación de entrada implícita. En esas situaciones, debes crear una regla de firewall de permiso de entrada que permita el tráfico a todos los puertos TCP y UDP de las instancias en el clúster. El administrador de red o seguridad puede consultar la descripción general de las reglas de firewall para obtener más información.

Diagnostica las reglas de firewall de Dataproc

Para auditar los paquetes que no se procesaron con reglas de firewall de mayor prioridad, puedes crear dos reglas de firewall de prioridad baja (65534). A diferencia de las reglas de firewall implícitas, puedes habilitar el registro de reglas de firewall en cada una de estas reglas de prioridad baja:

  1. Una regla de denegación de entrada (origen 0.0.0.0/0, todos los protocolos y todos los destinos en la red de VPC)

  2. Una regla de denegación de salida (destinos 0.0.0.0/0, todos los protocolos y todos los objetivos en la red de VPC)

Con estas reglas de prioridad baja y el registro de reglas de firewall, puedes registrar paquetes que no se procesaron por reglas de firewall de mayor prioridad (y, posiblemente, más específicas). Estas dos reglas de prioridad baja también se alinean con las prácticas recomendadas de seguridad mediante la implementación de una estrategia de “disminución de paquetes final”.

Puedes examinar los registros de reglas de firewall de estas reglas para determinar si necesitas crear o modificar reglas de mayor prioridad a fin de permitir paquetes. Por ejemplo, si se descartan paquetes enviados entre instancias de clústeres de Dataproc, esto puede indicar que debes configurar las reglas de firewall de Dataproc.

Crea una red de VPC personalizada

Puedes especificar tu propia red de nube privada virtual (VPC) cuando creas un clúster de Dataproc. Para ello, primero debes crear una red de VPC con las reglas de firewall. Luego, cuando creas el clúster, asocia tu red con el clúster.

Crea una red de VPC

Puedes crear una red de VPC desde Cloud Console o mediante la herramienta de línea de comandos gcloud compute networks create. Puedes crear una red de VPC en modo automático o una red de VPC en modo personalizado (denominadas redes “automáticas” y “personalizadas”, respectivamente, a continuación). Una red automática se configura de forma automática con subredes en cada región de Compute Engine. Las redes personalizadas no se configuran de forma automática con subredes. Debes crear una o más subredes en una o más regiones de Compute Engine cuando crees la red personalizada. Para obtener más información, consulta Tipos de redes de VPC.

Veamos las opciones disponibles cuando creas una red automática y personalizada desde Cloud Console.

Automática

La captura de pantalla de Cloud Console, a continuación, muestra los campos de Cloud Console que se propagan para la creación automática de subredes (una red de VPC en modo automático). Tienes que seleccionar una o más reglas de firewall. Se debe seleccionar la regla network-name-allow-internal, que abre los puertos udp:0-65535;tcp:0-65535;icmp, para habilitar el acceso completo de red IP interna entre las instancias de VM en la red. También puedes seleccionar la regla network-name-allow-ssh para abrir el puerto SSH estándar 22 a fin de permitir conexiones SSH a la red.

Personalizado

Si eliges las subredes personalizadas cuando creas una red (una red de VPC en modo personalizado), debes especificar la región y el rango de direcciones IP privadas para cada subred. Para habilitar el acceso interno total entre las VM en la red, puedes especificar un rango de direcciones IP de 10.0.0.0/8 (o un rango más restringido, si fuera necesario, como 10.128.0.0/16).

Ten en cuenta que proporcionas las reglas de firewall para las subredes personalizadas después de crear la red. Para habilitar el acceso total a la red entre las VM de tu red, selecciona o crea una regla de firewall que abra los puertos udp:0-65535;tcp:0-65535;icmp (como se muestra en la captura de pantalla de Cloud Console a continuación).

Crea un clúster que use tu red de VPC

Comando de gcloud

Puedes usar el comando gcloud dataproc clusters create del SDK de Cloud con la marca ‑‑network o ‑‑subnet para crear un clúster que use una subred automática o personalizada.

Uso de la marca --network
Puedes usar la marca ‑‑network para crear un clúster que usará una subred con el mismo nombre que la red en la región donde se creará el clúster.

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

Por ejemplo, dado que las redes automáticas se crean con subredes en cada región con el mismo nombre que la red automática, puedes pasar el nombre de esta a la marca ‑‑network (‑‑network auto-net-name) para crear un clúster que usará la subred automática en la región del clúster.

Uso de la marca --subnet
Puedes usar la marca ‑‑subnet para crear un clúster que usará una subred automática o personalizada en la región donde se creará el clúster. Debes pasar la marca ‑‑subnet a la ruta completa del recurso de la subred que usará tu clúster.

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

API de REST

Puedes especificar el campo networkUri o subnetworkUri GceClusterConfig como parte de una solicitud clusters.create.

Ejemplo

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

Después de crear una red de VPC con reglas de firewall que permitan el acceso completo de las VM al rango de direcciones IP privadas de la red, puedes crear un clúster desde DataprocCree un clúster página en Cloud Console. Selecciona tu red principal en la sección Configuración de red, en el panel Personalizar clúster. Después de elegir la red, el selector de subred muestra las subredes disponibles en la región que seleccionaste para la creación del clúster.

Crear un clúster que use una red de VPC en otro proyecto

Un clúster de Dataproc puede usar una red de VPC compartida si participa como un proyecto de servicio. Con la VPC compartida, la red de la VPC compartida se define en un proyecto diferente, que se llama proyecto host. El proyecto host está disponible para su uso en proyectos de servicio adjuntos. Consulta Descripción general de la VPC compartida para obtener información de referencia.

Crearás tu clúster de Dataproc en un proyecto. En una situación de VPC compartida, este proyecto será un proyecto de servicio. Deberás hacer referencia al número del proyecto de este. Aquí te mostramos una manera de encontrar el número del proyecto:

  1. Dirígete a la pestaña Settings (Configuración) de la página IAM & Admin (IAM y Administración).

  2. En la lista desplegable de proyectos en la parte superior de la página, selecciona el proyecto que usarás para crear el clúster de Dataproc.

  3. Toma nota del número del proyecto:

Un principal con la función Administrador de VPC compartida debe realizar los siguientes pasos. Consulta las instrucciones para configurar la VPC compartida a fin de obtener información de referencia.

  1. Asegúrate de que se habilitó el proyecto host de la VPC compartida.

  2. Conecta el proyecto de Dataproc al proyecto host.

  3. Configura una o ambas de las siguientes cuentas de servicio a fin de tener la función Usuario de red para el proyecto host. Dataproc intentará usar la primera cuenta de servicio, recurriendo a la cuenta de servicio de las API de Google si es necesario.

  4. Dirígete a la pestaña IAM de la página IAM & Admin.

  5. Usa la lista desplegable del proyecto en la parte superior de la página para seleccionar el proyecto host.

  6. Haz clic en AGREGAR (ADD). Repite estos pasos para agregar ambas cuentas de servicio:

    1. Agrega la cuenta de servicio al campo Principales.

    2. En el menú Funciones (Roles), selecciona Compute Engine > Usuario de la red de Compute (Compute Network User).

    3. Haga clic en Agregar.

Una vez que ambas cuentas de servicio tengan la función de usuario de red para el proyecto host, puedes crear un clúster que use tu red de VPC.

Crea un clúster de Dataproc solo con direcciones IP internas

Puedes crear un clúster de Dataproc aislado de la Internet pública con instancias de VM que se comuniquen a través de una subred de IP privada (las instancias de VM no tendrán direcciones IP públicas). Para ello, la subred del clúster debe tener habilitado el acceso privado a Google a fin de permitirles a los nodos del clúster acceder a las API y los servicios de Google, como Cloud Storage, desde IP internas.

Comando de gcloud

Solo puedes crear un clúster de Dataproc con direcciones IP internas mediante el comando gcloud dataproc clusters create con la marca ‑‑no-address.

Uso de las marcas --no-address y --network
Usa la marca ‑‑no-address con la marca ‑‑network para crear un clúster que use una subred con el mismo nombre que la red en la región donde se creará el clúster.

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

Por ejemplo, dado que las redes automáticas se crean con subredes en cada región con el mismo nombre que la red automática, puedes pasar el nombre de esta a la marca ‑‑network (‑‑network auto-net-name) para crear un clúster que usará la subred automática en la región del clúster.

Uso de las marcas --no-address y --subnet
Usa la marca ‑‑no-address con las marcas ‑‑subnet para crear un clúster que use una subred automática o personalizada en la región donde se creará el clúster. Debes pasar la marca ‑‑subnet a la ruta completa del recurso de la subred que usará tu clúster.

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

API de REST

Puedes configurar el campo GceClusterConfig internalIpOnly como "verdadero" como parte de una solicitud clusters.create para habilitar solo las direcciones IP internas.

Ejemplo

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

Puedes crear un clúster de Dataproc con el Acceso privado a Google habilitado en la página Crear un clúster de Dataproc en Cloud Console. Haz clic en la IP interna solo en el panel Personalizar clúster para habilitar esta función en tu clúster.

Dado que, de forma predeterminada, los clústeres de solo IP interna no tienen acceso a Internet, los trabajos que descargan dependencias de Internet, por ejemplo, una descarga de paquetes de dependencias de Spark desde Maven Central, fallarán. Hay varias soluciones para evitar el problema:

  1. Usa Cloud NAT para habilitar el acceso al clúster a Internet.

  2. Crea una imagen personalizada que incluya las dependencias (por ejemplo, los paquetes de dependencias de Spark en /usr/lib/spark/jars/).

  3. Sube las dependencias a un bucket de Cloud Storage y, luego, usa una acción de inicialización para descargar las dependencias del bucket durante la creación del clúster.

Redes de Dataproc y VPC-SC

Los Controles del servicio de VPC permiten a los administradores definir un perímetro de seguridad alrededor de los recursos de los servicios administrados por Google para controlar la comunicación entre esos servicios.

Ten en cuenta las siguientes limitaciones y estrategias cuando uses redes de VPC-SC con clústeres de Dataproc: