Externe Services wie z.B. eine SQL Datenbank sollten als Services in Kubernetes definiert werden, am besten mit einem eigenen Namespace und Network-Policies.
Zunächst sollte ein Namespace für die Anwendung erstellt werden. Für diesen können dann individuelle Policies erstellt werden. Dazu wird die Datei postgres-namespace.json erstellt:
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "postgres-zone",
"labels": {
"name": "postgres-zone"
}
}
}
Mit kubectl create -f postgres-namespace.json wird der Namespace erstellt.
Als Beispiel dient eine Postgres Datenbank, die in der Datei postgres.yaml definiert wird:
kind: Service apiVersion: v1 metadata: name: postgres
namespace: postgres-zone
labels:
app: postgres spec: type: ExternalName externalName: postgres.example.com
In Kubernetes ist der Datenbank Service dann uner dem Namen postgres bekannt, angesprochen wird der Host postgres.example.com.
Mit der Network Policy wird der Zugriff auf den Postgres eingeschränkt.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: postgres-network-policy
namespace: postgres-zone
spec:
podSelector:
matchLabels:
app: postgres
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: pguser
ports:
- protocol: TCP
port: 5432
Diese Policy lässt nur noch Zugriffe von Pods zu, die als Label "role=pguser" gesetzt haben.