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 sources especifica rangos de direcciones IP como orígenes 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 con 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 proveniente de cualquier parte de Internet. Por lo tanto, debes definir el origen para que sea lo más estrecho posible a fin de satisfacer tus necesidades y proteger tu clúster.

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

  • 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) y también ICMP. Dataproc usa los servicios que se ejecutan en varios puertos, por lo que especificar todos los puertos ayudará a que los servicios se ejecuten correctamente.

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, puedes 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 permita la entrada desde el rango de origen 10.128.0.0/9 de todas las VM en la red de VPC (consulta 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 esos casos, 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. Tu administrador de red o seguridad puede consultar la descripción general de las reglas de firewall para obtener más información.

Diagnostica reglas de firewall de Dataproc

Para auditar los paquetes que no procesaron las 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 (orígenes 0.0.0.0/0, todos los protocolos, todos los destinos de la red de VPC)

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

Con estas reglas de prioridad baja y el registro de reglas de firewall, puedes registrar paquetes que las reglas de firewall de mayor prioridad (y potencialmente más específicas) no procesaron. 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 “paquetes de descarte final”.

Puedes examinar los registros de reglas de firewall para estas reglas a fin de determinar si necesitas crear o modificar reglas de mayor prioridad a fin de permitir paquetes. Por ejemplo, si se descartan los paquetes enviados entre las instancias de clústeres de Dataproc, esto puede indicar que se deben configurar tus 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 con las subredes en cada región de Compute Engine de manera automática. Las redes personalizadas no se configuran de forma automática con las subredes; debes crear una o más subredes en una o más regiones de Compute Engine cuando creas 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 que las VM tengan acceso completo al rango de direcciones IP privadas de la red, puedes crear un clúster desde la página Crea un clúster de Dataproc 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 subredes muestra las subredes disponibles en la región que seleccionaste para la creación del clúster.

Crea 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 conectados. Consulta la 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 de administrador de la 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.

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

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

  2. Crea una imagen personalizada que incluya las dependencias (por ejemplo, paquetes de dependencia 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: