Controllo del traffico con le politiche di rete

Classic clusters

Queste informazioni sulle politiche di rete riguardano specificatamente i cluster classici. Per i cluster VPC, consultare la sezione " Informazioni sulle reti VPC dei cluster con impostazione predefinita "Secure by Default "".

Ogni cluster di IBM Cloud® Kubernetes Service include un plug-in di rete denominato Calico. Le politiche di rete predefinite proteggono l'interfaccia di rete pubblica di ogni nodo di lavoro del cluster.

La modifica del plug-in " Calico ", dei componenti o delle impostazioni predefinite di " Calico " non è supportata. Ad esempio, non distribuire una nuova versione del plug-in Calico, né modificare i daemon set o le distribuzioni relativi ai componenti Calico, alle risorse predefinite IPPool o ai nodi Calico. In alternativa, è possibile seguire le istruzioni riportate nella documentazione per modificare l'MTU di Calico o, se necessario, per disabilitare il plug-in di mappatura delle porte per il CNI Calico.

Puoi utilizzare Calico e Kubernetes per creare politiche di rete per un cluster. Con le politiche di rete Kubernetes, puoi specificare il traffico di rete che vuoi consentire o bloccare da e verso un pod all'interno di un cluster. Per impostare politiche di rete più avanzate come il blocco del traffico in entrata (ingress) ai servizi NLB (network load balancer), utilizza le politiche di rete Calico.

Politiche di rete Kubernetes
Kubernetes Le politiche di rete specificano in che modo i pod possono comunicare con altri pod e con endpoint esterni. Il traffico di rete in entrata e in uscita viene consentito o bloccato in base al protocollo, alla porta e agli indirizzi IP di origine o di destinazione. Il traffico può inoltre essere filtrato in base alle etichette di pod e spazio dei nomi. Puoi applicare le politiche di rete Kubernetes utilizzando i comandi kubectl o le API Kubernetes.
Politiche di rete Calico
Calico Le politiche di rete costituiscono un superset delle politiche di rete " Kubernetes ". Calico Le politiche vengono applicate utilizzando la riga di comando kubectl oppure calicoctl. Si consiglia di utilizzare kubectl per evitare di dover scaricare calicoctl e mantenerlo aggiornato. Le politiche Calico aggiungono le seguenti funzioni.

Calico assicura il rispetto di queste politiche, comprese eventuali politiche di rete Kubernetes, configurando regole iptables che fungono da firewall per il nodo di lavoro, al fine di definire i requisiti che il traffico di rete deve soddisfare per essere inoltrato alla risorsa di destinazione.

Politiche di rete Kubernetes e Calico predefinite

Quando si crea un cluster con una VLAN pubblica, viene creata automaticamente una risorsa HostEndpoint con l'etichetta ibm.role: worker_public per ogni nodo di lavoro e la relativa interfaccia di rete pubblica. Questa impostazione " HostEndpoint " fa sì che tutto il traffico da o verso l'interfaccia di rete pubblica venga scartato, a meno che non sia espressamente consentito da una politica " Calico " che selezioni l'etichetta " ibm.role: worker_public ".

Una risorsa HostEndpoint con l'etichetta ibm.role: worker_private viene creata automaticamente anche per ogni nodo di lavoro e la sua interfaccia di rete privata. Viene creata una politica allow-all-private-default predefinita in modo che tutto il traffico sia consentito verso e dall'interfaccia di rete privata. Questo HostEndpoint consente agli utenti del cluster di limitare ulteriormente il traffico sulla rete privata creando politiche " Calico " che selezionano " ibm.role: worker_private " e hanno un numero d'ordine inferiore rispetto a " allow-all-private-default".

