Configuration réseau des clusters Managed Service pour Apache Spark

Description : Comprendre la configuration réseau d'un cluster Dataproc. Implémenter des routes VPC, des règles de pare-feu, l'accès privé à Google et un VPC partagé pour des déploiements sécurisés utilisant uniquement des adresses IP internes

Cette page décrit les exigences et les options de configuration réseau des clusters Managed Service pour Apache Spark.

Exigences de connectivité de Managed Service pour Apache Spark

Votre cluster Managed Service pour Apache Spark doit se trouver dans un réseau cloud privé virtuel qui répond aux exigences de routage et de pare-feu pour accéder de manière sécurisée aux API Google et à d'autres ressources.

Exigences de routage

Pour établir la communication entre l'agent Managed Service pour Apache Spark exécuté sur les VM du cluster et l'API de contrôle Dataproc, le réseau VPC du cluster doit disposer d'une route vers la passerelle Internet. Cette opération est également requise pour les clusters d'adresses IP internes uniquement.

Par défaut, les clusters de version d'image Managed Service pour Apache Spark 2.2 et versions ultérieures provisionnent des VM avec des adresses IP internes uniquement. Managed Service pour Apache Spark active automatiquement l'accès privé à Google sur le sous-réseau du cluster pour permettre aux VM du cluster disposant d'adresses IP internes d'accéder aux Google APIs et services à l'aide d'une route par défaut générée par le système vers la passerelle Internet par défaut.

Règle Type Plage d'adresses IP de destination Priorité Limites du champ d'application Prochain saut
default-route-[id] Statique 0.0.0.0/0 1000 - Passerelle Internet par défaut

L'accès privé à Google garantit que le trafic du cluster ne transite pas par l'Internet public et ne quitte pas les centres de données Google (voir l'exemple de diagramme de l'accès privé à Google).

Il n'est pas recommandé de supprimer la route par défaut vers la passerelle Internet. Si vous souhaitez contrôler l'accès réseau à Internet, utilisez plutôt des règles ou des stratégies de pare-feu.

Si vous avez supprimé la route par défaut vers la passerelle Internet, vous devez ajouter une route par défaut. La plage d'adresses IP de destination doit être 0.0.0.0/0, car les plages d'adresses IP de l'API de contrôle Dataproc ne sont pas statiques.

Exigences de pare-feu

Le réseau VPC de votre cluster Managed Service pour Apache Spark doit autoriser explicitement le trafic suivant :

  • Trafic initié depuis les VM du cluster Managed Service pour Apache Spark vers l'API de contrôle Dataproc et d'autres VM du cluster Managed Service pour Apache Spark. Ce trafic est autorisé par défaut par la règle implicite de sortie autorisée pour tous du réseau VPC. Si vous avez ajouté des règles de pare-feu de refus de sortie prioritaires, créez une règle de pare-feu d'autorisation de sortie.

  • Le trafic de réponse de l'API de contrôle Dataproc vers les VM du cluster Managed Service pour Apache Spark est autorisé par défaut, en raison de la nature avec état du pare-feu du réseau VPC.

  • Trafic reçu par les VM du cluster Managed Service pour Apache Spark depuis d'autres VM du cluster Managed Service pour Apache Spark. Ce trafic sera refusé par défaut par la règle de pare-feu implicite "Tout refuser" du réseau VPC. Vous devez créer une règle de pare-feu d'autorisation d'entrée.

Bonnes pratiques :

  • Utilisez des tags réseau pour les VM de votre cluster Managed Service pour Apache Spark afin de limiter l'applicabilité des règles de pare-feu requises aux VM du cluster Managed Service pour Apache Spark uniquement. Si vous n'utilisez pas de tags réseau, vous pouvez spécifier des cibles par le compte de service utilisé pour les VM du cluster. Sinon, vous pouvez configurer des règles de pare-feu pour qu'elles s'appliquent à toutes les VM du réseau VPC.
  • Pour sécuriser davantage l'accès au réseau et la connectivité, utilisez des tags sécurisés au lieu de tags réseau pour définir les sources et les cibles des règles de pare-feu.

Créer une règle de pare-feu d'autorisation d'entrée

