Commit 03272a32 authored by Nane Kratzke's avatar Nane Kratzke
Browse files

Ü1

parent e85c5772
......@@ -2,8 +2,8 @@ image: "transit/kubectl-plus:v1.19.4"
stages:
- prepare
- build
- deploy
- instrument
- traffic
- teardown
......@@ -11,7 +11,7 @@ labeling:
stage: prepare
script:
- NS=$(kubectl config view --output 'jsonpath={..namespace}')
- kubectl label ns $NS istio-injection=enabled --overwrite
- kubectl label ns $NS istio-injection=disabled --overwrite
secrets:
stage: prepare
......@@ -24,7 +24,7 @@ secrets:
"
space-container:
stage: build
stage: prepare
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
......@@ -41,22 +41,36 @@ space-container:
space-services:
stage: deploy
when: manual
script:
- |
for V in v1 v2 v3
do
ROLE=data VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=astros VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=position VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=data VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=astros VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=position VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=data VERSION=$V mo deploy/space-dep.yaml | kubectl apply -f -
ROLE=astros VERSION=$V mo deploy/space-dep.yaml | kubectl apply -f -
ROLE=position VERSION=$V mo deploy/space-dep.yaml | kubectl apply -f -
ROLE=data VERSION=$V mo deploy/space-svc.yaml | kubectl apply -f -
ROLE=astros VERSION=$V mo deploy/space-svc.yaml | kubectl apply -f -
ROLE=position VERSION=$V mo deploy/space-svc.yaml | kubectl apply -f -
for R in astros position data
do
ROLE=$R VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=$R VERSION=$V mo deploy/space-dep.yaml | kubectl apply -f -
ROLE=$R VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=$R VERSION=$V mo deploy/space-svc.yaml | kubectl apply -f -
done
done
instrumented-services:
stage: instrumented
when: manual
script:
- NS=$(kubectl config view --output 'jsonpath={..namespace}')
- kubectl label ns $NS istio-injection=disabled --overwrite
- |
for V in v1 v2 v3
do
for R in astros position data
do
ROLE=$R VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=$R VERSION=$V mo deploy/space-dep.yaml | kubectl apply -f -
ROLE=$R VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=$R VERSION=$V mo deploy/space-svc.yaml | kubectl apply -f -
done
done
space-traffic:
......@@ -79,15 +93,14 @@ shutdown:
- |
for V in v1 v2 v3
do
ROLE=data VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=astros VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=position VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=data VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=astros VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
ROLE=position VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
for R in astros position data
do
ROLE=$R VERSION=$V mo deploy/space-dep.yaml | kubectl delete -f - || true
ROLE=$R VERSION=$V mo deploy/space-svc.yaml | kubectl delete -f - || true
done
done
- |
for R in data astros position
for R in astros position data
do
ROLE=$R mo deploy/space-istio.yaml | kubectl delete -f - || true
done
\ No newline at end of file
# Lab 0x: Content-based Traffic Management
# Lab 09: Content-based Traffic Management
Im vorherigen Lab haben Sie gesehen, wie Sie bestehende Cloud-native Applikationen mittels eines Service Meshs instrumentieren können. Ihnen wurden auch bereit Basis Traffic-Management Fähigkeiten gezeigt.
In diesem Lab geht es darum, tiefer in dieses Traffic Management einzusteigen. Dies geschieht am Beispiel eines einfachen Space Surveillance Dienstes, der auf Basis des offenen [Open-Notify-Services](http://api.open-notify.org) basiert. *Open-Notify* stellt mittels dreier HTTP-basierter APIs aktuelle Positions-, Überflugs- und Besatzungsdaten der Internationalen Raum Station (ISS) in einem JSON-Format zur Verfügung.
Der in diesem Lab entwickelte Dienst bündelt zwei dieser APIs, um in einem Schritt Positions- und Besatzungsdaten der ISS laden zu können.
## Inhaltsverzeichnis
- [Lab 09: Content-based Traffic Management](#lab-09-content-based-traffic-management)
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
- [Vorbereitung](#vorbereitung)
- [Übung 01: Deploy des Space Surveillance Dienstes](#übung-01-deploy-des-space-surveillance-dienstes)
- [Übung 02: Instrumentieren des Space Surveillance Dienstes](#übung-02-instrumentieren-des-space-surveillance-dienstes)
- [Übung 03: Content-basiertes Traffic Management innerhalb des Space Surveillance Dienstes](#übung-03-content-basiertes-traffic-management-innerhalb-des-space-surveillance-dienstes)
- [Übung 04: Shutdown](#übung-04-shutdown)
- [Links](#links)
- [Was Sie mitnehmen sollten?](#was-sie-mitnehmen-sollten)
## Vorbereitung
......@@ -13,9 +30,39 @@
- **Key:** `REGISTRY_READ_TOKEN` (exakt so)
- **Value:** Fügen Sie hier das geheime Token (Schritt 2) aus der Zwischenablage ein.
- **Type:** `Variable` (nichts anderes)
- **Flags:** Selektieren Sie `Mask Variable` damit das geheime Token in Log-Dateien maskiert wird.
- **Flags:** Selektieren Sie `Mask Variable`, damit das geheime Token in Log-Dateien maskiert wird.
4. Setzen Sie bitte analog zu Schritt 3 die `KUBECONFIG` Variable in `Einstellungen -> CI/CD -> Variables` auf den Inhalt der Kubeconfig-Datei, die Sie für dieses Modul als Access Credential für den bereitgestellten Kubernetes Cluster erhalten haben (Type: `File`). Hierdurch erhält die Build Pipeline für das Deployment Zugriff auf den Cluster.
5. Installieren Sie **[Python 3](https://www.python.org/downloads)** (falls noch nicht geschehen).
6. Installieren Sie einen **HTTP Load Generator** wie bspw. **[salvo](https://github.com/tarekziade/salvo)** mittels `pip install salvo` oder `python3 -m install salvo` (je nachdem wie Ihre Python-Umgebung aufgesetzt ist). *Sie können natürlich mit anderen HTTP Load Generatoren arbeiten. Diese Anleitung nutzt jedoch `salvo`. Die genutzten Parameter lassen sich jedoch analog auf andere Tools übertragen.*
7. Installieren Sie **[Firefox](https://www.mozilla.org/de/firefox/new/)**, um Content-basiertes Routing nachvollziehen zu können. Das Deployment dieses Labs detektiert hierzu den Firefox-Browser *(wollen Sie diesen nicht installieren, können Sie die entsprechende Regel natürlich auch für andere Browser abändern)*.
5. **Falls noch nicht geschehen:** Installieren Sie **[Lens](https://k8slens.dev)** und ergänzen Sie den bereitgestellten Cluster, den Sie in Schritt 4 auch für die Build-Pipeline eingerichtet haben.
6. **Falls noch nicht geschehen:** Installieren Sie **[Python 3](https://www.python.org/downloads)**.
7. Installieren Sie einen **HTTP Load Generator** wie bspw. **[salvo](https://github.com/tarekziade/salvo)** mittels `pip install salvo` oder `python3 -m install salvo` (je nachdem wie Ihre Python-Umgebung aufgesetzt ist). *Sie können natürlich mit anderen HTTP Load Generatoren arbeiten. Diese Anleitung nutzt jedoch `salvo`. Die genutzten Parameter lassen sich jedoch analog auf andere Tools übertragen.*
8. Installieren Sie **[Firefox](https://www.mozilla.org/de/firefox/new/)**, um Content-basiertes Routing nachvollziehen zu können. Das Deployment dieses Labs detektiert hierzu den Firefox-Browser *(wollen Sie diesen nicht installieren, können Sie die entsprechende Regel natürlich auch für andere Browser abändern)*.
## Übung 01: Deploy des Space Surveillance Dienstes
In diesem Schritt wird ein kleiner Open Notify aggrgierender Space-Data-Service (noch ohne jegliche Service-Mesh-Instrumentierung) deployed.
- Triggern Sie hierzu den Bau der Build-Pipeline in Ihrem Projekt (z.B. durch einen Commit) und starten Sie anschließend in Gitlab (`CI/CD -> Pipelines`) den manuellen `space-services`-Job in der `deploy`-Stage.
- Warten Sie ein paar Sekunden, bis dieser Job abgeschlossen wurde und die entsprechenden K8s-Ressourcen angelegt wurden. Vollziehen Sie den Deployment-Status in Lens nach.
- Leiten Sie anschließend den Port des Space-Data-Services an Ihr lokales System weiter. Geben Sie hierzu in einem Lens-Terminal folgenden Befehl ein:
```bash
kubectl port-forward svc/space-data-svc 8888:80
```
- Navigieren Sie mit einem Browser zu [http://localhost:8888](http://localhost:8888). Sie sollten eine JSON-Datei mit den aktuellen Positions- und Besatzungsdaten des Open-Notify Dienstes sehen.
- Reloaden Sie diese Datei im Browser ein paar mal. Sie werden sehen, dass in den `from`-Feldern der `data`-, `position`- und `astros`-Objekten der JSON-Datei immer wieder andere Hostnamen (Pods die die Requests beantwortet haben) auftauchen.
- Versuchen Sie die Topologie dieses Dienstes anhand der folgenden Daten abzuleiten und aufzuzeichnen:
- `deploy/space-dep.yaml`
- `deploy/space-svc.yaml`
- `space/service.py` (Implementierung)
- `.gitlab-ci.yaml` (`space-services`-Job der `deploy`-Stage)
## Übung 02: Instrumentieren des Space Surveillance Dienstes
## Übung 03: Content-basiertes Traffic Management innerhalb des Space Surveillance Dienstes
## Übung 04: Shutdown
Um Ihren Namespace wieder "freizumachen", navigieren Sie in Gitlab bitte auf `CI/CD -> Pipelines` und triggern Sie manuell den `shutdown` Job in der `teardown` Stage.
## Links
## Was Sie mitnehmen sollten?
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment