Crea criteri di rete intraprogetto

Questa pagina fornisce istruzioni per configurare i criteri di rete per il traffico intraprogetto in Google Distributed Cloud (GDC) con air gap.

I criteri di rete del progetto definiscono regole in entrata o in uscita. Puoi definire criteri che consentono la comunicazione all'interno dei progetti, tra progetti e con indirizzi IP esterni.

Per impostazione predefinita, queste norme si applicano a livello globale in tutte le zone. Per saperne di più sulle risorse globali in un universo GDC, consulta la panoramica multizona.

Se è necessaria l'applicazione del traffico intra-progetto all'interno di una singola zona, consulta Creare una policy intra-progetto a livello di workload per una singola zona.

Prima di iniziare

Per configurare i criteri di rete per il traffico intra-progetto, devi disporre di quanto segue:

  • I ruoli di identità e accesso necessari. Per gestire le policy per un progetto specifico, devi disporre del ruolo project-networkpolicy-admin. Per gli ambienti multizona in cui devi gestire criteri che si estendono a tutte le zone, devi disporre del ruolo global-project-networkpolicy-admin. Per saperne di più, consulta Preparare ruoli e accesso predefiniti.
  • Un progetto esistente. Per saperne di più, consulta Creare un progetto.

Crea una policy intra-progetto

Per il traffico all'interno di un progetto, GDC applica una policy di rete del progetto predefinita, la policy intra-progetto, a ogni progetto per impostazione predefinita. Per impostazione predefinita, i workload in uno spazio dei nomi del progetto possono comunicare tra loro senza esporre nulla a risorse esterne.

Per impostazione predefinita, non esiste alcun criterio di uscita, pertanto il traffico in uscita è consentito per tutto il traffico all'interno del progetto. Tuttavia, quando imposti un'unica policy di uscita, viene consentito solo il traffico specificato dalla policy.

Crea una policy in entrata intraprogetto

Quando crei un progetto, crei implicitamente una risorsa di base ProjectNetworkPolicy predefinita che consente la comunicazione all'interno del progetto. Questa policy consente il traffico in entrata da altri workload nello stesso progetto.

Puoi rimuovere il criterio predefinito, ma tieni presente che questa rimozione comporta il rifiuto della comunicazione intraprogetto per tutti i servizi e i workload all'interno del progetto. Per rimuovere la policy, utilizza il comando kubectl delete:

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

Puoi aggiungere di nuovo le norme predefinite applicando il seguente manifest:

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

Sostituisci quanto segue:

  • GLOBAL_API_SERVER: il percorso kubeconfig del server API globale. Per saperne di più, vedi Server API globali e di zona. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
  • PROJECT: il nome del progetto.

Crea un criterio in uscita intraprogetto

Quando disattivi la prevenzione esfiltrazione di dati e applichi al progetto una policy di uscita ProjectNetworkPolicy, ad esempio impedendo l'accesso a una risorsa esterna, utilizza la seguente policy obbligatoria per consentire il traffico in uscita intraprogetto:

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

Sostituisci quanto segue:

  • GLOBAL_API_SERVER: il percorso kubeconfig del server API globale. Per saperne di più, vedi Server API globali e di zona. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
  • PROJECT: il nome del progetto.

Crea un criterio intra-progetto a livello di workload

I criteri di rete a livello di workload offrono un controllo granulare sulla comunicazione tra i singoli workload all'interno di un progetto. Questa granularità consente un controllo più rigoroso dell'accesso alla rete, migliorando la sicurezza e l'utilizzo delle risorse.

Crea un criterio intraprogetto a livello di carico di lavoro in entrata

Quando crei un progetto, crei implicitamente una risorsa di base ProjectNetworkPolicy predefinita che consente la comunicazione intra-progetto tra tutti i carichi di lavoro. Questa policy consente il traffico in entrata da altri workload nello stesso progetto.

Per creare una policy intraprogetto a livello di workload in entrata, devi prima eliminare la policy di base predefinita. In caso contrario, potrebbero verificarsi comportamenti imprevisti.

  1. Per eliminare la policy di base predefinita, esegui questo comando:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. Per creare una policy intra-progetto a livello di workload in entrata, crea e applica la seguente risorsa personalizzata:

    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
    

    Sostituisci quanto segue:

    • GLOBAL_API_SERVER: il percorso kubeconfig del server API globale. Per saperne di più, vedi Server API globali e di zona. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • PROJECT: il nome del progetto.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di origine. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Specifica quali carichi di lavoro sono l'origine del traffico consentito. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend sono la sorgente di traffico.
    • TARGET_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di destinazione.
    • TARGET_LABEL_VALUE: il valore associato a TARGET_LABEL_KEY. Specifica quali carichi di lavoro sono la destinazione del traffico consentito.