Queste politiche predefinite per l'host Calico consentono tutto il traffico di rete in uscita verso reti pubbliche e consentono il traffico in entrata da reti pubbliche verso specifici componenti del cluster, quali Kubernetes, NodePort,, LoadBalancer, e i servizi Ingress. Tutto il traffico privato è consentito per impostazione predefinita dalla politica allow-all-private-default. Qualsiasi altro traffico di rete in entrata proveniente da Internet verso i nodi di lavoro che non sia specificato nelle politiche predefinite viene bloccato. Le politiche predefinite non influiscono sul traffico tra i pod

Non rimuovere le politiche predefinite dal tuo cluster, perché vengono ricreate al successivo aggiornamento del master del cluster o al successivo aggiornamento del master. Se si desidera limitare ulteriormente il traffico, applicare politiche di " Calico " di ordine inferiore per bloccare il traffico. Assicurati di comprendere appieno cosa stai bloccando e che i componenti del cluster non hanno bisogno del traffico che vuoi bloccare.

Controlla le seguenti politiche host Calico predefinite che vengono automaticamente applicate al tuo cluster.

Politiche host Calico predefinite per ogni cluster
Politica Calico Descrizione
allow-all-outbound Consente tutto il traffico in uscita sulla rete pubblica.
allow-all-private-default Consente tutto il traffico in entrata e in uscita sulla rete privata.
allow-bigfix-port Consente il traffico in entrata sulla porta 52311 nell'applicazione BigFix per consentire gli aggiornamenti necessari del nodo di lavoro.
allow-icmp Consente i pacchetti ICMP in entrata (ping).
allow-node-port-dnat Consente il traffico in entrata dei servizi NLB (network load balancer), ALB (application load balancer) Ingress e NodePort ai pod esposti da questi servizi. Nota: non hai bisogno di specificare le porte esposte perché Kubernetes utilizza la conversione dell'indirizzo di rete di destinazione (DNAT) per inoltrare le richieste di servizio ai pod corretti. L'inoltro avviene prima che le politiche dell'endpoint host
vengano applicate in iptables.
allow-sys-mgmt Consente le connessioni in entrata per specifici sistemi dell'infrastruttura IBM Cloud utilizzati per gestire i nodi di lavoro.
allow-vrrp Consente l'invio di pacchetti VRRP, che monitorano e trasferiscono gli indirizzi IP virtuali tra i nodi di lavoro.

Vengono inoltre create le politiche predefinite di “ Kubernetes ” che limitano l’accesso alla dashboard di “ Kubernetes ”. Le politiche Kubernetes non si applicano all'endpoint host, ma al livello del pod e a tutti i cluster classici e VPC.

Politiche Kubernetes predefinite per ogni cluster
Politica Kubernetes Descrizione
dashboard-metrics-scraper Fornito nello spazio dei nomi kube-system: impedisce a tutti i pod di accedere allo scraper delle metriche della dashboard Kubernetes. Questa politica non impedisce alla dashboard di Kubernetes di accedere alle metriche della dashboard. Inoltre, questa politica non influisce sull'accesso alle metriche della dashboard dalla console IBM Cloud né sull'utilizzo di kubectl proxy. Se un pod necessita dell'accesso allo scraper delle metriche della dashboard, distribuire il pod in uno spazio dei nomi contrassegnato dall'etichetta " dashboard-metrics-scraper-policy: allow ".
kubernetes-dashboard Fornito nello spazio dei nomi kube-system: blocca a tutti i pod l'accesso al dashboard Kubernetes. Questa politica non influisce sull'accesso alla dashboard dalla console di IBM Cloud o tramite kubectl proxy. Se un pod necessita dell'accesso al dashboard, distribuiscilo in uno spazio dei nomi che ha un'etichetta kubernetes-dashboard-policy: allow.

Visualizzazione delle politiche di rete

Visualizza i dettagli per impostazione predefinita e tutte le politiche di rete aggiunte che vengono applicate al tuo cluster.

