112 lines
3.1 KiB
YAML
112 lines
3.1 KiB
YAML
|
|
# NetworkPolicies for the sso namespace (Keycloak)
|
||
|
|
#
|
||
|
|
# Allowed paths:
|
||
|
|
# INGRESS: Traefik (kube-system) → Keycloak :8080
|
||
|
|
# EGRESS: Keycloak → databases :5432 (PostgreSQL)
|
||
|
|
# EGRESS: Keycloak → mfa :8080 (privacyIDEA API)
|
||
|
|
# EGRESS: all pods → kube-dns :53 (UDP+TCP)
|
||
|
|
#
|
||
|
|
# Everything else is denied.
|
||
|
|
|
||
|
|
# ── Default deny all ingress and egress ──────────────────────────────────────
|
||
|
|
apiVersion: networking.k8s.io/v1
|
||
|
|
kind: NetworkPolicy
|
||
|
|
metadata:
|
||
|
|
name: default-deny-all
|
||
|
|
namespace: sso
|
||
|
|
spec:
|
||
|
|
podSelector: {}
|
||
|
|
policyTypes:
|
||
|
|
- Ingress
|
||
|
|
- Egress
|
||
|
|
---
|
||
|
|
# ── Allow ingress from Traefik (K3s ingress controller) ─────────────────────
|
||
|
|
# Traefik terminates TLS; Keycloak listens on HTTP :8080 internally.
|
||
|
|
# Traefik pods are in kube-system with label app.kubernetes.io/name=traefik.
|
||
|
|
apiVersion: networking.k8s.io/v1
|
||
|
|
kind: NetworkPolicy
|
||
|
|
metadata:
|
||
|
|
name: allow-ingress-from-traefik
|
||
|
|
namespace: sso
|
||
|
|
spec:
|
||
|
|
podSelector:
|
||
|
|
matchLabels:
|
||
|
|
app.kubernetes.io/name: keycloak
|
||
|
|
policyTypes:
|
||
|
|
- Ingress
|
||
|
|
ingress:
|
||
|
|
- from:
|
||
|
|
- namespaceSelector:
|
||
|
|
matchLabels:
|
||
|
|
kubernetes.io/metadata.name: kube-system
|
||
|
|
podSelector:
|
||
|
|
matchLabels:
|
||
|
|
app.kubernetes.io/name: traefik
|
||
|
|
ports:
|
||
|
|
- port: 8080
|
||
|
|
protocol: TCP
|
||
|
|
---
|
||
|
|
# ── Allow egress to PostgreSQL ───────────────────────────────────────────────
|
||
|
|
apiVersion: networking.k8s.io/v1
|
||
|
|
kind: NetworkPolicy
|
||
|
|
metadata:
|
||
|
|
name: allow-egress-to-postgres
|
||
|
|
namespace: sso
|
||
|
|
spec:
|
||
|
|
podSelector:
|
||
|
|
matchLabels:
|
||
|
|
app.kubernetes.io/name: keycloak
|
||
|
|
policyTypes:
|
||
|
|
- Egress
|
||
|
|
egress:
|
||
|
|
- to:
|
||
|
|
- namespaceSelector:
|
||
|
|
matchLabels:
|
||
|
|
net-kingdom/component: databases
|
||
|
|
ports:
|
||
|
|
- port: 5432
|
||
|
|
protocol: TCP
|
||
|
|
---
|
||
|
|
# ── Allow egress to privacyIDEA ──────────────────────────────────────────────
|
||
|
|
# Keycloak calls the privacyIDEA REST API via the privacyIDEA Keycloak Provider.
|
||
|
|
apiVersion: networking.k8s.io/v1
|
||
|
|
kind: NetworkPolicy
|
||
|
|
metadata:
|
||
|
|
name: allow-egress-to-privacyidea
|
||
|
|
namespace: sso
|
||
|
|
spec:
|
||
|
|
podSelector:
|
||
|
|
matchLabels:
|
||
|
|
app.kubernetes.io/name: keycloak
|
||
|
|
policyTypes:
|
||
|
|
- Egress
|
||
|
|
egress:
|
||
|
|
- to:
|
||
|
|
- namespaceSelector:
|
||
|
|
matchLabels:
|
||
|
|
net-kingdom/component: mfa
|
||
|
|
ports:
|
||
|
|
- port: 8080
|
||
|
|
protocol: TCP
|
||
|
|
---
|
||
|
|
# ── Allow egress DNS (all pods) ──────────────────────────────────────────────
|
||
|
|
apiVersion: networking.k8s.io/v1
|
||
|
|
kind: NetworkPolicy
|
||
|
|
metadata:
|
||
|
|
name: allow-egress-dns
|
||
|
|
namespace: sso
|
||
|
|
spec:
|
||
|
|
podSelector: {}
|
||
|
|
policyTypes:
|
||
|
|
- Egress
|
||
|
|
egress:
|
||
|
|
- to:
|
||
|
|
- namespaceSelector:
|
||
|
|
matchLabels:
|
||
|
|
kubernetes.io/metadata.name: kube-system
|
||
|
|
ports:
|
||
|
|
- port: 53
|
||
|
|
protocol: UDP
|
||
|
|
- port: 53
|
||
|
|
protocol: TCP
|