Erstelle ein Kubernetes-Clusters in NETWAYS Web Services und AWS mit Claudie

27 Mai, 2026

Daniel Bodky
Daniel Bodky
Senior Platform Advocate

Daniel kam nach Abschluss seines Studiums im Oktober 2021 zu NETWAYS und beriet zwei Jahre lang Kunden zu den Themen Icinga2 und Kubernetes, bevor es ihn weiter zu Managed Services zog. Seitdem redet und schreibt er viel über cloud-native Technologien und ihre spannenden Anwendungsfälle und gibt sein Bestes, um Neues und Interessantes rund um Kubernetes zu vermitteln. Nebenher schreibt er in seiner Freizeit kleinere Tools für verschiedenste Einsatzgebiete, nimmt öfters mal ein Buch in die Hand oder widmet sich seinem viel zu großen Berg Lego. In der wärmeren Jahreszeit findet man ihn außerdem oft auf dem Fahrrad oder beim Wandern.

von | Mai 27, 2026

Diese Anleitung führt dich durch den Aufbau eines Kubernetes-Clusters mit 7 Hosts, der über NETWAYS Web Services (OpenStack) und AWS verteilt ist und durchgehend von Claudie verwaltet wird.


Samuel Stolicny

Dieser Artikel wurde in Zusammenarbeit mit Samuel Stoličný von Berops erstellt. Du findest ihn auf LinkedIn, wenn du mehr über Claudie erfahren möchtest.


Warum dieses Setup

Der Betrieb desselben Clusters bei einem deutschen OpenStack-Anbieter und einem Hyperscaler bietet dir zwei Vorteile, die du bei einem der beiden Anbieter allein nur schwer erreichen können. Mit NWS bleiben deine Kernkomponenten auf einer Infrastruktur in der EU mit vorhersehbaren Preisen und direktem Zugriff auf die OpenStack-Expertise von NETWAYS, was für die Datensouveränität und den betrieblichen Support wichtig ist.

AWS stellt zusätzliche Kapazitäten und verwaltete Funktionen (Route 53, Datenbanken, Message Queues, Lambda) nur einen Schritt entfernt über das Clusternetzwerk bereit, so dass du darauf zugreifen kannst, ohne den gesamten Cluster zu verschieben. Claudie fügt die beiden Anbieter zu einer Kubernetes-Controlplane zusammen, so dass Anwendungen über beide wie in einer einzigen Cloud ausgerollt werden können.

Was Du bekommst

  • 3 Controlplanenodes (1 NWS, 2 AWS), die etcd ein Quorum geben (toleriert den Ausfall eines Nodes).
  • 4 Workernodes (3 NWS, 1 AWS). Die NWS-lastige Aufteilung entspricht der Absicht, die
  • die meisten Arbeitslasten auf die EU-eigene Infrastruktur zu verlagern, während einige Kapazitäten bei AWS laufen.
  • Ein WireGuard VPN, das alle sieben Knoten zu einem Clusternetzwerk verbindet.
  • Cilium CNI und Longhorn Speicher von Claudie installiert.

Voraussetzungen

  • Ein Kubernetes-Cluster, auf dem Claudie läuft (der „Management-Cluster“). Zum Testen reicht ein lokaler kind- oder Minikube-Cluster aus. Für die Produktion solltest du einen vollständigen Cluster verwenden, da Claudie den Status der verwalteten Cluster darin speichert.
  • kubectl für diesen Cluster konfiguriert.
  • Ein MyNWS-Konto mit einem Kontingent für mindestens 4 VMs, 4 variable IPs und 200 GB Speicherplatz in der Region HetznerNBG4.
  • Ein AWS-Konto mit der Berechtigung, EC2-Instanzen, VPCs und Sicherheitsgruppen in us-east-2 (oder einer anderen von Ihnen bevorzugten Region) zu erstellen.

Schritt 1 – Claudie installieren

Installiere zuerst cert-manager. Claudie verwendet ihn für seinen Admission-Webhook:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.3/cert-manager.yaml

Dann installiere Claudie selbst:

kubectl apply -f https://github.com/berops/claudie/releases/latest/download/claudie.yaml