Prima di iniziare, installa e configurare la CLI Calico e imposta il contesto per il tuo cluster per eseguire i comandi Calico.

  1. Visualizza l'endpoint host Calico.

    kubectl get hostendpoints.projectcalico.org -o yaml
    
  2. Visualizza tutte le politiche di rete " Calico " create per il cluster. Questo elenco include politiche che potrebbero non essere ancora applicabili ad alcun pod o host. Perché venga applicata una politica Calico, deve esistere un pod Kubernetes o Calico HostEndpoint che corrisponda al selettore nella politica di rete Calico.

    Calico Le politiche di rete sono limitate a specifici spazi dei nomi:

    kubectl get networkpolicy.projectcalico.org --all-namespaces -o wide
    

    Kubernetes Le politiche di rete sono inoltre limitate a specifici spazi dei nomi:

    kubectl get networkpolicies.networking.k8s.io --all-namespaces -o wide
    

    Calico Le politiche di rete globali non sono limitate a spazi dei nomi specifici:

    kubectl get globalnetworkpolicies.projectcalico.org -o wide
    
  3. Visualizza i dettagli di una politica di rete di tipo “ Calico ”.

    kubectl get networkpolicies.projectcalico.org -o yaml <policy_name> --namespace <policy_namespace>
    
  4. Visualizza i dettagli di tutte le politiche della rete globale " Calico " relative al cluster.

    kubectl get globalnetworkpolicies.projectcalico.org -o yaml
    
  5. Visualizza i dettagli di tutte le politiche di rete " Kubernetes " relative al cluster.

    kubectl get networkpolicies.networking.k8s.io --all-namespaces -o yaml
    

Aggiunta di politiche di rete

Di solito, le politiche predefinite non richiedono modifiche. Solo in scenari avanzati potrebbero essere richieste delle modifiche. Se ritieni di dover apportare modifiche, puoi creare le tue politiche di rete.

Per creare politiche di ret Kubernetes, consultare la documentazione sulle politiche di rete di Kubernetes.

Per creare le politiche Calico, utilizza la seguente procedura.

  1. Definisci il tuo " Calico politica di rete " o " politica di rete globale " creando uno script di configurazione (.yaml) con la sintassi delle policy di Calico v3. Questi file di configurazione includono i selettori che descrivono a quali pod, spazi dei nomi o host vengono applicate queste politiche.

  2. Applica le politiche al cluster.

    kubectl apply -f policy.yaml
    

Calico Inoltre, le politiche di rete di Kubernetes bloccano solo le nuove connessioni, senza interrompere quelle già esistenti prima dell'applicazione della politica. Dopo aver applicato una politica nuova o modificata, per verificare che funzioni correttamente e che non blocchi più del dovuto, procedere come segue:

  1. Riavvia tutti i pod che potrebbero essere interessati dalla policy, oppure riavvia tutti i pod nel caso in cui il selettore non sia corretto e l'impatto sia maggiore di quanto pensi.

  2. Esegui ibmcloud ks cluster master refresh -c CLUSTER-ID per riavviare i tuoi pod master del cluster. Ciò interrompe le connessioni esistenti tra kubelet e altri componenti e il master, costringendoli a riconnettersi. Questo permette di verificare se le politiche nuove e modificate bloccano eventuali connessioni necessarie ai componenti master.

  3. Prova a collegarti al dashboard Kubernetes per assicurarti che le modifiche della politica non blocchino le connessioni necessarie a quei componenti.

Controllo del traffico in entrata ai servizi NLB o NodePort

Per impostazione predefinita, i servizi Kubernetes, NodePort e LoadBalancer rendono la tua app disponibile su tutte le interfacce del cluster, sia pubbliche che private. Tuttavia, puoi usare le politiche Calico per bloccare il traffico in entrata ai tuoi servizi in base all'origine o alla destinazione del traffico.

È difficile applicare le politiche predefinite di Kubernetes e Calico per proteggere i servizi Kubernetes, NodePort e LoadBalancer a causa delle regole DNAT di iptables generate per tali servizi. Tuttavia, le politiche pre-DNAT impediscono al traffico specificato di raggiungere le tue applicazioni perché generano e applicano le regole iptables prima che Kubernetes utilizzi la DNAT regolare per inoltrare il traffico ai pod.

