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
-
Créer un compte de service pour l'utilisateur Alice
kubectl create sa alice
-
Obtenez le secret lié
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
-
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
-
Obtenir le jeton de compte de service à partir du secret
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
-
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}")
-
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 :
-
Installer kubectl
brew install kubectl
-
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
-
Définir les informations d'identification de l'utilisateur
kubectl config set-credentials alice-staging --token=$user_token
-
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
-
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
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
ytoken
mais ce n'est pas suffisant ou correct pour configurer kubeconfig. Si vous savez comment configurer kubeconfig, merci de nous le dire.