Crea policy di rete Kubernetes per i cluster standard

Questa pagina fornisce istruzioni per configurare il traffico intra-cluster per un cluster standard utilizzando i criteri di rete Kubernetes in Google Distributed Cloud (GDC) air-gapped.

Un NetworkPolicy Kubernetes è una specifica di come i gruppi di pod sono autorizzati a comunicare tra loro e con altri endpoint di rete. Le risorse NetworkPolicy utilizzano le etichette per selezionare i pod e definire regole che specificano il traffico consentito ai pod selezionati. Questi criteri hanno ambito locale e si applicano solo al traffico all'interno del cluster in cui sono definiti, a meno che non venga creato un criterio di tipo "consenti tutto", che consente anche la comunicazione con gli endpoint di altri cluster standard e condivisi.

Prima di iniziare

Per configurare le policy di rete Kubernetes, devi disporre delle autorizzazioni necessarie all'interno del cluster per creare, modificare ed eliminare risorse NetworkPolicy negli spazi dei nomi pertinenti.

Crea un criterio da pod a pod all'interno del cluster

Queste policy controllano il traffico tra i pod all'interno dello stesso cluster standard.

Crea un criterio in entrata da pod a pod all'interno del cluster

  • Per consentire il traffico in entrata da pod a pod all'interno del cluster, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-intra-cluster-ingress-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              Kubernetes.io/metadata.name: PEER_NAMESPACE
          podSelector:
            matchLabels:
              PEER_LABEL_KEY: PEER_LABEL_VALUE
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.
    • PEER_NAMESPACE: lo spazio dei nomi peer nel cluster standard.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro del soggetto. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend ricevono il traffico.
    • PEER_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro peer.
    • PEER_LABEL_VALUE: il valore associato a PEER_LABEL_KEY.
    • PORT: la porta sul workload soggetto in cui è consentito il traffico.

Crea un criterio in uscita da pod a pod all'interno del cluster

  • Per consentire il traffico di uscita da pod a pod all'interno del cluster, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-egress-intra-cluster-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Egress
      egress:
      - to:
        - namespaceSelector:
            matchLabels:
              Kubernetes.io/metadata.name: PEER_NAMESPACE
          podSelector:
            matchLabels:
              PEER_LABEL_KEY: PEER_LABEL_VALUE
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.
    • PEER_NAMESPACE: lo spazio dei nomi peer nel cluster standard.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro del soggetto. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend inviano il traffico.
    • PEER_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro peer.
    • PEER_LABEL_VALUE: il valore associato a PEER_LABEL_KEY.
    • PORT: la porta sul workload peer in cui è consentito il traffico.

Crea una policy da pod a pod all'interno del cluster utilizzando un bilanciatore del carico

Queste policy controllano il traffico tra i pod all'interno dello stesso cluster quando il traffico viene instradato tramite un bilanciatore del carico esterno.

Crea un criterio di ingresso da pod a pod all'interno del cluster utilizzando un bilanciatore del carico

  • Per consentire il traffico in entrata da pod a pod all'interno del cluster utilizzando un bilanciatore del carico, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-intra-cluster-ingress-traffic-via-elb
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Ingress
      ingress:
      - from:
        - ipBlock:
            cidr: EGRESS_NAT_IP/32
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro del soggetto. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend ricevono il traffico.
    • EGRESS_NAT_IP: l'IP NAT in uscita del pod di origine.
    • PORT: la porta sul workload soggetto in cui è consentito il traffico.

Crea un criterio di uscita da pod a pod all'interno del cluster utilizzando un bilanciatore del carico

  • Per consentire il traffico di uscita da pod a pod all'interno del cluster utilizzando un bilanciatore del carico, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-intra-cluster-egress-traffic-via-elb
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: ELB_EXTERNAL_IP/32
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro del soggetto. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend inviano il traffico.
    • ELB_EXTERNAL_IP: l'indirizzo IP esterno del bilanciatore del carico.
    • PORT: la porta sull'endpoint esterno a cui è consentito il traffico.

Crea una policy esterna all'organizzazione

Queste norme controllano il traffico tra un pod in un cluster standard e un endpoint esterno (qualsiasi indirizzo IP al di fuori del cluster).

Crea un criterio in entrata per il traffico esterno all'organizzazione

  • Per consentire il traffico in entrata da un endpoint esterno all'organizzazione, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-ingress-from-organization-external-to-standard-cluster-pod
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Ingress
      ingress:
      - from:
        - ipBlock:
            cidr: EXTERNAL_CIDR
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro del soggetto. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend ricevono il traffico.
    • EXTERNAL_CIDR: il CIDR esterno, ad esempio: 20.0.0.0/16.
    • PORT: la porta sul workload soggetto in cui è consentito il traffico.

Crea un criterio in uscita per il traffico esterno all'organizzazione

  • Per consentire il traffico in uscita a un endpoint esterno all'organizzazione, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-egress-from-standard-cluster-pod-to-organization-external
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: EXTERNAL_CIDR
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.
    • SUBJECT_LABEL_KEY: la chiave dell'etichetta utilizzata per selezionare i carichi di lavoro del soggetto. Ad esempio, app, tier o role.
    • SUBJECT_LABEL_VALUE: il valore associato a SUBJECT_LABEL_KEY. Ad esempio, se SUBJECT_LABEL_KEY è app e SUBJECT_LABEL_VALUE è backend, i carichi di lavoro con l'etichetta app: backend inviano il traffico.
    • EXTERNAL_CIDR: il CIDR esterno, ad esempio: 20.0.0.0/16.
    • PORT: la porta sull'endpoint esterno a cui è consentito il traffico.

Crea una policy di tipo Consenti tutto

I seguenti criteri possono essere utilizzati per consentire esplicitamente tutto il traffico. Ciò consente la comunicazione con gli endpoint di altri cluster standard e condivisi.

Crea una policy in entrata che consenta tutto

  • Per consentire tutto il traffico in entrata, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-all-ingress-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
      ingress:
      - {}
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.

Crea una policy in uscita che consenta tutto

  • Per consentire tutto il traffico in uscita, crea e applica la seguente risorsa:

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-all-egress-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector: {}
      policyTypes:
      - Egress
      egress:
      - {}
    EOF
    

    Sostituisci quanto segue:

    • CLUSTER_API_SERVER: il percorso kubeconfig del server API del cluster. Se non hai ancora generato un file kubeconfig per il server API, consulta la sezione Accedi per maggiori dettagli.
    • SUBJECT_NAMESPACE: lo spazio dei nomi del soggetto nel cluster standard.