L’authentification

Comptes

Les utilisateurs

On ne peut pas créer d’utilisateurs dans un cluster Kubernetes.

Créer un Service Account

kubectl create serviceaccount my-sa

Afficher les Service Accounts

kubectl get  serviceaccount 

Les utilisateurs

Kubernetes auth accounts

Mécanisme d’authentification

kube-apiserver

  • static password file
  • static token file
  • certificates
  • identity services (ldap, kerberos ….)

Static password file

user-details.csv

password123,user1,u0001
password123,user2,u0002

Format: password, username, id
Optionnellement, on peut ajouter une 4ème colonne pour les groupes.

Pour kube-apiserver: –basic-auth-file=user-details.csv

kube-apiserver.service

 ExecStart=/usr/local/bin/kube-apiserver \\
 --advertise-address=${INTERNAL_IP} \\
 --allow-privileged=true \\
 --apiserver-count=3 \\
 --authorization-mode=Node,RBAC \\
 --bind-address=0.0.0.0 \\
 --enable-swagger-ui=true \\
 --etcd-servers=https://127.0.0.1:2379 \\
 --event-ttl=1h \\
 --runtime-config=api/all \\
 --service-cluster-ip-range=10.32.0.0/24 \\
 --service-node-port-range=30000-32767 \\
 --v=2
 --basic-auth-file=user-details.csv

/etc/kubernetes/manifests/kube-apiserver.yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --authorization-mode=Node,RBAC
    - --advertise-address=172.17.0.107
    - --allow-privileged=true
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --basic-auth-file=user-details.csv
    image: k8s.gcr.io/kube-apiserver-amd64:v1.11.3
    name: kube-apiserver

Authentification des utilisateurs:

 curl -v -k https://master-node-ip:6443/api/v1/pods -u "user1:password123"

Static Token File

Comme pour le Static Password File mais avec des tokens.
user-token-details.csv

 KpjCVbI7rCFAHYPkByTIzRb7gu1cUc4B,user10,u0010,group1
 rJjncHmvtXHc6MlWQddhtvNyyhgTdxSC,user11,u0011,group1
 mjpOFIEiFOkL9toikaRNtt59ePtczZSq,user12,u0012,group2

Au niveau du service et static pod/manifest, utilisation de –token-auth-file=user-token-details.csv.

Authentification des utilisateurs:

curl -v -k https://master-node-ip:6443/api/v1/pods --header "Authorization: Bearer KpjCVbI7rCFAHYPkBzRb7gu1cUc4B"