|
|
||
|---|---|---|
| dashboard | ||
| k8s | ||
| metrics-api | ||
| .DS_Store | ||
| README.md | ||
README.md
Prototyp-Dokumentation: Sichere DevOps Microservices mit Istio (Mac + Docker Desktop)
Voraussetzungen
✅ Betriebssystem:
- macOS mit Adminrechten
✅ Tools, die du installiert hast:
- Homebrew (wenn nicht vorhanden):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Mit Homebrew installiert:
brew install kubectl
brew install minikube
brew install istioctl
brew install helm
- 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 deletezurü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 | ✅ |