Service Mesh
 
 
Go to file
David Miller aa7961eccb Readme ++ 2025-06-10 15:59:32 +02:00
dashboard Initialer Commit – Prototyp mit Istio und Zero Trust 2025-06-10 15:08:35 +02:00
k8s Initialer Commit – Prototyp mit Istio und Zero Trust 2025-06-10 15:08:35 +02:00
metrics-api Initialer Commit – Prototyp mit Istio und Zero Trust 2025-06-10 15:08:35 +02:00
.DS_Store Initialer Commit – Prototyp mit Istio und Zero Trust 2025-06-10 15:08:35 +02:00
README.md Readme ++ 2025-06-10 15:59:32 +02:00

README.md

Prototyp-Dokumentation: Sichere DevOps Microservices mit Istio (Mac + Docker Desktop)

Voraussetzungen

Betriebssystem:

  • macOS mit Adminrechten

Tools, die du installiert hast:

  1. Homebrew (wenn nicht vorhanden):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. Mit Homebrew installiert:
brew install kubectl
brew install minikube
brew install istioctl
brew install helm
  1. Docker Desktop für Mac installieren und starten

Cluster & Istio aufsetzen

minikube start --driver=docker

Istio installieren:

curl -L https://istio.io/downloadIstio | sh -
cd istio-1.22.0
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y

Namespace & Sidecar-Injection vorbereiten

kubectl create namespace demo
kubectl label namespace demo istio-injection=enabled

Docker-Images erstellen & hochladen

DockerHub:

  • Accountname: deinName!

In den Verzeichnissen metrics-api und dashboard:

docker build -t deinName!/metrics-api:latest .
docker push deinName!/metrics-api:latest

docker build -t deinName!/dashboard:latest .
docker push deinName!/dashboard:latest

Hinweis: Dockerfile wurde angepasst, damit curl installiert ist.


Kubernetes YAMLs anpassen

In k8s/metrics-api.yaml und k8s/dashboard.yaml:

image: deinName!/metrics-api:latest
image: deinName!/dashboard:latest

Deployments ausrollen

kubectl apply -n demo -f k8s/metrics-api.yaml
kubectl apply -n demo -f k8s/dashboard.yaml

Optional vorher löschen:

kubectl delete -n demo -f k8s/*.yaml

mTLS und Zero Trust aktivieren

kubectl apply -n demo -f k8s/peerauth-strict.yaml
kubectl apply -n demo -f k8s/authorization-policy.yaml

Funktion testen

Um alle laufenden Pods in allen Namespaces zu sehen, verwende:

kubectl get pods --all-namespaces

Wenn du nur die Pods in deinem eigenen Namespace (demo) sehen willst:

kubectl get pods -n demo

Zugriff aus dem autorisierten dashboard-Pod

kubectl exec -n demo $(kubectl get pod -n demo -l app=dashboard -o jsonpath='{.items[0].metadata.name}') -c dashboard -- curl http://metrics-api:8000/metrics

Erwartete Ausgabe:

{
  "uptime": "72h",
  "build_status": "success",
  "deployment_frequency": "5/week"
}

🔒 Zugriff aus dem nicht autorisierten intruder-Pod

kubectl apply -n demo -f k8s/intruder.yaml
kubectl exec -n demo -it intruder -- sh
apk add curl
curl http://metrics-api:8000/metrics

Erwartete Ausgabe:

RBAC: access denied

Optional: Kiali starten und Visualisierung öffnen

🔧 Schritt 1: Prometheus installieren

Kiali benötigt Prometheus, um Metriken abzurufen.

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.22/samples/addons/prometheus.yaml

Schritt 2: Warten bis Prometheus läuft

kubectl get pods -n istio-system

Warte auf:

prometheus-xxxxxxxx   1/1   Running

🧭 Schritt 3: Kiali Dashboard starten

istioctl dashboard kiali

Das öffnet automatisch deinen Browser unter:

http://localhost:20001

🧠 Was du dort sehen kannst

  • Kommunikationsgraph der Namespaces
  • Übersicht zu mTLS-Status
  • Ingress-/Egress-Flows
  • Fehler-/Traffic-Statistiken

🔄 Prototyp erneut starten (nach Rechner-Neustart oder späterem Zeitpunkt)

1. Docker Desktop öffnen

Stelle sicher, dass Docker Desktop läuft, bevor du mit Minikube arbeitest.

2. Minikube starten

minikube start --driver=docker

Falls du den Cluster vorher gelöscht hast, kannst du ihn mit minikube delete zurücksetzen und dann wieder starten.

3. (Falls nötig) Istio wieder installieren

Nur wenn du Minikube komplett gelöscht hast:

cd istio-1.22.0
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
kubectl create namespace demo
kubectl label namespace demo istio-injection=enabled

4. Deployments und Sicherheitsrichtlinien anwenden

Navigiere in deinen YAML-Ordner:

cd ~/devops-prototype/k8s

Dann:

kubectl apply -n demo -f metrics-api.yaml
kubectl apply -n demo -f dashboard.yaml
kubectl apply -n demo -f peerauth-strict.yaml
kubectl apply -n demo -f authorization-policy.yaml
kubectl apply -n demo -f intruder.yaml

5. Warten bis die Pods laufen

kubectl get pods -n demo

Die Pods sollten den Status 2/2 Running haben.

6. Testen, ob alles läuft

kubectl exec -n demo $(kubectl get pod -n demo -l app=dashboard -o jsonpath='{.items[0].metadata.name}') -c dashboard -- curl http://metrics-api:8000/metrics

Wenn du die JSON-Daten erhältst, funktioniert alles korrekt.


Zusammenfassung Was jetzt läuft

Komponente Status
Minikube mit Docker Driver
Istio mit Sidecars
Zwei FastAPI-Services (metrics-api, dashboard)
Kommunikation abgesichert mit mTLS (STRICT)
Zugriff beschränkt mit Zero Trust Policy
Test mit autorisiertem Zugriff (dashboard)
Test mit blockiertem Zugriff (intruder)
Visualisierung mit Kiali