Übung 4: Bereitstellung einer Zertifizierungsstelle und Generieren von TLS-Zertifikaten¶
Info
Dies ist ein Fork des ursprünglichen "Kubernetes the hard way", das ursprünglich von Kelsey Hightower geschrieben wurde (GitHub: kelseyhightower). Im Gegensatz zum Original, das auf Debian-ähnlichen Distributionen für die ARM64-Architektur basiert, zielt dieser Fork auf Enterprise-Linux-Distributionen wie Rocky Linux ab, das auf der x86_64-Architektur läuft.
In diesem Labor stellen wir eine PKI-Infrastruktur mit OpenSSL bereit, um eine Zertifizierungsstelle zu betreiben und TLS-Zertifikate für die folgenden Komponenten zu generieren:
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kubelet
- kube-proxy
Führen Sie Befehle in diesem Abschnitt aus der jumpbox
aus.
Zertifizierungsstelle¶
In diesem Abschnitt stellen Sie eine Zertifizierungsstelle bereit, die Sie zum Generieren zusätzlicher TLS-Zertifikate für die anderen Kubernetes-Komponenten verwenden. Das Einrichten einer Zertifizierungsstelle und das Generieren von Zertifikaten mit openssl
kann zeitaufwändig sein, insbesondere wenn Sie dies zum ersten Mal tun. Um dieses Labor zu optimieren, muss eine OpenSSL
-Konfigurationsdatei, ca.conf
, eingefügt werden, die alle Details definiert, die zum Generieren von Zertifikaten für jede Kubernetes-Komponente erforderlich sind.
Nehmen Sie sich einen Moment Zeit, um die Konfigurationsdatei ca.conf
zu überprüfen:
cat ca.conf
Um dieses Lernprogramm abzuschließen, müssen Sie nicht alles in der Datei ca.conf
verstehen. Dennoch sollten Sie es als Ausgangspunkt für das Erlernen von openssl
und der Konfiguration betrachten, die für die Verwaltung von Zertifikaten auf hoher Ebene erforderlich ist.
Jede Zertifizierungsstelle beginnt mit einem privaten Schlüssel und einem Stammzertifikat. In diesem Abschnitt erstellen Sie eine selbst-signierte Zertifizierungsstelle. Dies ist zwar alles, was Sie für dieses Tutorial benötigen, in einer realen Produktionsumgebung sollten Sie dies jedoch nicht in Betracht ziehen.
Generieren Sie die CA-Konfigurationsdatei, das Zertifikat und den privaten Schlüssel:
openssl genrsa -out ca.key 4096
openssl req -x509 -new -sha512 -noenc \
-key ca.key -days 3653 \
-config ca.conf \
-out ca.crt
Ergebnisse:
ca.crt ca.key
Hinweis
Um die in der generierten Zertifikatsdatei (ca.crt
) codierten Details anzuzeigen, können Sie diesen OpenSSL-Befehl verwenden:
openssl x509 -in ca.crt -text -noout | less
.\
Erstellen von Client- und Serverzertifikaten¶
In diesem Abschnitt generieren Sie Client- und Serverzertifikate für jede Kubernetes-Komponente und ein Clientzertifikat für den Kubernetes-Benutzer admin
.
Generieren Sie die Zertifikate und privaten Schlüssel:
certs=(
"admin" "node-0" "node-1"
"kube-proxy" "kube-scheduler"
"kube-controller-manager"
"kube-api-server"
"service-accounts"
)
for i in ${certs[*]}; do
openssl genrsa -out "${i}.key" 4096
openssl req -new -key "${i}.key" -sha256 \
-config "ca.conf" -section ${i} \
-out "${i}.csr"
openssl x509 -req -days 3653 -in "${i}.csr" \
-copy_extensions copyall \
-sha256 -CA "ca.crt" \
-CAkey "ca.key" \
-CAcreateserial \
-out "${i}.crt"
done
Die Ergebnisse des obigen Befehls generieren einen privaten Schlüssel, eine Zertifikatsanforderung und ein signiertes SSL-Zertifikat für jede Kubernetes-Komponente. Mit dem folgenden Befehl können Sie die generierten Dateien auflisten:
ls -1 *.crt *.key *.csr
Verteilen der Client- und Serverzertifikate¶
In diesem Abschnitt kopieren Sie die verschiedenen Zertifikate mithilfe eines Pfads auf jede Maschine, in dem jede Kubernetes-Komponente nach ihrem Zertifikatspaar sucht. In einer realen Umgebung würden Sie diese Zertifikate als eine Reihe vertraulicher Geheimnisse behandeln, da Kubernetes diese Komponenten als Anmeldeinformationen zur gegenseitigen Authentifizierung verwendet.
Kopieren Sie die entsprechenden Zertifikate und privaten Schlüssel auf die Maschinen node-0
und node-1
:
for host in node-0 node-1; do
ssh root@$host mkdir /var/lib/kubelet/
scp ca.crt root@$host:/var/lib/kubelet/
scp $host.crt \
root@$host:/var/lib/kubelet/kubelet.crt
scp $host.key \
root@$host:/var/lib/kubelet/kubelet.key
done
Kopieren Sie die entsprechenden Zertifikate und privaten Schlüssel auf die server
-Maschine:
scp \
ca.key ca.crt \
kube-api-server.key kube-api-server.crt \
service-accounts.key service-accounts.crt \
root@server:~/
Im nächsten Labor werden wir die Client-Zertifikate kube-proxy
, kube-controller-manager
, kube-scheduler
und kubelet
verwenden, um Konfigurationsdateien für die Client-Authentifizierung zu generieren.
Fortsetzung folgt: Kubernetes-Authentifizierung
Author: Wale Soyinka
Contributors: Steven Spencer, Ganna Zhyrnova