Zum Inhalt

Etcd Setup und PKI

Ziel

In diesem Projekt geht es um das Verständnis von etcd als zentrale Komponente eines Kubernetes-Clusters. Sie werden:

  • Etcd herunterladen und installieren
  • PKI-Zertifikate für sichere Kommunikation erstellen
  • Etcd mit verschiedenen Sicherheitsstufen starten
  • Die Kommunikation zwischen Client und Server testen

Hilfsmittel

  • Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien eigenständig zu lösen.
  • Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.

Aufgabe 1: Etcd Installation

  • Erstellen Sie ein Arbeitsverzeichnis und wechseln Sie hinein

    mkdir etcd
    cd etcd
    
  • Laden Sie etcd herunter und extrahieren Sie die Binärdateien

    wget https://github.com/etcd-io/etcd/releases/download/v3.6.0-rc.3/etcd-v3.6.0-rc.3-linux-amd64.tar.gz
    tar -xvf etcd-v3.6.0-rc.3-linux-amd64.tar.gz
    cp etcd-v3.6.0-rc.3-linux-amd64/etcd* .
    rm -r etcd-v3.6.0-rc.3-linux-amd64.tar.gz etcd-v3.6.0-rc.3-linux-amd64
    
  • Testen Sie die Installation, indem Sie etcd ohne Parameter starten

    ./etcd
    
  • Öffnen Sie ein zweites Terminal und testen Sie den Zugriff auf etcd

    ./etcdctl put test 123
    ./etcdctl get test
    
  • Stoppen Sie etcd mit Ctrl+C im ersten Terminal

Aufgabe 2: PKI-Zertifikate erstellen

Erstellen Sie die notwendigen Konfigurationsdateien für die Zertifikatserstellung:

Hinweis

  • ⚠ Nutzen Sie die Config-Dateien aus den Folien
  • Erstellen Sie eine Datei ca.cnf für das Root-Zertifikat
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
cat > ca.cnf << EOF
# ca.cnf
[ req ]
distinguished_name = dn
x509_extensions    = ca_ext
prompt             = no

[ dn ]
C  = DE
O  = Corewire GmbH
CN = Corewire Etcd Root CA

[ ca_ext ]
basicConstraints       = CA:true
keyUsage               = keyCertSign, cRLSign
EOF
  • Ermitteln Sie die IP-Adresse Ihrer Controlplane-Nodes; diese sind zum Beispiel schon in ihrer SSH-Config vordefiniert

    cat ~/.ssh/config | grep controlplane -A 1
    
  • Erstellen Sie eine Datei etcd-server.cnf für das Server-Zertifikat (ersetzen Sie die IP-Adressen entsprechend)

Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
cat > etcd-server.cnf << EOF
# etcd-server.cnf
[ req ]
distinguished_name = dn
req_extensions     = server_ext
prompt             = no

[ dn ]
C  = DE
O  = Corewire GmbH
CN = Corewire Etcd

[ server_ext ]
basicConstraints       = CA:FALSE
keyUsage               = digitalSignature, keyEncipherment
extendedKeyUsage       = clientAuth, serverAuth
subjectAltName         = DNS:etcd.kubernetes.local, IP:127.0.0.1, IP:YOUR_IP_1, IP:YOUR_IP_2, IP:YOUR_IP_3
EOF
  • Erstellen Sie eine Datei etcd-client.cnf für das Client-Zertifikat
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
cat > etcd-client.cnf << EOF
# etcd-client.cnf
[ req ]
distinguished_name = dn
req_extensions     = client_ext
prompt             = no

[ dn ]
C  = DE
O  = Corewire GmbH
CN = Corewire Etcd

[ client_ext ]
basicConstraints       = CA:FALSE
keyUsage               = digitalSignature, keyEncipherment
extendedKeyUsage       = clientAuth
EOF

Aufgabe 3: Zertifikate generieren