Crea una policy intraprogetto a livello di carico di lavoro in uscita

  • Per creare una policy intra-progetto a livello di workload in uscita, crea e applica la seguente risorsa personalizzata:

    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
    

    Sostituisci quanto segue:

    • GLOBAL_API_SERVER: il percorso kubeconfig del server API globale. Per saperne di più, vedi Server API globali e di zona. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • PROJECT: il nome del progetto.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di origine. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Specifica quali carichi di lavoro sono l'origine del traffico consentito. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend sono la sorgente di traffico.
    • TARGET_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di destinazione.
    • TARGET_LABEL_VALUE: il valore associato a TARGET_LABEL_KEY. Specifica quali carichi di lavoro sono la destinazione del traffico consentito.

Crea un criterio intraprogetto a livello di workload per una singola zona

I criteri di rete a livello di workload possono applicare PNP lungo una singola zona. È possibile aggiungere etichette specifiche ai carichi di lavoro all'interno di una singola zona, consentendoti di controllare la comunicazione tra singoli carichi di lavoro all'interno di un progetto o in progetti diversi per quella zona.

Crea un criterio intraprogetto a livello di workload in entrata per una singola zona

Quando crei un progetto, crei implicitamente una risorsa di base ProjectNetworkPolicy predefinita che consente la comunicazione intra-progetto tra tutti i carichi di lavoro. Questa policy consente il traffico in entrata da altri workload nello stesso progetto.

Per creare una policy intra-progetto a livello di workload in entrata a zona singola, devi prima eliminare la policy di base predefinita. In caso contrario, potrebbero verificarsi comportamenti imprevisti.

  1. Per eliminare la policy di base predefinita, esegui questo comando:

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. Per creare un criterio di rete per il traffico intraprogetto a livello di workload Ingress a zona singola, crea e applica la seguente risorsa personalizzata:

    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
    

    Sostituisci quanto segue:

    • GLOBAL_API_SERVER: il percorso kubeconfig del server API globale. Per saperne di più, vedi Server API globali e di zona. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • PROJECT: il nome del progetto.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di origine. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Specifica quali carichi di lavoro sono l'origine del traffico consentito. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend sono la sorgente di traffico.
    • TARGET_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di destinazione.
    • TARGET_LABEL_VALUE: il valore associato a TARGET_LABEL_KEY. Specifica quali carichi di lavoro sono la destinazione del traffico consentito.
    • ZONE_SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare la zona di origine. Ad esempio, zone o region.
    • ZONE_SUBJECT_LABEL_VALUE: il valore associato a ZONE_SUBJECT_LABEL_KEY. Specifica la zona di origine del traffico consentito. Ad esempio, se ZONE_SUBJECT_LABEL_KEY è zone e ZONE_SUBJECT_LABEL_VALUE è us-central1-a, i carichi di lavoro con l'etichetta zone: us-central1-a sono la sorgente di traffico.
    • ZONE_TARGET_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare la zona di destinazione.
    • ZONE_TARGET_LABEL_VALUE: il valore associato a ZONE_TARGET_LABEL_KEY. Specifica la zona di destinazione del traffico consentito.

Crea un criterio intraprogetto a livello di workload in uscita per una singola zona

  • Per creare una policy intraprogetto a livello di workload in uscita per una singola zona, crea e applica la seguente risorsa personalizzata:

    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
    

    Sostituisci quanto segue:

    • GLOBAL_API_SERVER: il percorso kubeconfig del server API globale. Per saperne di più, vedi Server API globali e di zona. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • PROJECT: il nome del progetto.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di origine. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Specifica quali carichi di lavoro sono l'origine del traffico consentito. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend sono la sorgente di traffico.
    • TARGET_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro di destinazione.
    • TARGET_LABEL_VALUE: il valore associato a TARGET_LABEL_KEY. Specifica quali carichi di lavoro sono la destinazione del traffico consentito.
    • ZONE_SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare la zona di origine. Ad esempio, zone o region.
    • ZONE_SUBJECT_LABEL_VALUE: il valore associato a ZONE_SUBJECT_LABEL_KEY. Specifica la zona di origine del traffico consentito. Ad esempio, se ZONE_SUBJECT_LABEL_KEY è zone e ZONE_SUBJECT_LABEL_VALUE è us-central1-a, i carichi di lavoro con l'etichetta zone: us-central1-a sono la sorgente di traffico.
    • ZONE_TARGET_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare la zona di destinazione.
    • ZONE_TARGET_LABEL_VALUE: il valore associato a ZONE_TARGET_LABEL_KEY. Specifica la zona di destinazione del traffico consentito.