Permanente kubeconfig

Allgemein

Standardmäßig können Sie nur kubeconfigs mit einer maximalen Lebensdauer von 24h aus dem gardener Dashboard herunterladen. Mit dieser Anleitung werden Sie in der Lage sein, Ihre eigene permanente kubeconfig für Ihren Cluster zu erstellen.

Schritt 1: Erstellen eines Servicekontos

Der Name des Dienstkontos wird der Benutzername in kubeconfig sein. Hier erstellen wir das Servicekonto im kube-system-Namespace, um eine clusterRole zu definieren. Wenn Sie eine Konfiguration erstellen möchten, um den Zugriff auf Namespace-Ebene einzuschränken, erstellen Sie das Dienstkonto im gewünschten Namespace.

kubectl -n kube-system create serviceaccount perm-cluster-admin

Schritt 2: Cluster-Rollenbindung erstellen

Das folgende YAML ist ein ClusterRoleBinding, das den perm-cluster-admin Service-Account mit der perm-cluster-admin clusterRole bindet.

k create clusterrolebinding perm-cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=kube-system:perm-cluster-admin -n kube-system

Schritt 3: Erstellen Sie ein Geheimnis für das Dienstkonto

Ab Kubernetes Version 1.24 muss das Geheimnis für das Servicekonto separat mit einer Annotation kubernetes.io/service-account.name und dem Typ kubernetes.io/service-account-token erstellt werden. Wir erstellen also ein yaml mit einem Geheimnis namens perm-cluster-admin-secret mit der entsprechenden Annotation und dem Typ.

apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: perm-cluster-admin-token
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: perm-cluster-admin

Und wenden Sie die erstellte yaml mit kubectl apply -f secret.yaml an.

Schritt 4: Alle Cluster-Details und Geheimnisse abrufen

Wir werden alle erforderlichen kubeconfig-Details abrufen und sie in Variablen speichern. Anschließend werden wir sie direkt durch die kubeconfig-YAML ersetzen. Wenn Sie einen anderen Namen für die Ressourcen verwendet haben, ersetzen Sie diese entsprechend.

ca=$(kubectl -n kube-system get secret/perm-cluster-admin-token -o jsonpath='{.data.ca\.crt}')
token=$(kubectl -n kube-system get secret/perm-cluster-admin-token -o jsonpath='{.data.token}' | base64 --decode)
server=`cat $KUBECONFIG | yq '.clusters[0].cluster.server'`

Step 5: Generieren der kubeconfig mit den Variablen

Füllen Sie nun die Variablen der kubeconfig.yaml entsprechend aus:

apiVersion: v1
kind: Config
clusters:
- name: default-cluster
  cluster:
    certificate-authority-data: ${ca}
    server: ${server}
contexts:
- name: default-context
  context:
    cluster: default-cluster
    namespace: default
    user: default-user
current-context: default-context
users:
- name: default-user
  user:
    token: ${token}

Schritt 6: Validieren der generierten kubeconfig

Um die kubeconfig zu validieren, führen Sie sie mit dem Befehl kubectl aus, um zu sehen, ob der Cluster authentifiziert wird.

kubectl get pods --kubeconfig=kubeconfig.yaml