Créer des règles de réseau intra-projet

Cette page explique comment configurer des règles de réseau pour le trafic intra-projet dans Google Distributed Cloud (GDC) air-gapped.

Les règles de réseau du projet définissent des règles d'entrée ou de sortie. Vous pouvez définir des règles qui autorisent la communication au sein des projets, entre les projets et vers des adresses IP externes.

Par défaut, ces règles s'appliquent à toutes les zones du monde. Pour en savoir plus sur les ressources globales dans un univers GDC, consultez Présentation des multizones.

Si l'application du trafic intra-projet est nécessaire dans une seule zone, consultez Créer une stratégie intra-projet au niveau de la charge de travail pour une seule zone.

Avant de commencer

Pour configurer des règles de réseau de trafic intra-projet, vous devez disposer des éléments suivants :

  • Les rôles d'identité et d'accès nécessaires. Pour gérer les règles d'un projet spécifique, vous devez disposer du rôle project-networkpolicy-admin. Pour les environnements multizones dans lesquels vous devez gérer des règles qui s'appliquent à toutes les zones, vous avez besoin du rôle global-project-networkpolicy-admin. Pour en savoir plus, consultez Préparer les rôles et les accès prédéfinis.
  • Un projet existant. Pour en savoir plus, consultez Créer un projet.

Créer une règle intra-projet

Pour le trafic au sein d'un projet, GDC applique par défaut une stratégie de réseau de projet prédéfinie, la stratégie intra-projet, à chaque projet. Par défaut, les charges de travail d'un espace de noms de projet peuvent communiquer entre elles sans rien exposer aux ressources externes.

Par défaut, aucune règle de sortie n'est appliquée. Le trafic sortant est donc autorisé pour tout le trafic intra-projet. Toutefois, lorsque vous définissez une seule règle de trafic sortant, seul le trafic spécifié par la règle est autorisé.

Créer une règle d'entrée intra-projet

Lorsque vous créez un projet, vous créez implicitement une ressource ProjectNetworkPolicy de base par défaut qui permet la communication au sein du projet. Cette règle autorise le trafic entrant provenant d'autres charges de travail du même projet.

Vous pouvez supprimer la règle par défaut, mais sachez que cela entraînera le refus de la communication intra-projet pour tous les services et charges de travail du projet. Pour supprimer la règle, utilisez la commande kubectl delete :

kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT

Vous pouvez rajouter la règle par défaut en appliquant le fichier manifeste suivant :

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: base-policy-allow-intra-project-traffic
spec:
  policyType: Ingress
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

Remplacez les éléments suivants :

  • GLOBAL_API_SERVER : chemin d'accès au fichier kubeconfig du serveur d'API global. Pour en savoir plus, consultez Serveurs d'API globaux et zonaux. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
  • PROJECT : nom de votre projet.

Créer une règle de sortie intra-projet

Lorsque vous désactivez la protection contre l'exfiltration de données et que vous appliquez une règle de sortie ProjectNetworkPolicy au projet, par exemple en empêchant l'accès à une ressource externe, utilisez la règle requise suivante pour autoriser le trafic sortant intra-projet :

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-intra-project-outbound-traffic
spec:
  policyType: Egress
  egress:
  - to:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

Remplacez les éléments suivants :

  • GLOBAL_API_SERVER : chemin d'accès au fichier kubeconfig du serveur d'API global. Pour en savoir plus, consultez Serveurs d'API globaux et zonaux. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
  • PROJECT : nom de votre projet.

Créer une règle intra-projet au niveau de la charge de travail

Les règles de réseau au niveau de la charge de travail offrent un contrôle précis de la communication entre les charges de travail individuelles d'un projet. Cette précision permet un contrôle plus strict de l'accès au réseau, ce qui améliore la sécurité et l'utilisation des ressources.

Créer une règle d'entrée intra-projet au niveau de la charge de travail

Lorsque vous créez un projet, vous créez implicitement une ressource ProjectNetworkPolicy de base par défaut qui permet la communication intra-projet entre toutes les charges de travail. Cette règle autorise le trafic entrant provenant d'autres charges de travail du même projet.

Pour créer une règle d'entrée au niveau de la charge de travail intrapériphérique, la règle de base par défaut doit d'abord être supprimée. Dans le cas contraire, un comportement inattendu peut se produire.

  1. Pour supprimer la règle de base par défaut, exécutez la commande suivante :

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. Pour créer une règle d'entrée au niveau de la charge de travail intra-projet, créez et appliquez la ressource personnalisée suivante :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-intra-project-inbound-traffic-from-target-to-subject
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès au fichier kubeconfig du serveur d'API global. Pour en savoir plus, consultez Serveurs d'API globaux et zonaux. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • PROJECT : nom de votre projet.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail sources. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Il spécifie les charges de travail qui sont à l'origine du trafic autorisé. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend sont la source de trafic.
    • TARGET_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail de destination.
    • TARGET_LABEL_VALUE : valeur associée à TARGET_LABEL_KEY. Il spécifie les charges de travail qui sont la destination du trafic autorisé.