Alcuni utilizzi comuni per le politiche di rete pre-DNAT Calico:

  • Blocca il traffico alle porte del nodo pubblico di un servizio NLB (network load balancer) privato. Un servizio NLB rende la tua applicazione disponibile sulla porta e l'indirizzo IP dell'NLB e la rende disponibile sulle porte del nodo del servizio. È possibile accedere alle porte del nodo da ogni indirizzo IP (pubblico e privato) di ogni nodo all'interno del cluster.
  • Blocca il traffico verso le porte del nodo pubblico sui cluster che eseguono i nodi di lavoro edge: il blocco delle porte del nodo assicura che i nodi di lavoro edge siano gli unici nodi di lavoro a gestire il traffico in entrata.
  • Blocca il traffico da determinati indirizzi IP o CIDR di origine
  • Consenti il traffico solo da determinati indirizzi IP o CIDR di origine e blocca tutto il resto del traffico

Per vedere come consentire o bloccare gli indirizzi IP di origine, prova l'esercitazione sull'utilizzo delle politiche di rete Calico per bloccare il traffico.

Politiche Calico di esempio per limitare il traffico di rete pubblico o privato

IBM fornisce una serie di esempi di politiche di rete pubblica Calico e di politiche di rete privata Calico che limitano ulteriormente il traffico di rete pubblico e privato sui worker del cluster.

Queste politiche non sono destinate a bloccare tutto, né necessariamente soddisfano da sole i requisiti di conformità. Non sono supportati attivamente da IBM e sono intesi semplicemente come un possibile punto di partenza; devono essere modificati per adattarsi alle vostre specifiche esigenze. Per ulteriori informazioni, consultare il file README.

IBM Non si consiglia più di utilizzare le politiche di esempio “allow-egress-pods-public”, “allow-public-services-pods”, “allow-egress-pods-private” o “allow-private-services-pods” riportate nelle sezioni “Applicazione delle politiche di rete pubblica ” e “Applicazione delle politiche di rete privata ”. Questi criteri controllavano l'uscita da tutti i pod del cluster. Per controllare il traffico da e verso i pod, IBM consiglia di utilizzare Kubernetes NetworkPolicy e di indirizzare le regole verso namespace e pod specifici, anziché ricorrere a queste politiche generiche che trattano tutti i pod allo stesso modo.

Applicazione di politiche di rete pubblica

  1. Clona il repository IBM-Cloud/kube-samples.

    git clone https://github.com/IBM-Cloud/kube-samples.git
    
  2. Passare alla directory “public policy” relativa alla regione in cui si trova il cluster. Comando di esempio per un cluster in Stati Uniti Sud:

    cd <filepath>/IBM-Cloud/kube-samples/calico-policies/public-network-isolation/us-south
    
  3. Esaminare ogni politica per eventuali modifiche che potrebbe essere necessario apportare. Ad esempio, potrebbe essere necessario modificare il criterio allow-ibm-ports-public.yaml per specificare la subnet del pod del cluster, sostituendo la subnet predefinita 172.30.0.0/16. Esaminare inoltre queste politiche per eventuali connessioni che non si desidera consentire.

  4. Applicare le politiche pubbliche o private che si desidera utilizzare.

    kubectl apply -f allow-ibm-ports-public.yaml
    kubectl apply -f allow-public-service-endpoint.yaml
    kubectl apply -f deny-all-outbound-public.yaml
    kubectl apply -f allow-konnectivity.yaml
    kubectl apply -f allow-k8s-master-to-dashboard.yaml
    
  5. Facoltativo: per consentire ai nodi di lavoro di accedere ad altri servizi IBM Cloud tramite la rete pubblica, applicare la policy " allow-public-services.yaml ". Questa politica consente l'accesso agli indirizzi IP di IBM Cloud Container Registry e, se i servizi sono disponibili nella regione, anche a IBM Cloud Logs e IBM Cloud Monitoring. Per accedere ad altri servizi di IBM Cloud, è necessario aggiungere manualmente a questa policy le sottoreti relative a tali servizi.

    kubectl apply -f allow-public-services.yaml
    
  6. Verificare che siano applicate le politiche di rete di Calico.

    kubectl get networkpolicies.projectcalico.org -o yaml -A
    
  7. Verificare che siano applicate le politiche di rete globali “ Calico ”.

    kubectl get globalnetworkpolicies.projectcalico.org -o yaml
    
  8. Facoltativo: se si utilizzano criteri che si applicano ai pod nel cluster, testarli bene per garantire che tutte le funzionalità del cluster continuino a funzionare. Ad esempio, se si utilizzano webhook all'interno del cluster, assicurarsi che le politiche consentano a questi webhook di effettuare le connessioni richieste ai pod che implementano i webhook. È inoltre necessario consentire il traffico di tutti i servizi non locali che estendono l'API di Kubernetes. È possibile trovare questi servizi eseguendo kubectl get apiservices.

