Externe Services

Externe Services wie z.B. eine SQL Datenbank sollten als Services in Kubernetes definiert werden, am besten mit einem eigenen Namespace und Network-Policies.

Namespace

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.

Service

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.

Network Policy

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.