Come configurare il networking
Questa guida spiega come gestire la configurazione di rete del vostro cluster Kubernetes Hikube, utilizzando le NetworkPolicy Kubernetes e gli strumenti di osservabilità Cilium/Hubble.
Prerequisiti
- Un cluster Kubernetes Hikube distribuito (vedere l'avvio rapido)
- Il kubeconfig del cluster figlio configurato (
export KUBECONFIG=cluster-admin.yaml) - Nozioni di base sul networking Kubernetes (Services, Pod, namespace)
Fasi
1. Comprendere la rete Hikube
Cilium e il CNI (Container Network Interface) predefinito sui cluster Kubernetes Hikube. Fornisce il networking, la sicurezza di rete e l'osservabilità.
I cluster Hikube integrano:
- Cilium come CNI: gestione della rete pod-to-pod, dei servizi e dell'applicazione delle NetworkPolicy
- Hubble per l'osservabilità: visualizzazione dei flussi di rete in tempo reale e debugging
Per impostazione predefinita, tutti i pod possono comunicare tra loro senza restrizioni. Le NetworkPolicy permettono di limitare queste comunicazioni.
2. Creare una NetworkPolicy
Definite delle regole per controllare il traffico in entrata (Ingress) e in uscita (Egress) dei vostri pod:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 5432
Questa policy:
- Autorizza il traffico in entrata verso i pod
app: websolo dai podapp: frontendsulla porta 80 - Autorizza il traffico in uscita dei pod
app: websolo verso i podapp: databasesulla porta 5432 - Blocca tutto il resto del traffico in entrata e in uscita per i pod
app: web
3. Applicare e testare
# Applicare la NetworkPolicy
kubectl apply -f network-policy.yaml
# Verificare che la policy sia stata creata
kubectl get networkpolicies
# Testare la connettività autorizzata
kubectl exec -it deploy/frontend -- curl -s http://web-service:80
# Testare la connettività bloccata (dovrebbe fallire)
kubectl exec -it deploy/other-app -- curl -s --connect-timeout 3 http://web-service:80
Iniziate con policy permissive in modalita osservazione, poi restringete progressivamente. Una policy troppo restrittiva può interrompere la comunicazione tra i vostri servizi.
Esempio di policy predefinita per isolare un namespace:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
La policy default-deny-all blocca tutto il traffico nel namespace, incluso l'accesso DNS. Se la applicate, aggiungete immediatamente una policy che autorizzi il traffico DNS (porta 53) in uscita, altrimenti la risoluzione dei nomi sara interrotta.
4. Utilizzare Hubble per il debugging di rete
Hubble fornisce una visibilità completa sui flussi di rete del cluster. Utilizzatelo per diagnosticare i problemi di connettività:
# Verificare lo stato di Hubble
kubectl exec -n kube-system -it ds/cilium -- hubble status
# Osservare i flussi di rete in tempo reale
kubectl exec -n kube-system -it ds/cilium -- hubble observe
# Filtrare i flussi per un pod specifico
kubectl exec -n kube-system -it ds/cilium -- hubble observe --pod web-xxxxx
# Vedere i flussi rifiutati dalle NetworkPolicy
kubectl exec -n kube-system -it ds/cilium -- hubble observe --verdict DROPPED
# Filtrare per namespace
kubectl exec -n kube-system -it ds/cilium -- hubble observe --namespace production
Il comando hubble observe --verdict DROPPED e particolarmente utile per identificare i flussi bloccati da una NetworkPolicy e regolare le vostre regole.
Verifica
Verificate che le vostre policy di rete siano correttamente applicate:
# Elencare tutte le NetworkPolicy
kubectl get networkpolicies -A
# Dettagli di una policy
kubectl describe networkpolicy allow-web
# Verificare lo stato di Cilium
kubectl exec -n kube-system -it ds/cilium -- cilium status
Risultato atteso per kubectl get networkpolicies:
NAME POD-SELECTOR AGE
allow-web app=web 5m
Per approfondire
- Riferimento API -- Configurazione completa del cluster
- Concetti -- Architettura di rete e flussi di comunicazione
- Come distribuire un Ingress con TLS -- Esposizione HTTPS delle vostre applicazioni