Applicazione di politiche di rete privata

  1. Clona il repository IBM-Cloud/kube-samples.

    git clone https://github.com/IBM-Cloud/kube-samples.git
    
  2. Accedi alla directory delle politiche private relativa alla regione in cui si trova il tuo cluster. Comando di esempio per un cluster in Stati Uniti Sud:

    cd <filepath>/IBM-Cloud/kube-samples/calico-policies/private-network-isolation/us-south
    
  3. Esaminare ogni politica per eventuali modifiche che potrebbe essere necessario apportare. Ad esempio, se hai specificato una sottorete personalizzata quando hai creato il tuo cluster che fornisce gli indirizzi IP privati per i tuoi pod, devi specificare tale CIDR invece del CIDR 172.30.0.0/16 nella politica allow-all-workers-private.yaml.

  4. Applica le politiche.

    kubectl apply -f allow-all-workers-private.yaml
    kubectl apply -f allow-ibm-ports-private.yaml
    kubectl apply -f allow-icmp-private.yaml
    kubectl apply -f allow-private-service-endpoint.yaml
    kubectl apply -f allow-sys-mgmt-private.yaml
    kubectl apply -f deny-all-private-default.yaml
    
  5. Opzionale: Per consentire ai lavoratori di accedere a IBM Cloud Container Registry attraverso la rete privata, applicare il criterio allow-private-services.yaml. Per accedere ad altri servizi di IBM Cloud che supportano endpoint di servizi cloud privati, è necessario aggiungere manualmente a questa politica le sottoreti relative a tali servizi.

    kubectl apply -f allow-private-services.yaml
    
  6. Facoltativo: per esporre le tue applicazioni con gli NLB (network load balancer) privati o gli ALB (application load balancer) Ingress, devi aprire il protocollo VRRP applicando la politica allow-vrrp-private.

    kubectl apply -f allow-vrrp-private.yaml
    

    Puoi controllare ulteriormente l'accesso ai servizi di rete creando politiche pre-DNAT Calico. Nella politica pre-DNAT, assicurati di utilizzare selector: ibm.role=='worker_private' per applicare la politica agli endpoint host privati dei nodi di lavoro.

  7. Verificare che siano applicate le politiche di rete di Calico.

    kubectl get networkpolicies.projectcalico.org -o yaml -A
    
  8. Verificare che siano applicate le politiche di rete globali “ Calico ”.

    kubectl get globalnetworkpolicies.projectcalico.org -o yaml
    
  9. Facoltativo: se si utilizzano criteri che si applicano ai pod nel cluster, testarli bene per garantire che tutte le funzionalità del cluster continuino a funzionare. Ad esempio, se si utilizzano webhook all'interno del cluster, assicurarsi che le politiche consentano a questi webhook di effettuare le connessioni richieste ai pod che implementano i webhook. È inoltre necessario consentire il traffico di tutti i servizi non locali che estendono l'API di Kubernetes. È possibile trovare questi servizi eseguendo kubectl get apiservices.

