Zum Inhalt

Labor 5: Generierung von Kubernetes-Konfigurationsdateien zur Authentifizierung

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 generieren Sie Kubernetes-Client-Konfigurationsdateien, die normalerweise als kubeconfigs bezeichnet werden. Diese Dateien konfigurieren Kubernetes-Clients für die Verbindung mit Kubernetes-API-Servern und die Authentifizierung bei diesen.

Client-Authentifizierungskonfigurationen

In diesem Abschnitt generieren Sie Kubeconfig-Dateien für den Benutzer kubelet und admin.

Die kubelet Kubernetes-Konfigurationsdatei

Beim Generieren von Kubeconfig-Dateien für Kubelets müssen Sie das Client-Zertifikat mit dem Knotennamen des Kubelets abgleichen. Dadurch wird sichergestellt, dass Kubelets ordnungsgemäß vom Kubernetes Node Authorizer autorisiert werden.

Die folgenden Befehle müssen im selben Verzeichnis ausgeführt werden, das zum Generieren der SSL-Zertifikate während des Labors Generieren von TLS-Zertifikaten verwendet wurde.

Generieren Sie eine Kubeconfig-Datei für die Worker-Knoten node-0 und node-1:

for host in node-0 node-1; do
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://server.kubernetes.local:6443 \
    --kubeconfig=${host}.kubeconfig

  kubectl config set-credentials system:node:${host} \
    --client-certificate=${host}.crt \
    --client-key=${host}.key \
    --embed-certs=true \
    --kubeconfig=${host}.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=system:node:${host} \
    --kubeconfig=${host}.kubeconfig

  kubectl config use-context default \
    --kubeconfig=${host}.kubeconfig
done

Ergebnisse:

node-0.kubeconfig
node-1.kubeconfig

Die kube-proxy Kubernetes-Konfigurationsdatei

Generieren Sie eine Kubeconfig-Datei für den Dienst kube-proxy:

  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://server.kubernetes.local:6443 \
    --kubeconfig=kube-proxy.kubeconfig

  kubectl config set-credentials system:kube-proxy \
    --client-certificate=kube-proxy.crt \
    --client-key=kube-proxy.key \
    --embed-certs=true \
    --kubeconfig=kube-proxy.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=system:kube-proxy \
    --kubeconfig=kube-proxy.kubeconfig

  kubectl config use-context default \
    --kubeconfig=kube-proxy.kubeconfig

Ergebnisse:

kube-proxy.kubeconfig

Die Kubernetes-Konfigurationsdatei kube-controller-manager

Generieren Sie eine Kubeconfig-Datei für den Dienst kube-controller-manager:

  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://server.kubernetes.local:6443 \
    --kubeconfig=kube-controller-manager.kubeconfig

  kubectl config set-credentials system:kube-controller-manager \
    --client-certificate=kube-controller-manager.crt \
    --client-key=kube-controller-manager.key \
    --embed-certs=true \
    --kubeconfig=kube-controller-manager.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=system:kube-controller-manager \
    --kubeconfig=kube-controller-manager.kubeconfig

  kubectl config use-context default \
    --kubeconfig=kube-controller-manager.kubeconfig

Ergebnisse:

kube-controller-manager.kubeconfig

Die Kubernetes-Konfigurationsdatei kube-scheduler

Generieren Sie eine Kubeconfig-Datei für den Dienst kube-scheduler:

  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://server.kubernetes.local:6443 \
    --kubeconfig=kube-scheduler.kubeconfig

  kubectl config set-credentials system:kube-scheduler \
    --client-certificate=kube-scheduler.crt \
    --client-key=kube-scheduler.key \
    --embed-certs=true \
    --kubeconfig=kube-scheduler.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=system:kube-scheduler \
    --kubeconfig=kube-scheduler.kubeconfig

  kubectl config use-context default \
    --kubeconfig=kube-scheduler.kubeconfig

Ergebnisse:

kube-scheduler.kubeconfig

Die Kubernetes-Konfigurationsdatei des Administrators

Generieren Sie eine Kubeconfig-Datei für den Benutzer admin:

  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://127.0.0.1:6443 \
    --kubeconfig=admin.kubeconfig

  kubectl config set-credentials admin \
    --client-certificate=admin.crt \
    --client-key=admin.key \
    --embed-certs=true \
    --kubeconfig=admin.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=admin \
    --kubeconfig=admin.kubeconfig

  kubectl config use-context default \
    --kubeconfig=admin.kubeconfig

Ergebnisse:

admin.kubeconfig

Verteilen der Kubernetes-Konfigurationsdateien

Kopieren Sie die Kubeconfig-Dateien kubelet und kube-proxy in die Instanzen node-0 und node-1:

for host in node-0 node-1; do
  ssh root@$host "mkdir /var/lib/{kube-proxy,kubelet}"

  scp kube-proxy.kubeconfig \
    root@$host:/var/lib/kube-proxy/kubeconfig \

  scp ${host}.kubeconfig \
    root@$host:/var/lib/kubelet/kubeconfig
done

Kopieren Sie die Kubeconfig-Dateien kube-controller-manager und kube-scheduler in die Controller-Instanz:

scp admin.kubeconfig \
  kube-controller-manager.kubeconfig \
  kube-scheduler.kubeconfig \
  root@server:~/

Fortsetzung folgt: [Konfiguration der Datenverschlüsselung]ä(lab6-data-encryption-keys.md)

Author: Wale Soyinka

Contributors: Steven Spencer, Ganna Zhyrnova