In questo articolo affronteremo i seguenti temi:
Per controllare il traffico in entrata ed uscita di un Pod, in Kubernetes si usano le NetworkPolicies. Il loro funzionamento è simile a quello di un firewall, tramite delle regole bloccano o permettono la comunicazione del Pod.
Di default i Pod sono liberi di comunicare tra di loro all’interno del Cluster. Grazie alle NetworkPolicies è possibile impedire la comunicazione di un Pod sia in Igress che Egress.
Come si scrive una NetworkPolicy?
Nella sezione podSelector vanno indicati i Pod ai quali verrà applicata la NetworkPolicy.
Dato che i nomi dei Pod non sono consistenti, e possono variare, vengono usate delle labels per consentire alla NetworkPolicy di selezionare i Pod corretti; in questo caso, i Pod presi in considerazione saranno quelli che hanno la lables: “app: blog”.
Nella sezione policyTypes, va indicato che tipo di traffico la NetworkPolicy andrà a negare, gli unici due valori accettati sono Ingress ed Egress.
Pertanto, questa NetworkPolicy andrà ad impedire ogni comunicazione in ingresso ad uscita da tutti i Pod con la lables: “app: blog”.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: networkpolicy
spec:
podSelector:
matchLabels:
app: blog
policyTypes:
- Ingress
- Egress
Scrivere le regole di una NetworkPolicy
La NetworkPolicy precedente blocca ogni tipo di comunicazione dei Pod che hanno la lables “app: blog”. Nel prossimo esempio invece sarà permesso solo il traffico in entrata da una fonte specifica.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: networkpolicy
spec:
podSelector:
matchLabels:
app: blog
policyTypes:
- Ingress
- Egress
ingress:
- from:
podSelector:
matchLabels:
app: source
Questa NetworkPolicy va sempre a bloccare tutto il traffico in uscita, ma blocca tutto il traffico in entrata, eccetto quello proveniente dai pod che hanno la label: “app: source”.
Nello stesso modo è possibile aggiungere regole per consentire ai Pod di comunicare verso altri Pod specifici aggiungendo la sezione egress, ed indicando i Pod desiderati.
...
egress:
- to:
podSelector:
matchLabels:
app: destination
È possibile, scrivere una regola che fa riferimento a tutti i Pod all’interno di un namespace, per farlo si usa il selector namespaceSelector, non è possibile indicare il namespace direttamente con il suo nome, analogamente a prima, è necessario usare una label del namespace.
...
ingress:
- from:
namespaceSelector:
matchLabels:
role: dev
In questo caso, la regola concede a tutti Pod contenuti nel namespace che ha la label “role: dev” di comunicare in entrata.
Le regole possono fare riferimento direttamente a degli IP, solitamente queste regole vengono usate per comunicazioni con l’esterno.
...
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
Tutte queste regole possono essere combinate, e scritte in un’unica NetworkPolicy; di seguito l’esempio di una NetworkPolicy contr regole, due che consentono ai Pod con la label “app: blog” di ricevere traffico, ed una che consente di comunicare verso dei Pod specifici.
Condividi l’articolo!!
-
Linkedin
-
Twitter
-
Facebook
-
Whatsapp
Scopri i nostri corsi!
Pascal Carone
DevOps Instructor & Engineer
Sono conosciuto per la mia capacità di spiegare concetti complessi in termini semplici e per la mia dedizione ad aiutare i miei studenti ad avere successo. Sviluppo e insegno corsi Kubernetes e Google Cloud e mi impegno a rimanere aggiornato sugli ultimi progressi tecnologici.