Hinweis

  • ⚠ Nutzen Sie die Befehle aus den Folien
  • Erstellen Sie das Root-Zertifikat (CA)
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
# Privaten Schlüssel erzeugen
openssl genrsa -out ca.key 4096

# Root-Zertifikat erstellen
openssl req -new -x509 -sha512 -days 3650 \
  -key ca.key \
  -out ca.crt \
  -config ca.cnf

# Details anzeigen
openssl x509 -in ca.crt -text -noout
  • Erstellen Sie das Server-Zertifikat
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
# Privaten Schlüssel erzeugen
openssl genrsa -out etcd-server.key 4096

# Certificate Signing Request erstellen
openssl req -new -sha512 \
  -key "etcd-server.key" \
  -out "etcd-server.csr" \
  -config "etcd-server.cnf"

# Zertifikat erstellen
openssl x509 -req -days 365 -sha512 \
  -in "etcd-server.csr" \
  -out "etcd-server.crt" \
  -CA "ca.crt" -CAkey "ca.key" -CAcreateserial \
  -copy_extensions copyall
  • Erstellen Sie das Client-Zertifikat
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
# Privaten Schlüssel erzeugen
openssl genrsa -out etcd-client.key 4096

# Certificate Signing Request erstellen
openssl req -new -sha512 \
  -key "etcd-client.key" \
  -out "etcd-client.csr" \
  -config "etcd-client.cnf"

# Zertifikat erstellen
openssl x509 -req -days 365 -sha512 \
  -in "etcd-client.csr" \
  -out "etcd-client.crt" \
  -CA "ca.crt" -CAkey "ca.key" -CAcreateserial \
  -copy_extensions copyall

Aufgabe 4: Etcd mit TLS starten

  • Starten Sie etcd mit TLS-Verschlüsselung
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
./etcd \
  --advertise-client-urls https://127.0.0.1:2379 \
  --listen-client-urls https://0.0.0.0:2379 \
  --cert-file etcd-server.crt \
  --key-file etcd-server.key
  • Testen Sie den Zugriff mit TLS (neues Terminal)
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
./etcdctl \
  --endpoints https://127.0.0.1:2379 \
  --cacert ca.crt \
  put test 123

./etcdctl \
  --endpoints https://127.0.0.1:2379 \
  --cacert ca.crt \
  get test
  • Stoppen Sie etcd mit Ctrl+C

Aufgabe 5: Etcd mit Client-Authentifizierung

  • Starten Sie etcd mit TLS und Client-Authentifizierung
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
./etcd \
  --advertise-client-urls https://127.0.0.1:2379 \
  --listen-client-urls https://0.0.0.0:2379 \
  --cert-file etcd-server.crt \
  --key-file etcd-server.key \
  --client-cert-auth \
  --trusted-ca-file ca.crt
  • Testen Sie den Zugriff ohne Client-Zertifikat (sollte fehlschlagen)
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
./etcdctl \
  --endpoints https://127.0.0.1:2379 \
  --cacert ca.crt \
  put test 123
  • Testen Sie den Zugriff mit Client-Zertifikat
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
./etcdctl \
  --endpoints https://127.0.0.1:2379 \
  --cacert ca.crt \
  --key etcd-client.key \
  --cert etcd-client.crt \
  put test 123

./etcdctl \
  --endpoints https://127.0.0.1:2379 \
  --cacert ca.crt \
  --key etcd-client.key \
  --cert etcd-client.crt \
  get test

Aufgabe 6: Logs analysieren

  • Beobachten Sie die Logs von etcd während der verschiedenen Verbindungsversuche
  • Achten Sie auf Fehlermeldungen bei ungültigen Zertifikaten
  • Vergleichen Sie die Log-Ausgaben zwischen erfolgreichen und fehlgeschlagenen Verbindungen

Cleanup

  • Stoppen Sie etcd mit Ctrl+C