Si vous ou votre administrateur réseau ou de sécurité créez une règle de pare-feu d'entrée à appliquer à un réseau VPC de cluster Managed Service pour Apache Spark, elle doit présenter les caractéristiques suivantes :

  • Le paramètre sources spécifie les sources des paquets. Toutes les VM du cluster Managed Service pour Apache Spark doivent pouvoir communiquer entre elles. Vous pouvez identifier les VM du cluster par plage d'adresses IP (la plage principale du sous-réseau du cluster Managed Service pour Apache Spark), par tags réseau ou par comptes de service associés aux VM.

  • Les cibles de la règle doivent identifier les VM du cluster. Les cibles peuvent être toutes les VM du réseau VPC, ou vous pouvez identifier les VM par tag réseau cible ou compte de service cible.

  • La règle doit inclure les protocoles et ports suivants :

    • TCP (tous les ports, de 0 à 65535)
    • UDP (tous les ports, de 0 à 65535)
    • ICMP

    Managed Service pour Apache Spark utilise des services qui s'exécutent sur plusieurs ports. La spécification de tous les ports permet aux services de s'exécuter correctement.

  • La priorité de la règle doit être supérieure à celle de toutes les règles de pare-feu de refus d'entrée qui s'appliquent aux mêmes sources et cibles.

Créer une règle de pare-feu d'autorisation de sortie

Si vous, votre administrateur réseau ou votre administrateur de sécurité créez une règle de pare-feu de sortie à appliquer à un réseau VPC de cluster Managed Service pour Apache Spark, elle doit présenter les caractéristiques suivantes :

  • Le paramètre destinations spécifie les destinations des paquets. Toutes les VM du cluster Managed Service pour Apache Spark doivent pouvoir initier du trafic entre elles et vers l'API de contrôle Dataproc. Étant donné que les adresses IP de l'API de contrôle ne sont pas statiques, la destination doit être spécifiée par la plage d'adresses IP 0.0.0.0/0.

  • Les cibles de la règle doivent identifier les VM du cluster. Les cibles peuvent être toutes les VM du réseau VPC, ou vous pouvez identifier les VM par tag réseau cible ou compte de service cible.

  • La règle doit inclure les protocoles et ports suivants :

    • TCP (tous les ports, de 0 à 65535)
    • UDP (tous les ports, de 0 à 65535)
    • ICMP

    Managed Service pour Apache Spark utilise des services qui s'exécutent sur plusieurs ports. La spécification de tous les ports permet aux services de s'exécuter correctement.

  • La priorité de la règle doit être supérieure à celle de toutes les règles de pare-feu de refus de sortie qui s'appliquent aux mêmes destinations et cibles.

Diagnostiquer les règles de pare-feu du réseau VPC

Pour auditer les paquets non traités par des règles de pare-feu de priorité plus élevée, vous pouvez créer les deux règles de pare-feu de refus de faible priorité (65534) suivantes. Contrairement aux règles de pare-feu implicites, vous pouvez activer la journalisation des règles de pare-feu pour chacune de ces règles de faible priorité :

  1. Une règle de refus d'entrée (sources 0.0.0.0/0, tous les protocoles, toutes les cibles du réseau VPC)

  2. Une règle de refus de sortie (destinations 0.0.0.0/0, tous les protocoles, toutes les cibles du réseau VPC)

  • Grâce à ces règles de faible priorité et à la journalisation des règles de pare-feu, vous pouvez consigner les paquets qui ne sont pas traités par des règles de pare-feu de priorité plus élevée et potentiellement plus spécifiques. Ces deux règles de faible priorité respectent également les bonnes pratiques de sécurité en mettant en œuvre une stratégie de "paquets supprimés" finale.

  • Examinez les journaux des règles de pare-feu pour déterminer si vous souhaitez créer ou modifier des règles de priorité plus élevée afin d'autoriser les paquets. Par exemple, si les paquets envoyés entre les VM du cluster Managed Service pour Apache Spark sont supprimés, cela peut indiquer que vos règles de pare-feu doivent être ajustées.

Créer un réseau VPC

Au lieu d'utiliser le réseau VPC default, vous pouvez créer votre propre réseau VPC en mode automatique ou personnalisé. Lorsque vous créez le cluster, vous l'associez à votre réseau.

Environnement Assured Workloads : lorsque vous utilisez un environnement Assured Workloads pour la conformité réglementaire, le cluster, son réseau VPC et ses buckets Cloud Storage doivent être contenus dans l'environnement Assured Workloads.

Créer un cluster utilisant votre réseau VPC

ConsoleGoogle Cloud

