Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Kubeconfigs

Kubeconfig-Ressource

Kubeconfig ist eine Rancher-Ressource kubeconfigs.ext.cattle.io, die es ermöglicht, v1.Config Kubeconfig-Dateien zu generieren, um mit Rancher und von Rancher verwalteten Clustern zu interagieren.

kubectl api-resources --api-group=ext.cattle.io

Um eine Beschreibung der Felder und der Struktur der Kubeconfig-Ressource zu erhalten, führen Sie Folgendes aus:

kubectl explain kubeconfigs.ext.cattle.io

Erstellen eines Kubeconfigs

Seit Rancher v2.13 enthält das status.bearerToken ein vollständig ausgeformtes und einsatzbereites Bearer-Token, das zur Authentifizierung bei der Rancher API verwendet werden kann.

Nur ein gültiger und aktiver Rancher-Benutzer kann ein Kubeconfig erstellen. Wenn Sie beispielsweise versuchen, ein Kubeconfig mit einem system:admin Dienstkonto zu erstellen, führt dies zu einem Fehler:

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
EOF
Error from server (Forbidden): error when creating "STDIN": kubeconfigs.ext.cattle.io is forbidden: user system:admin is not a Rancher user

Der Inhalt des Kubeconfigs wird generiert und im .status.value Feld nur einmal zurückgegeben, wenn das Kubeconfig erfolgreich erstellt wurde, da es geheime Werte für die erstellten Tokens enthält. Daher muss es mit einer geeigneten Ausgabeoption erfasst werden, wie z. B. -o jsonpath='{.status.value}' oder -o yaml.

Ein Kubeconfig kann für mehr als einen Cluster gleichzeitig erstellt werden, indem eine Liste von Clusternamen im spec.clusters Feld angegeben wird. Sie können Clusternamen abrufen, indem Sie clusters.management.cattle.io Ressourcen auflisten.

kubectl get clusters.management.cattle.io -o=jsonpath="{.items[*]['metadata.name', 'spec.displayName']}{'\n'}"
local local
c-m-p66cdvlj downstream1

Die Felder metadata.name und metadata.generateName werden ignoriert, und der Name des neuen Kubeconfigs wird automatisch mit dem Präfix kubeconfig- generiert.

Sie können das spec.currentContext Feld verwenden, um den Clusternamen festzulegen, und es wird verwendet, um den aktuellen Kontext im Kubeconfig festzulegen. Wenn Sie das spec.currentContext Feld nicht festlegen, wird der erste Cluster in der spec.clusters Liste als aktueller Kontext verwendet. Für ACE-aktivierte Cluster, die keinen FQDN festgelegt haben, wird der erste Steuerungsknoten als aktueller Kontext verwendet.

Für ACE-aktivierte Cluster, wenn der FQDN festgelegt ist, wird dieser als Cluster-Eintrag im Kubeconfig verwendet; andernfalls werden Einträge für alle Steuerungsknoten erstellt.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: [c-m-p66cdvlj, c-m-fcd3g5h]
  description: My Kubeconfig
  currentContext: c-m-p66cdvlj
EOF

Wenn "*" als erstes Element im spec.clusters Feld angegeben ist, wird das Kubeconfig für alle Cluster erstellt, auf die der Benutzer Zugriff hat, falls vorhanden.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: ["*"]
  description: My Kubeconfig
EOF

Wenn spec.ttl nicht angegeben ist, werden die Tokens des Kubeconfigs mit der im kubeconfig-default-token-ttl-minutes Einstellung definierten Ablaufzeit erstellt, die standardmäßig 30 Tage beträgt. Wenn spec.ttl angegeben ist, sollte es größer als 0 und kleiner oder gleich dem Wert der kubeconfig-default-token-ttl-minutes Einstellung, ausgedrückt in Sekunden, sein.

kubectl create -o jsonpath='{.status.value}' -f -<<EOF
apiVersion: ext.cattle.io/v1
kind: Kubeconfig
spec:
  clusters: [c-m-p66cdvlj] # Downstream cluster
  ttl: 7200 # 2 hours
EOF

Auflisten von Kubeconfigs

