Kubernetes Networking & Services¶
Un Service espone uno o più Pod tramite un endpoint stabile. Fa da “bridge” tra Pod e il resto del cluster. È accessibile solo internamente.
Espone il servizio su una porta specifica di ogni Nodo (range standard: 30000–32767). Rende il servizio accessibile dall'esterno tramite
<NodeIP>:<NodePort>.
Espone il servizio esternamente utilizzando il Load Balancer del cloud provider (AWS, GCP, Azure).
Gestisce l'accesso esterno ai servizi, tipicamente HTTP/S. Fornisce routing basato su hostname e path, terminazione SSL e load balancing applicativo.
Risorsa Custom (CRD) specifica per Traefik. Offre una configurazione più flessibile e nativa per gestire middleware, entrypoints e routing avanzato.
In questo scenario, isoliamo i Pod con label app: database nel namespace my-namespace, permettendo l'ingresso esclusivamente dai Pod che hanno label role: client
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-external-namespace-pod
namespace: my-namespace # Namespace di destinazione (dove sta il DB)
spec:
podSelector:
matchLabels:
app: database # Target: i pod che devono essere protetti
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: frontend # Filtra il namespace sorgente
podSelector:
matchLabels:
role: client # Filtra il pod specifico dentro quel namespace
ports:
- protocol: TCP
port: 5432 # Opzionale: restringe il traffico a una porta specifica