70 votes

Comment ajouter des utilisateurs à Kubernetes (kubectl) ?

J'ai créé un cluster Kubernetes sur AWS avec kops et peut l'administrer avec succès via kubectl depuis ma machine locale.

Je peux voir la configuration actuelle avec kubectl config view ainsi que l'accès direct à l'état stocké à ~/.kube/config comme :

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://api.{CLUSTER_NAME}
  name: {CLUSTER_NAME}
contexts:
- context:
    cluster: {CLUSTER_NAME}
    user: {CLUSTER_NAME}
  name: {CLUSTER_NAME}
current-context: {CLUSTER_NAME}
kind: Config
preferences: {}
users:
- name: {CLUSTER_NAME}
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    password: REDACTED
    username: admin
- name: {CLUSTER_NAME}-basic-auth
  user:
    password: REDACTED
    username: admin

Je dois permettre à d'autres utilisateurs d'administrer également. Ce site guide de l'utilisateur décrit comment les définir sur la machine d'un autre utilisateur, mais ne décrit pas comment créer les informations d'identification de l'utilisateur dans le cluster lui-même. Comment faire ?

En outre, est-il sûr de simplement partager le cluster.certificate-authority-data ?

0 votes

On dirait que vous voulez comptes de service

0 votes

J'ai lu les documents sur les comptes de service, qui montrent qu'il est facile de les créer et de récupérer leurs données. ca.crt y token mais ce n'est pas suffisant ou correct pour configurer kubeconfig. Si vous savez comment configurer kubeconfig, merci de nous le dire.

99voto

Vincent Points 514

Pour un aperçu complet de l'authentification, consultez les documents officiels de Kubernetes sur Authentification y Autorisation

Pour les utilisateurs, vous utilisez idéalement un fournisseur d'identité pour Kubernetes (OpenID Connect).

Si vous êtes sur GKE / ACS, vous vous intégrez aux cadres respectifs de gestion des identités et des accès.

Si vous hébergez vous-même kubernetes (ce qui est le cas lorsque vous utilisez kops), vous pouvez utiliser coreos/dex pour intégrer les fournisseurs d'identité LDAP / OAuth2 - une bonne référence est ce document détaillé en 2 parties SSO pour Kubernetes article.

kops (1.10+) dispose désormais d'une fonction intégrée support d'authentification ce qui facilite l'intégration avec AWS IAM comme fournisseur d'identité si vous êtes sur AWS.

Pour Dex, il existe quelques clients cli à source ouverte, comme suit :

Si vous cherchez un moyen rapide et facile (mais pas le plus sûr et le plus facile à gérer à long terme) de démarrer, vous pouvez abuser de serviceaccounts - avec 2 options de politiques spécialisées pour contrôler l'accès. (voir ci-dessous)

NOTE : depuis la version 1.6, le contrôle d'accès basé sur les rôles est fortement recommandé ! Cette réponse ne couvre pas la configuration du RBAC.

EDIT : Excellent, mais dépassé (2017-2018), guide de Bitnami sur . Configuration des utilisateurs avec RBAC est également disponible.

Les étapes pour activer l'accès aux comptes de service sont les suivantes (selon que la configuration de votre cluster inclut des politiques RBAC ou ABAC, ces comptes peuvent avoir des droits d'administration complets) :

EDIT : Voici un bash script pour automatiser la création d'un compte de service - voir les étapes suivantes

  1. Créer un compte de service pour l'utilisateur Alice

    kubectl create sa alice
  2. Obtenez le secret lié

    secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
  3. Obtenez ca.crt à partir du secret (en utilisant OSX base64 con -D pour le décodage)

    kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
  4. Obtenir le jeton de compte de service à partir du secret

    user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
  5. Obtenir des informations de votre configuration kubectl (current-context, server..)

    # get current context
    c=$(kubectl config current-context)
    
    # get cluster name of context
    name=$(kubectl config get-contexts $c | awk '{print $3}' | tail -n 1)
    
    # get endpoint of current context 
    endpoint=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}")
  6. Sur une machine neuve, suivez les étapes suivantes (compte tenu de l'état d'avancement du projet). ca.cert y $endpoint l'information récupérée ci-dessus :

    1. Installer kubectl

       brew install kubectl
    2. Définir le cluster (exécuter dans le répertoire où ca.crt est stockée)

       kubectl config set-cluster cluster-staging \
         --embed-certs=true \
         --server=$endpoint \
         --certificate-authority=./ca.crt
    3. Définir les informations d'identification de l'utilisateur

       kubectl config set-credentials alice-staging --token=$user_token
    4. Définir la combinaison de l'utilisateur alice avec le cluster staging

       kubectl config set-context alice-staging \
         --cluster=cluster-staging \
         --user=alice-staging \
         --namespace=alice
    5. Changer le contexte actuel en alice-staging pour l'utilisateur

       kubectl config use-context alice-staging