Controllo del traffico tra i pod

Le politiche di Kubernetes proteggono i pod dal traffico di rete interno. È possibile creare semplici politiche di rete " Kubernetes " per isolare i microservizi delle applicazioni gli uni dagli altri all'interno di uno stesso namespace o tra diversi namespace.

Per impostazione predefinita, qualsiasi pod ha accesso a qualsiasi altro pod nel cluster. Inoltre, qualsiasi pod ha accesso a qualsiasi servizio esposto dalla rete di pod, come un servizio di metriche, il DNS del cluster, il server API o qualsiasi servizio che crei manualmente nel tuo cluster.

Registrazione del traffico rifiutato

Per registrare le richieste di traffico rifiutate per specifici pod nel tuo cluster, puoi creare una politica di rete di log Calico.

Quando configuri le politiche di rete per limitare il traffico ai pod dell'applicazione, le richieste di traffico che non sono consentite da queste politiche vengono rifiutate ed eliminate. In alcuni scenari, potresti volere ulteriori informazioni sulle richieste di traffico rifiutate. Ad esempio, potresti notare del traffico insolito che viene continuamente rifiutato da una delle tue politiche di rete. Per monitorare la potenziale minaccia alla sicurezza, puoi impostare la registrazione nei log per eseguire una registrazione ogni volta che la politica rifiuta un'azione tentata su specifici pod dell'applicazione.

Questa sezione ti mostra come registrare il traffico rifiutato da una politica di rete Kubernetes. Per registrare il traffico rifiutato da una politica di rete Calico, vedi la lezione 5 dell'esercitazione relativa alla politica di rete Calico.

  1. Crea o utilizza una politica di rete Kubernetes esistente che blocca o limita il traffico in entrata.

    1. Crea una politica di rete Kubernetes. Ad esempio, per controllare il traffico tra i pod, potresti utilizzare la seguente politica Kubernetes di esempio denominata access-nginx che limita l'accesso a un'applicazione NGINX. Il traffico in entrata ai pod con etichetta "run=nginx" è consentito solo dai pod con l'etichetta "run=access". Tutto l'altro traffico in entrata ai pod dell'applicazione "run=nginx" viene bloccato.
        kind: NetworkPolicy
        apiVersion: networking.k8s.io/v1
        metadata:
         name: access-nginx
        spec:
         podSelector:
           matchLabels:
             run: nginx
         ingress:
           - from:
             - podSelector:
                 matchLabels:
                   run: access
        ```
    2. Applica la politica.
    
    ```sh {: pre}
        kubectl apply -f <policy_name>.yaml
        ```
    
  2. Per registrare tutto il traffico rifiutato dalla politica che hai creato nel passo precedente, crea una politica di rete (NetworkPolicy) Calico denominata log-denied-packets. La seguente politica Calico utilizza lo stesso selettore pod della politica access-nginx Kubernetes di esempio descritta nel passo 1, tuttavia la sintassi è leggermente differente poiché è una Calico NetworkPolicy invece di una Kubernetes NetworkPolicy. Inoltre, poiché tutte le NetworkPolicy Kubernetes vengono valutate da Calico come ordine 1000, viene aggiunto il numero d'ordine 3000 per garantire che venga valutato dopo la NetworkPolicy di Kubernetes. Con queste due politiche in atto, ecco il risultato:

    • Le nuove connessioni in entrata nel pod nginx vengono prima valutate rispetto alla NetworkPolicy (ordine 1000) Kubernetes. Le connessioni provenienti da un pod con l'etichetta " run=access " vengono accettate immediatamente, il che significa che non vengono valutate altre politiche.
    • Se la connessione proviene da un pod senza l'etichetta run=access (o da qualsiasi cosa che non sia un pod), Kubernetes NetworkPolicy non eseguirà alcuna operazione e Calico valuta successivamente la politica log-denied-packets. Questa politica registra il pacchetto in syslog sul nodo di lavoro su cui si trova il pod nginx.
    • Calico, quindi, verifica la presenza di altre politiche da applicare alla connessione e, poiché non ne trova alcuna, il pacchetto viene eliminato. Questo perché tutto il traffico verso un pod con una politica che non è esplicitamente consentita viene eliminato.
        apiVersion: projectcalico.org/v3
        kind: NetworkPolicy
        metadata:
          name: log-denied-packets
        spec:
          types:
          - Ingress
          ingress:
          - action: Log
            destination: {}
            source: {}
          selector: projectcalico.org/orchestrator == 'k8s' && run == 'nginx'
          order: 3000
        ```
    
    
