ProxyAuthK8s Docs

Plugin kubectl

Utiliser ProxyAuthK8S depuis kubectl

Last updated on

Le plugin kubectl proxyauth est le pendant client de ProxyAuthK8S : il gère la connexion OIDC, stocke les identifiants dans le trousseau du système, et sert de credential plugin kubectl pour que kubectl parle à n'importe quel cluster exposé.

Installation

Via krew

kubectl krew install proxyauth

Le manifeste krew est généré à chaque tag et attaché à la release GitHub. Tant que le plugin n'est pas dans l'index officiel, l'installation se fait depuis l'archive de la release.

Depuis une release

VERSION=v0.1.9
curl -sSL -o kubectl-proxyauth.tar.gz \
  "https://github.com/batleforc/proxyauthK8s/releases/download/${VERSION}/kubectl-proxyauth_${VERSION}_linux_amd64.tar.gz"
tar xzf kubectl-proxyauth.tar.gz
install -m 0755 kubectl-proxyauth ~/.local/bin/

Le binaire doit s'appeler kubectl-proxyauth et être dans le PATH : c'est ce qui permet à kubectl de l'exposer comme kubectl proxyauth.

Sur Linux, les identifiants sont stockés dans le trousseau via l'API Secret Service. Il faut donc un gnome-keyring ou un KWallet en cours d'exécution.

Usage

Se connecter au serveur

kubectl proxyauth login --server-url https://proxyauthk8s.example.com --token <jeton>

Le login serveur valide le jeton auprès du serveur puis le stocke dans le trousseau. Sans --token, le jeton est demandé de façon interactive.

Lister les clusters visibles

kubectl proxyauth get clusters

Seuls les clusters dont expose_via_dashboard est activé et dont le groupe dashboard figure dans les groupes de l'utilisateur apparaissent ici.

Se connecter à un cluster

Pour un cluster dont le provider est OIDC/SSO, la connexion est interactive :

kubectl proxyauth -n default login mon-cluster

Le plugin ouvre le navigateur sur le provider OIDC, récupère code/state via un callback local (http://localhost:18000/ par défaut), échange le code auprès du serveur et stocke l'id_token du cluster dans le trousseau.

L'URI de redirection utilisée est http://localhost:<port>/auth/callback/<ns>/<cluster> et doit être enregistrée pour le client OIDC du cluster côté IdP. Le port par défaut est 18000 ; changez-le avec PROXYAUTH_CALLBACK_PORT si besoin (et enregistrez l'URI correspondante).

Pour un cluster non-SSO (ou pour fournir un jeton directement) :

kubectl proxyauth -n default login mon-cluster --token <jeton>

Cela écrit un contexte kubeconfig dont l'exec pointe sur le plugin : à chaque appel, kubectl lui demande un jeton frais.

Se déconnecter / purger le cache

kubectl proxyauth logout mon-cluster   # retire le jeton d'un cluster
kubectl proxyauth logout               # déconnecte du serveur (tous ses jetons)
kubectl proxyauth cache clear          # purge tous les jetons en cache

Vérifier la configuration

kubectl proxyauth config get

Le kubeconfig généré

apiVersion: v1
kind: Config
clusters:
  - name: mon-cluster
    cluster:
      server: https://proxyauthk8s.example.com/clusters/default/mon-cluster
users:
  - name: mon-cluster
    user:
      exec:
        apiVersion: client.authentication.k8s.io/v1beta1
        command: kubectl-proxyauth
        args: ["get-token"]
contexts:
  - name: mon-cluster
    context:
      cluster: mon-cluster
      user: mon-cluster

L'URL du serveur est celle du proxy, pas celle du cluster : c'est ProxyAuthK8S qui authentifie l'appel, applique les règles de sécurité, puis relaie vers l'apiserver.

Résolution de problèmes

SymptômeCause probable
401 sur toutes les requêtesJeton expiré : relancer kubectl proxyauth login
403 avec un message sur un groupeL'utilisateur n'est pas dans le proxy_group du cluster
403 avec un message sur un cheminLe chemin n'est pas dans security_config.allowed_resources
429 avec un en-tête Retry-AfterRate limiting, ou bannissement après des échecs d'authentification répétés
Le cluster n'apparaît pas dans get clustersexpose_via_dashboard est à false (défaut) ou le groupe dashboard ne correspond pas

Have feedback?

Share on GitHub

On this page