Pour configurer le réseau :

  1. Ouvrez la page Créer un cluster.
  2. Cliquez sur Configuration supplémentaire pour développer cette section.
  3. Modifiez la configuration du réseau.
  4. Dans le panneau qui s'ouvre, sélectionnez votre réseau et votre sous-réseau. La case Adresse IP interne uniquement est cochée par défaut.

gcloud CLI

Utilisez gcloud dataproc clusters create avec l'option ‑‑network ou ‑‑subnet pour créer un cluster sur un sous-réseau de votre réseau. Si vous utilisez l'option ‑‑network, le cluster utilisera un sous-réseau portant le même nom que le réseau spécifié dans la région où le cluster est créé.

--network example. Étant donné que les réseaux automatiques sont créés avec des sous-réseaux dans chaque région, et que chaque sous-réseau reçoit le nom du réseau, vous pouvez transmettre le nom du réseau VPC en mode automatique à l'option ‑‑network. Le cluster utilisera le sous-réseau VPC en mode automatique dans la région spécifiée avec l'option ‑‑region.

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

--subnet example. Vous pouvez utiliser l'option ‑‑subnet pour créer un cluster qui utilise un sous-réseau de réseau VPC en mode automatique ou personnalisé dans la région du cluster. Spécifiez le chemin d'accès complet à la ressource du sous-réseau.

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

API REST

Vous pouvez spécifier le champ networkUri ou subnetworkUri de la propriété GceClusterConfig dans le cadre d'une requête clusters.create.

Exemple

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

Créer un cluster utilisant un réseau VPC dans un autre projet

Un cluster Managed Service pour Apache Spark peut utiliser un réseau VPC partagé défini dans un projet hôte. Le projet dans lequel le cluster Managed Service pour Apache Spark est créé est appelé projet de service.

  1. Recherchez le numéro de projet du cluster Managed Service pour Apache Spark :

    1. Ouvrez la page Paramètres de IAM et administration dans la consoleGoogle Cloud . Sélectionnez le projet dans lequel vous allez créer le cluster Managed Service pour Apache Spark. Copiez l'ID du projet.
  2. Un compte principal doté du rôle Administrateur de VPC partagé doit procéder comme suit. Consultez les instructions de configuration du VPC partagé pour obtenir des informations générales.

    1. Assurez-vous que le projet hôte de VPC partagé est activé.

    2. Associez le projet contenant le cluster Managed Service pour Apache Spark au projet hôte.

    3. Configurez le compte de service de l'agent de service Managed Service pour Apache Spark (service-[project-number]@dataproc-accounts.) pour qu'il dispose du rôle Utilisateur de réseau pour le projet hôte :

      1. Ouvrez la page IAM et administration dans la console Google Cloud .

      2. Utilisez le sélecteur de projet pour sélectionner le nouveau projet hôte.

      3. Cliquez sur Accorder l'accès.

      4. Remplissez le formulaire "Accorder l'accès" :

        1. Ajouter des comptes principaux : saisissez le compte de service.

        2. Attribuer des rôles : saisissez "Réseau Compute" dans le champ de filtre, puis sélectionnez le rôle Utilisateur de réseau Compute.

        3. Cliquez sur Enregistrer.

  3. Une fois que le compte de service dispose du rôle Network User pour le projet hôte, créez un cluster qui utilise le réseau VPC partagé.

Créer un cluster qui utilise un sous-réseau VPC dans un autre projet