Pour contrôler l'accès des utilisateurs avec des politiques (en utilisant ABAC ), vous devez créer un policy (par exemple) :

{
  "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
  "kind": "Policy",
  "spec": {
    "user": "system:serviceaccount:default:alice",
    "namespace": "default",
    "resource": "*",
    "readonly": true
  }
}

Cette disposition policy.json sur chaque nœud maître et ajoutez --authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json drapeaux aux serveurs API

Cela permettrait à Alice (par le biais de son compte de service) d'obtenir des droits de lecture seule sur toutes les ressources de l'espace de noms par défaut uniquement.

0 votes

Il serait toutefois préférable de fournir un accès en lecture seule à l'aide de ChatOps, de consigner les expéditions et de gérer les déploiements au moyen de systèmes de CI. La seule chose ennuyeuse est de savoir comment permettre aux développeurs d'accéder facilement à la console ...

0 votes

Pour l'accès au tableau de bord, utilisez kubectl proxy & et pointer vers locahost:8001 api/v1/proxy - service kubernetes-dashboard dans l'espace de nom kube-system

0 votes

Parfait. C'est ce que je cherchais. Une précision, cependant : l'étape 3 crée un fichier ca.crt, mais l'étape 6.2 recherche un fichier ca.pem. Une traduction est-elle nécessaire, ou s'agit-il simplement d'une erreur de frappe ?

4voto

Ortomala Lokni Points 5613

Vous dites :

Je dois permettre à d'autres utilisateurs d'administrer également.

Mais selon le documentation

Les utilisateurs normaux sont supposés être gérés par un service extérieur et indépendant. Un administrateur distribuant des clés privées, un magasin d'utilisateurs comme Keystone ou Google Accounts, voire un fichier contenant une liste de noms d'utilisateurs et de mots de passe. À cet égard, Kubernetes ne dispose pas d'objets représentant des comptes utilisateurs normaux. Les utilisateurs normaux ne peuvent pas être ajoutés à un cluster par le biais d'un appel API.

Vous devez utiliser un outil tiers pour cela.

\== Editer ==

Une solution pourrait consister à créer manuellement une entrée d'utilisateur dans le fichier fichier kubeconfig . De la documentation :

# create kubeconfig entry
$ kubectl config set-cluster $CLUSTER_NICK \
    --server=https://1.1.1.1 \
    --certificate-authority=/path/to/apiserver/ca_file \
    --embed-certs=true \
    # Or if tls not needed, replace --certificate-authority and --embed-certs with
    --insecure-skip-tls-verify=true \
    --kubeconfig=/path/to/standalone/.kube/config

# create user entry
$ kubectl config set-credentials $USER_NICK \
    # bearer token credentials, generated on kube master
    --token=$token \
    # use either username|password or token, not both
    --username=$username \
    --password=$password \
    --client-certificate=/path/to/crt_file \
    --client-key=/path/to/key_file \
    --embed-certs=true \
    --kubeconfig=/path/to/standalone/.kube/config

# create context entry
$ kubectl config set-context $CONTEXT_NAME \
    --cluster=$CLUSTER_NICK \
    --user=$USER_NICK \
    --kubeconfig=/path/to/standalone/.kube/config

1 votes

J'ai lu cela dans la documentation également, mais le fait est que j'ai créé mon cluster avec Kops et il a créé l'utilisateur administrateur initial, il doit donc y avoir un moyen d'en créer un autre.

1 votes

Oui, une fois que l'utilisateur est créé dans le cluster, vous utiliserez la fonction kubectl config avec set-cluster , set-credentials y set-context instructions comme je l'ai mentionné dans la question initiale. Mais comment créer l'utilisateur réel dans le cluster ? Où obtenez-vous les certificats réels fournis avec ces instructions ?

0 votes

Bonjour @peterl, j'ai les mêmes doutes... avez-vous réussi à résoudre ce problème ?

1voto

Gabriel Wu Points 451

Le guide bitnami fonctionne pour moi, même si vous utilisez minikube. Le plus important est que votre cluster supporte RBAC. https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/

1 votes

Vous ne voulez pas dire RBAC ? Pouvez-vous clarifier un peu, c'est à la limite du lien seulement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X