Warte eine Minute und überprüfe dann, ob die Pods im Namespace claudie laufen:

kubectl get pods -n claudie
NAME                                 READY   STATUS    RESTARTS   AGE
ansibler-7b5f8c6d49-qvz2w            1/1     Running   0          60s
claudie-operator-59dd646bcf-bjsdr    1/1     Running   0          60s
kube-eleven-bdc799684-xlwws          1/1     Running   0          60s
kuber-7cc7cb797d-bvsrv               1/1     Running   0          60s
manager-69f96bb548-l5wqr             1/1     Running   0          60s
minio-0                              1/1     Running   0          60s
minio-1                              1/1     Running   0          60s
minio-2                              1/1     Running   0          60s
minio-3                              1/1     Running   0          60s
mongodb-858994c5cb-x8w77             1/1     Running   0          60s
nats-0                               2/2     Running   0          60s
nats-1                               2/2     Running   0          60s
nats-2                               2/2     Running   0          60s
terraformer-667b9f4556-dkx4x         1/1     Running   0          60s

Alle Pods sollten Running sein. Wenn einige noch nicht so weit sind, warte und prüfe den Status dann erneut.
Weitere Einzelheiten (einschließlich optionaler Netzwerkrichtlinien für das Hardening des Clusters) findest du in der ausführlichen Anleitung von Claudie.

Schritt 2 – Provider Credentials erstellen

Du benötigst einen Satz MyNWS Application Credentials und einen AWS IAM Access Key.

NETWAYS Web Services (OpenStack Application Credential)

Die NWS-Authentifizierung erfolgt normalerweise über die NWS-ID (OIDC). Claudie benötigt statische Anmeldeinformationen. Der Arbeitsablauf ist also zweistufig: Melde dich mit deinem NWS-ID Project User an und erstelle dann eine OpenStack Application Credential, die Claudie direkt verwenden kann.

Öffne in der NWS-Kundenoberfläche dein OpenStack-Projekt und schalte die Option OpenStack Project User ein. Notiere dir den Benutzernamen (er sieht aus wie <your-id>-openstack-<hash>) und das Passwort.

Installiere die OpenStack CLI (openstack) und authentifiziere dich mit dem Project User:

export OS_AUTH_URL=https://cloud.netways.de:5000/v3/
export OS_IDENTITY_API_VERSION=3
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USERNAME=<your-project-user>          # e.g. 21133-openstack-427a2
export OS_PROJECT_NAME=<your-project-name>      # often the same string
read -s OS_PASSWORD; export OS_PASSWORD         # read password from clipboard, then Enter

Erstelle die Anmeldeinformationen für die Anwendung:

openstack application credential create --role member claudie -f shell

id="..."
secret="..."
project_id="..."

Speichere die id und secret. Das Secret wird nur einmal angezeigt. Die project_id aus der Ausgabe ist auch das, was du für das Secret benötigst. Schaue dann nach der Domain-ID:

openstack project show $(openstack token issue -c project_id -f value) \
    -c domain_id -f value

default

MyNWS verwendet default für die Domain-ID.

MyNWS veröffentlicht auch eine herunterladbare RC-Datei für die Application Credentials (app-cred-claudie-openrc.sh), sobald diese erstellt wurde. Die Datei enthält OS_APPLICATION_CREDENTIAL_ID und OS_APPLICATION_CREDENTIAL_SECRET, die mit den obigen Werten übereinstimmen.

AWS (IAM Access Key)

Erstelle einen IAM-Benutzer mit AmazonEC2FullAccess (oder einer enger gefassten Richtlinie, die EC2, VPC und Sicherheitsgruppen abdeckt) und notiere die Access Key ID und den Secret Access Key.

Schritt 3 – Kubernetes Secrets erstellen

Erstelle einen Namespace für deine Credentials und füge beide Secrets hinzu:

kubectl create namespace claudie-secrets

kubectl create secret generic netways-secret \
    --namespace=claudie-secrets \
    --from-literal=authurl='https://cloud.netways.de:5000/v3/' \
    --from-literal=domainid='default' \
    --from-literal=projectid='<your-nws-project-id>' \
    --from-literal=applicationcredentialid='<your-credential-id>' \
    --from-literal=applicationcredentialsecret='<your-credential-secret>'