types
Questa politica Ingress si applica a tutte le richieste di traffico in entrata. Il valore Ingress è un termine generico per tutto il traffico in entrata e non fa riferimento al traffico solo dall'ALB Ingress IBM. ingress : action: L'azione " Log " scrive una voce di log per ogni richiesta che soddisfa questa politica nel percorso /var/log/syslog sul nodo di lavoro. : destination: Non viene specificata alcuna destinazione perché l’ selector a applica questa policy a tutti i pod con una determinata etichetta. : source: La presente politica si applica alle richieste provenienti da qualsiasi fonte.
selector
Il selettore deve indirizzare lo stesso traffico dell'accesso originale - nginx Kubernetes NetworkPolicy. Poiché questa è una politica Calico, devi includere projectcalico.org/orchestrator == 'k8s' per indicare che si applica a tutti i pod nello spazio dei nomi della politica, oltre al run == 'nginx' originale.
order
Le politiche Calico hanno degli ordini che determinano quando vengono applicate ai pacchetti di richiesta in entrata. Le politiche con ordini più bassi, come 1000, sono applicate per prime. Le politiche con ordini più alti sono applicate dopo le politiche con ordini più bassi. Ad esempio, una politica di ordine molto elevato, come 3000, viene effettivamente applicata per ultima, dopo che sono state applicate tutte le politiche di ordine inferiore. I pacchetti di richiesta in entrata passano per la catena di regole iptables e provano a mettere in corrispondenza prima le regole dalle politiche con un ordine più basso. Se corrisponde a una qualsiasi regola, il pacchetto viene accettato. Tuttavia, se un pacchetto non corrisponde ad alcuna regola, arriva all'ultima regola nella catena di regole iptables con l'ordine più alto. Per assicurarti che questa politica sia l'ultima politica nella catena, utilizza un ordine molto più alto, come 3000, rispetto alla politica che hai creato nel passo 1. Nota che Kubernetes NetworkPolicy vengono applicati come ordine 1000.
  1. Applica la politica.

    kubectl apply -f log-denied-packets.yaml
    
  2. Generare voci di log inviando richieste non consentite dalla politica creata nel passo 1. Ad esempio, prova a eseguire il ping del pod protetto dalla politica di rete da un pod o da un indirizzo IP non consentito.

  3. Controlla la presenza di voci di log scritte nel percorso /var/log/syslog . Gli indirizzi IP DST (destinazione) o SRC (origine) nella voce di log potrebbero essere diversi da quelli previsti a causa di proxy, NAT (Network Address Translation) e altri processi di rete. La voce di log ha un aspetto simile al seguente:

    Sep 5 14:34:40 <worker_hostname> kernel: [158271.044316] calico-packet: IN=eth1 OUT= MAC=08:00:27:d5:4e:57:0a:00:27:00:00:00:08:00 SRC=192.XXX.XX.X DST=192.XXX.XX.XX LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=52866 DF PROTO=TCP SPT=42962 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0
    
  4. Facoltativo: inoltra i log da /var/log/syslog a IBM Cloud Logs oppure a un server syslog esterno.