Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Kubeconfigs

Ressource Kubeconfig

Kubeconfig est une ressource Rancher kubeconfigs.ext.cattle.io qui permet de générer des fichiers kubeconfig v1.Config pour interagir avec Rancher et les clusters gérés par Rancher.

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

Pour obtenir une description des champs et de la structure de la ressource Kubeconfig, exécutez :

kubectl explain kubeconfigs.ext.cattle.io

Création d’un Kubeconfig

Depuis Rancher v2.13, le status.bearerToken contient un token Bearer entièrement formé et prêt à l’emploi qui peut être utilisé pour s’authentifier auprès de l’API Rancher.

Seul un utilisateur Rancher valide et actif peut créer un Kubeconfig. Par exemple, essayer de créer un Kubeconfig en utilisant un compte de service system:admin entraîne une erreur :

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

Le contenu du kubeconfig est généré et retourné dans le champ .status.value une seule fois lorsque le Kubeconfig est créé avec succès car il contient des valeurs secrètes pour les jetons créés. Par conséquent, il doit être capturé en utilisant une option de sortie appropriée, telle que -o jsonpath='{.status.value}' ou -o yaml.

Un kubeconfig peut être créé pour plus d’un cluster à la fois en spécifiant une liste de noms de clusters dans le champ spec.clusters. Vous pouvez rechercher des noms de clusters en listant les ressources clusters.management.cattle.io.

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

Les champs metadata.name et metadata.generateName sont ignorés, et le nom du nouveau Kubeconfig est automatiquement généré en utilisant le préfixe kubeconfig-.

Vous pouvez utiliser le champ spec.currentContext pour définir le nom du cluster, et il est utilisé pour définir le contexte actuel dans le kubeconfig. Si vous ne définissez pas le champ spec.currentContext, alors le premier cluster de la liste spec.clusters est utilisé comme contexte actuel. Pour les clusters activés par ACE qui n’ont pas de FQDN défini, le premier nœud de plan de contrôle est utilisé comme contexte actuel.

Pour les clusters activés par ACE, si le FQDN est défini, alors celui-ci est utilisé comme entrée de cluster dans le kubeconfig ; sinon, des entrées pour tous les nœuds de plan de contrôle sont créées.

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

Si "*" est spécifié comme le premier élément dans le champ spec.clusters, le kubeconfig est créé pour tous les clusters auxquels l’utilisateur a accès, le cas échéant.

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

Si spec.ttl n’est pas spécifié, les tokens du Kubeconfig sont créés avec le temps d’expiration défini dans le paramètre kubeconfig-default-token-ttl-minutes, qui est de 30 jours par défaut. Si spec.ttl est spécifié, il doit être supérieur à 0 et inférieur ou égal à la valeur du paramètre kubeconfig-default-token-ttl-minutes exprimée en secondes.

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

Liste des Kubeconfigs

Lister les Kubeconfigs générés précédemment peut être utile pour nettoyer les jetons de sauvegarde si le Kubeconfig n’est plus nécessaire (par exemple, s’il a été émis temporairement). Les administrateurs peuvent lister tous les Kubeconfigs, tandis que les utilisateurs réguliers ne peuvent voir que les leurs.

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

Utilisez -o wide pour obtenir plus de détails :

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      *

Visualisation d’un Kubeconfig

Les administrateurs peuvent obtenir n’importe quel Kubeconfig, tandis que les utilisateurs réguliers ne peuvent obtenir que le leur.

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

Utilisez -o wide pour obtenir plus de détails :

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

Suppression d’un Kubeconfig

Les administrateurs peuvent supprimer n’importe quel Kubeconfig, tandis que les utilisateurs réguliers ne peuvent supprimer que le leur. Lorsqu’un Kubeconfig est supprimé, les tokens kubeconfig sont également supprimés.

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

Pour supprimer un Kubeconfig en utilisant des préconditions :

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

Suppression d’une collection de Kubeconfigs

Les administrateurs peuvent supprimer n’importe quel Kubeconfig, tandis que les utilisateurs réguliers ne peuvent supprimer que le leur.

Pour supprimer tous les Kubeconfigs :

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

Pour supprimer une collection de Kubeconfigs par étiquette :

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

Mise à jour d’un Kubeconfig

Seul le metadata, par exemple l’ajout d’une étiquette ou d’une annotation, et le champ spec.description peuvent être mis à jour. Tous les autres champs spec sont immuables.

Pour modifier un Kubeconfig :

kubectl edit kubeconfig kubeconfig-zp786

Pour appliquer un correctif à un Kubeconfig et mettre à jour sa description :

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

Pour appliquer un correctif à un Kubeconfig et ajouter une étiquette :

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