kubectl create secret generic aws-secret \
    --namespace=claudie-secrets \
    --from-literal=accesskey='<your-aws-access-key-id>' \
    --from-literal=secretkey='<your-aws-secret-access-key>'

Schritt 4 – Erstelle die Claudie Manifest-Datei

Speichere das Folgende als netways-aws-cluster.yaml:

apiVersion: claudie.io/v1beta1
kind: InputManifest
metadata:
  name: netways-aws-cluster
  labels:
    app.kubernetes.io/part-of: claudie
spec:
  providers:
    - name: netways-1
      providerType: openstack
      secretRef:
        name: netways-secret
        namespace: claudie-secrets

    - name: aws-1
      providerType: aws
      secretRef:
        name: aws-secret
        namespace: claudie-secrets

  nodePools:
    dynamic:
      - name: nws-ctrl
        providerSpec:
          name: netways-1
          region: HetznerNBG4
          zone: HetznerNBG4
          externalNetworkName: public-network
        count: 1
        serverType: s1.medium
        image: "Ubuntu Noble 24.04 LTS"
        storageDiskSize: 50

      - name: aws-ctrl
        providerSpec:
          name: aws-1
          region: us-east-2
          zone: us-east-2a
        count: 2
        serverType: t3.medium
        image: ami-0ea3c35c5c3284d82
        storageDiskSize: 50

      - name: nws-cmp
        providerSpec:
          name: netways-1
          region: HetznerNBG4
          zone: HetznerNBG4
          externalNetworkName: public-network
        count: 3
        serverType: s1.medium
        image: "Ubuntu Noble 24.04 LTS"
        storageDiskSize: 50

      - name: aws-cmp
        providerSpec:
          name: aws-1
          region: us-east-2
          zone: us-east-2a
        count: 1
        serverType: t3.medium
        image: ami-0ea3c35c5c3284d82
        storageDiskSize: 50

  kubernetes:
    clusters:
      - name: netways-aws-cluster
        version: v1.32.0
        network: 192.168.2.0/24
        pools:
          control:
            - nws-ctrl
            - aws-ctrl
          compute:
            - nws-cmp
            - aws-cmp

Anmerkungen zu NWS-spezifischen Werten:

  • serverType: s1.medium ist die Allzweck-Variante von NWS (4 vCPU, 4 GB RAM, 50 GB lokale Festplatte). Claudie bootet VMs direkt aus dem Image, so dass jedes s*.*, s2.*, p1.* oder d1.* Flavor mit einer lokalen Festplatte funktioniert. Liste die verfügbaren Varianten mit openstack flavor list.
  • storageDiskSize: 50 ist unabhängig zur oben erwähnten lokalen Festplatte Es erstellt ein zusätzliches Cinder-Volume, das Claudie an jeden Workernode für Longhorn-Speicher anhängt. Controlplane-Nodes ignorieren dieses Feld.
  • image: "Ubuntu Noble 24.04 LTS" ist das offizielle von NWS genutzte Ubuntu 24.04 Image. Finde den aktuellen Namen mit openstack image list --public. AWS AMI ami-0ea3c35c5c3284d82 ist Ubuntu 24.04 LTS in us-east-2. Suche das richtige AMI für deine Region mit dem Ubuntu AMI Locator.

Schritt 5 – Bereitstellen des Clusters

Installiere das Manifest:

kubectl apply -f netways-aws-cluster.yaml

inputmanifest.claudie.io/netways-aws-cluster created

Claudie beginnt mit der Bereitstellung. Überprüfe den Fortschritt mit:

kubectl get inputmanifest -n claudie

NAME                  STATUS
netways-aws-cluster   IN_PROGRESS

Der Build durchläuft vier Phasen: Terraformer (Bereitstellung von VMs), Ansibler (Konfiguration von Nodes, Installation von WireGuard), KubeEleven (Ausführung von kubeadm) und Kuber (Installation von CNI, Storage und Post-Setup). Ein 7-Node-Build dauert in der Regel 12 bis 18 Minuten.
Wenn er fertig ist, siehst du folgende Ausgabe:

kubectl get inputmanifest -n claudie

NAME                  STATUS
netways-aws-cluster   WATCHING_FOR_CHANGES

WATCHING_FOR_CHANGES bedeutet, dass Claudie die Bereitstellung abgeschlossen hat und das Manifest auf zukünftige Änderungen überwacht.

Schritt 6 – Zugriff auf den Cluster

Claudie schreibt die generierte kubeconfig als Kubernetes Secret in den Namespace claudie. Exportiere sie und konfiguriere die kubeconfig für kubectl:

kubectl get secrets -n claudie -l claudie.io/output=kubeconfig \
    -o jsonpath='{.items[0].data.kubeconfig}' | base64 -d > netways-aws.kubeconfig
export KUBECONFIG=$PWD/netways-aws.kubeconfig
kubectl get nodes -o wide

NAME                  STATUS   ROLES           AGE   VERSION   INTERNAL-IP   OS-IMAGE
aws-ctrl-xxxxxxx-01   Ready    control-plane   5m    v1.32.0   192.168.2.2   Ubuntu 24.04.1 LTS
aws-ctrl-xxxxxxx-02   Ready    control-plane   5m    v1.32.0   192.168.2.3   Ubuntu 24.04.1 LTS
aws-cmp-yyyyyyy-01    Ready    <none>          3m    v1.32.0   192.168.2.7   Ubuntu 24.04.1 LTS
nws-ctrl-zzzzzzz-01   Ready    control-plane   6m    v1.32.0   192.168.2.1   Ubuntu 24.04.4 LTS
nws-cmp-wwwwwww-01    Ready    <none>          3m    v1.32.0   192.168.2.4   Ubuntu 24.04.4 LTS
nws-cmp-wwwwwww-02    Ready    <none>          3m    v1.32.0   192.168.2.5   Ubuntu 24.04.4 LTS
nws-cmp-wwwwwww-03    Ready    <none>          3m    v1.32.0   192.168.2.6   Ubuntu 24.04.4 LTS

Sieben Nodes, drei im Control-Plane, vier Worker, alle im Zustand Ready. Die Spalte INTERNAL-IP zeigt die WireGuard-Overlay-Adressen, die Claudie aus dem 192.168.2.0/24 WireGuard-Netzwerkbereich in deinem Manifest zugewiesen hat. Der gesamte Netzwerkverkehr zwischen den Nodes fließt verschlüsselt über dieses Netzwerk, unabhängig davon, in welcher Cloud sich die Nodes befinden.

In einem repräsentativen Testaufbau wurde die warme Cross-Cloud Roundtrip-Latenz zwischen MyNWS in Nürnberg und AWS in Ohio (us-east-2a) über das WireGuard-Mesh mit 219-220 ms gemessen, was im Wesentlichen dem Minimum für transatlantische Glasfaser entspricht. NWS-zu-NWS-Verbindungen in der gleichen Region liegen bei etwa 1 ms.

Schritt 7 – Aufräumen

Lösche das InputManifest, um die gesamte bereitgestellte Infrastruktur abzubauen:

kubectl delete inputmanifest netways-aws-cluster -n claudie

inputmanifest.claudie.io "netways-aws-cluster" deleted

Terraformer zerstört VMs, Netzwerke, Router, Sicherheitsgruppen und freie IPs in beiden Clouds. Der Teardown dauert in der Regel 3 bis 5 Minuten.

Fehlersuche

  • NWS-ID OIDC fordert dich immer wieder zur Eingabe eines Tokens auf. Lege keine OIDC-Tokens im Secret ab Claudie benötigt statische Anmeldedaten für die Anwendung. Schalte den OpenStack Project User in der NWS-Kundenschnittstelle ein und führe dann openstack application credential create in dieser Session aus.
  • 401 Unauthorized bei Erstellung des Manifests. Dem Secret fehlt einer der fünf erforderlichen Werte (authurl, domainid, projectid, applicationcredentialid, applicationcredentialsecret) oder es sind veraltete Werte eines rotierten Credentials konfiguriert.

Was kommt als Nächstes?

Unser Portfolio

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Wie hat Dir unser Artikel gefallen?