Das Auflisten zuvor generierter Kubeconfigs kann nützlich sein, um Backing-Token zu bereinigen, wenn der Kubeconfig nicht mehr benötigt wird (z. B. wenn er vorübergehend ausgestellt wurde). Administratoren können alle Kubeconfigs auflisten, während reguläre Benutzer nur ihre eigenen einsehen können.

kubectl get kubeconfig
NAME               TTL   TOKENS   STATUS     AGE
kubeconfig-zp786   30d   2/2      Complete   18d
kubeconfig-7zvzp   30d   1/1      Complete   12d
kubeconfig-jznml   30d   1/1      Complete   12d

Verwenden Sie -o wide, um weitere Details zu erhalten:

kubectl get kubeconfig -o wide
NAME               TTL   TOKENS   STATUS     AGE     USER         CLUSTERS       DESCRIPTION
kubeconfig-zp786   30d   2/2      Complete   18d     user-w5gcf   *              all clusters
kubeconfig-7zvzp   30d   1/1      Complete   12d     u-w7drc      *
kubeconfig-jznml   30d   1/1      Complete   12d     u-w7drc      *

Anzeigen eines Kubeconfigs

Administratoren können jeden Kubeconfig abrufen, während reguläre Benutzer nur ihren eigenen abrufen können.

kubectl get kubeconfig kubeconfig-zp786
NAME               TTL   TOKENS   STATUS     AGE
kubeconfig-zp786   30d   2/2      Complete   18d

Verwenden Sie -o wide, um weitere Details zu erhalten:

kubectl get kubeconfig kubeconfig-zp786 -o wide
NAME               TTL   TOKENS   STATUS     AGE     USER         CLUSTERS       DESCRIPTION
kubeconfig-zp786   30d   2/2      Complete   18d     user-w5gcf   *              all clusters

Löschen eines Kubeconfigs

Administratoren können jeden Kubeconfig löschen, während reguläre Benutzer nur ihren eigenen löschen können. Wenn ein Kubeconfig gelöscht wird, werden auch die Kubeconfig-Token gelöscht.

kubectl delete kubeconfig kubeconfig-zp786
kubeconfig.ext.cattle.io "kubeconfig-zp786" deleted

Um einen Kubeconfig unter Verwendung von Vorbedingungen zu löschen:

cat <<EOF | k delete --raw /apis/ext.cattle.io/v1/kubeconfigs/kubeconfig-zp786 -f -
{
  "apiVersion": "v1",
  "kind": "DeleteOptions",
  "preconditions": {
    "uid": "52183e05-d382-47d2-b4b9-d0735823ce90",
    "resourceVersion": "31331505"
  }
}
EOF

Löschen einer Sammlung von Kubeconfigs

Administratoren können jeden Kubeconfig löschen, während reguläre Benutzer nur ihren eigenen löschen können.

Um alle Kubeconfigs zu löschen:

kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs

Um eine Sammlung von Kubeconfigs nach Label zu löschen:

kubectl delete --raw /apis/ext.cattle.io/v1/kubeconfigs?labelSelector=foo%3Dbar

Aktualisieren eines Kubeconfigs

Nur das metadata-Feld, z. B. das Hinzufügen eines Labels oder einer Annotation, und das spec.description-Feld können aktualisiert werden. Alle anderen spec-Felder sind unveränderlich.

Um einen Kubeconfig zu bearbeiten:

kubectl edit kubeconfig kubeconfig-zp786

Um einen Kubeconfig zu patchen und seine Beschreibung zu aktualisieren:

kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"spec":{"description":"Updated description"}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched

kubectl get kubeconfig kubeconfig-fdcpl -o jsonpath='{.spec.description}'
Updated description

Um einen Kubeconfig zu patchen und ein Label hinzuzufügen:

kubectl patch kubeconfig kubeconfig-zp786 -type merge -p '{"metadata":{"labels":{"foo":"bar"}}}'
kubeconfig.ext.cattle.io/kubeconfig-zp786 patched

kubectl get kubeconfig kubeconfig-zp786 -o jsonpath='{.metadata.labels.foo}'
bar