Un cluster Managed Service pour Apache Spark peut utiliser un sous-réseau VPC partagé défini dans un projet hôte. Le projet dans lequel le cluster Managed Service pour Apache Spark est créé est appelé projet de service.

  1. Recherchez le numéro de projet du cluster Managed Service pour Apache Spark :

    1. Ouvrez la page Paramètres de IAM et administration dans la consoleGoogle Cloud . Sélectionnez le projet dans lequel vous allez créer le cluster Managed Service pour Apache Spark. Copiez l'ID du projet.
  2. Un compte principal doté du rôle Administrateur de VPC partagé doit procéder comme suit. Consultez les instructions de configuration du VPC partagé pour obtenir des informations générales.

    1. Assurez-vous que le projet hôte de VPC partagé est activé.

    2. Associez le projet contenant le cluster Managed Service pour Apache Spark au projet hôte.

    3. Configurez le compte de service de l'agent de service Managed Service pour Apache Spark (service-[project-number]@dataproc-accounts.) pour qu'il dispose du rôle Utilisateur du réseau pour le projet hôte :

      1. Ouvrez la page Réseaux VPC dans la console Google Cloud .

      2. Utilisez le sélecteur de projet pour sélectionner le projet hôte.

      3. Cliquez sur le réseau contenant le sous-réseau que votre cluster Managed Service pour Apache Spark utilisera.

      4. Sur la page Détails du réseau VPC, cochez la case à côté du nom du sous-réseau que votre cluster utilisera.

      5. Si le panneau d'informations n'est pas ouvert, cliquez sur Afficher le panneau d'informations.

      6. Pour chaque compte de service, procédez comme suit :

        1. Dans le panneau d'informations, cliquez sur Ajouter un compte principal.

        2. Remplissez le formulaire "Accorder l'accès" :

          1. Ajouter des comptes principaux : saisissez le compte de service.

          2. Attribuer des rôles : saisissez "Réseau Compute" dans le champ de filtre, puis sélectionnez le rôle Utilisateur de réseau Compute.

          3. Cliquez sur Enregistrer.

  3. Une fois que le compte de service dispose du rôle Network User pour le projet hôte, créez un cluster qui utilise le sous-réseau du VPC partagé.

Créer un cluster avec adresse IP interne uniquement

Cette section s'applique aux clusters de version d'image antérieure à 2.2. Les VM de cluster avec des adresses IP internes uniquement sont activées par défaut lors de la création de clusters Managed Service pour Apache Spark avec des versions d'image 2.2 et ultérieures.

Vous pouvez utiliser la console Google Cloud , gcloud CLI ou l'API Dataproc pour créer un cluster avec des adresses IP internes uniquement. Notez que Managed Service pour Apache Spark active automatiquement l'accès privé à Google sur le sous-réseau régional du cluster lorsque l'option "Adresse IP interne uniquement" est activée pour autoriser les connexions aux API et services Google.

ConsoleGoogle Cloud

Pour configurer uniquement des adresses IP internes :

  1. Ouvrez la page Créer un cluster.
  2. Cliquez sur Configuration supplémentaire pour développer cette section.
  3. Modifiez la configuration du réseau.
  4. Dans le panneau qui s'ouvre, sélectionnez votre réseau et votre sous-réseau. Cochez la case Adresse IP interne uniquement.

gcloud CLI

Vous pouvez créer un cluster avec des adresses IP internes uniquement en utilisant la commande gcloud dataproc clusters create avec l'option ‑‑no-address.

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

Étant donné que les réseaux automatiques sont créés avec des sous-réseaux dans chaque région portant le même nom que le réseau automatique, vous pouvez transmettre le nom du réseau automatique à ‑‑network flag pour créer un cluster qui utilisera le sous-réseau automatique dans la région du cluster.

Vous pouvez également utiliser l'option ‑‑subnet pour créer un cluster qui utilisera un sous-réseau automatique ou personnalisé dans la région où le cluster sera créé. Transmettez l'option ‑‑subnet avec le chemin d'accès complet à la ressource du sous-réseau.

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

API REST

Vous pouvez utiliser le champ GceClusterConfig.internalIpOnly dans une requête clusters.create pour créer un cluster n'autorisant que les adresses IP internes.

Exemple :

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

Télécharger des dépendances avec des clusters internal-ip-only

Par défaut, les clusters avec adresse IP interne uniquement n'ont pas accès à Internet. Par conséquent, les jobs qui téléchargent des dépendances depuis Internet, tels que les jobs qui téléchargent des packages de dépendances Spark depuis Maven Central, échoueront. Il existe plusieurs solutions pour éviter ce problème :

  1. Utilisez Cloud NAT pour permettre au cluster d'accéder à Internet.

  2. Créez une image personnalisée incluant les dépendances (par exemple, les packages de dépendance Spark dans /usr/lib/spark/jars/).

  3. Chargez les dépendances dans un bucket Cloud Storage, puis utilisez une action d'initialisation pour télécharger les dépendances du bucket lors de la création du cluster.

Réseaux Managed Service pour Apache Spark et VPC Service Controls

VPC Service Controls permet aux administrateurs de définir un périmètre de sécurité autour des ressources des services gérés par Google afin de contrôler les communications avec et entre ces services.

Tenez compte des limites et stratégies suivantes lorsque vous utilisez des réseaux VPC Service Controls avec des clusters Managed Service pour Apache Spark :

Étapes suivantes