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