Créer une règle de sortie intra-projet au niveau de la charge de travail

  • Pour créer une règle de sortie intra-projet au niveau de la charge de travail, créez et appliquez la ressource personnalisée suivante :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-intra-project-outbound-traffic-to-subject-from-target
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès au fichier kubeconfig du serveur d'API global. Pour en savoir plus, consultez Serveurs d'API globaux et zonaux. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • PROJECT : nom de votre projet.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail sources. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Il spécifie les charges de travail qui sont à l'origine du trafic autorisé. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend sont la source de trafic.
    • TARGET_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail de destination.
    • TARGET_LABEL_VALUE : valeur associée à TARGET_LABEL_KEY. Il spécifie les charges de travail qui sont la destination du trafic autorisé.

Créer une règle intra-projet au niveau de la charge de travail pour une seule zone

Les règles de réseau au niveau de la charge de travail peuvent appliquer le PNP dans une seule zone. Vous pouvez ajouter des libellés spécifiques aux charges de travail d'une même zone. Cela vous permet de contrôler la communication entre les charges de travail individuelles d'un projet ou de différents projets pour cette zone.

Créer une règle intra-projet au niveau de la charge de travail d'entrée à zone unique

Lorsque vous créez un projet, vous créez implicitement une ressource ProjectNetworkPolicy de base par défaut qui permet la communication intra-projet entre toutes les charges de travail. Cette règle autorise le trafic entrant provenant d'autres charges de travail du même projet.

Pour créer une stratégie intra-projet au niveau de la charge de travail d'entrée à zone unique, vous devez d'abord supprimer la stratégie de base par défaut. Dans le cas contraire, un comportement inattendu peut se produire.

  1. Pour supprimer la règle de base par défaut, exécutez la commande suivante :

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. Pour créer une règle de réseau de trafic intra-projet au niveau de la charge de travail Ingress à zone unique, créez et appliquez la ressource personnalisée suivante :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-single-zone-intra-project-inbound-traffic-from-target-to-subject
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
            ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
                ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès au fichier kubeconfig du serveur d'API global. Pour en savoir plus, consultez Serveurs d'API globaux et zonaux. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • PROJECT : nom de votre projet.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail sources. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Il spécifie les charges de travail qui sont à l'origine du trafic autorisé. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend sont la source de trafic.
    • TARGET_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail de destination.
    • TARGET_LABEL_VALUE : valeur associée à TARGET_LABEL_KEY. Il spécifie les charges de travail qui sont la destination du trafic autorisé.
    • ZONE_SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner la zone source. Par exemple, zone ou region.
    • ZONE_SUBJECT_LABEL_VALUE : valeur associée à ZONE_SUBJECT_LABEL_KEY. Elle indique la zone qui est la source du trafic autorisé. Par exemple, si ZONE_SUBJECT_LABEL_KEY est zone et que ZONE_SUBJECT_LABEL_VALUE est us-central1-a, les charges de travail portant le libellé zone: us-central1-a sont la source de trafic.
    • ZONE_TARGET_LABEL_KEY : clé du libellé utilisé pour sélectionner la zone de destination.
    • ZONE_TARGET_LABEL_VALUE : valeur associée à ZONE_TARGET_LABEL_KEY. Elle spécifie la zone de destination du trafic autorisé.

Créer une règle de sortie intra-projet au niveau de la charge de travail pour une seule zone

  • Pour créer une règle de sortie de niveau charge de travail intra-projet à zone unique, créez et appliquez la ressource personnalisée suivante :

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-single-zone-intra-project-outbound-traffic-to-subject-from-target
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
            ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
                ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE
    EOF
    

    Remplacez les éléments suivants :

    • GLOBAL_API_SERVER : chemin d'accès au fichier kubeconfig du serveur d'API global. Pour en savoir plus, consultez Serveurs d'API globaux et zonaux. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • PROJECT : nom de votre projet.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail sources. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Il spécifie les charges de travail qui sont à l'origine du trafic autorisé. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend sont la source de trafic.
    • TARGET_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail de destination.
    • TARGET_LABEL_VALUE : valeur associée à TARGET_LABEL_KEY. Il spécifie les charges de travail qui sont la destination du trafic autorisé.
    • ZONE_SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner la zone source. Par exemple, zone ou region.
    • ZONE_SUBJECT_LABEL_VALUE : valeur associée à ZONE_SUBJECT_LABEL_KEY. Elle indique la zone qui est la source du trafic autorisé. Par exemple, si ZONE_SUBJECT_LABEL_KEY est zone et que ZONE_SUBJECT_LABEL_VALUE est us-central1-a, les charges de travail portant le libellé zone: us-central1-a sont la source de trafic.
    • ZONE_TARGET_LABEL_KEY : clé du libellé utilisé pour sélectionner la zone de destination.
    • ZONE_TARGET_LABEL_VALUE : valeur associée à ZONE_TARGET_LABEL_KEY. Elle spécifie la zone de destination du trafic autorisé.