Ce face Obiectul ServiceAccount
Oamenii se autentifică în cluster cu certificate sau prin furnizorul de identitate; aplicațiile din Pod-uri folosesc un ServiceAccount. Fiecare namespace are unul numit default, folosit automat de Pod-urile care nu cer altceva. Pentru aplicațiile care vorbesc cu API-ul (operatori, CI, unelte de monitorizare) creezi un ServiceAccount separat și îi dai doar drepturile necesare printr-un RoleBinding.
Kubernetes montează în Pod un token de scurtă durată, reînnoit automat, în /var/run/secrets/kubernetes.io/serviceaccount/token. Din versiunea 1.24 nu se mai creează automat Secret-uri cu tokenuri permanente; pentru un token folosit din afara clusterului rulezi kubectl create token. Dacă aplicația nu are nevoie de API, dezactivează montarea cu automountServiceAccountToken: false.
Parametri
| Parametru | Descriere |
|---|---|
spec.serviceAccountName (în Pod) |
ServiceAccount-ul folosit de Pod (implicit default). |
automountServiceAccountToken |
false nu mai montează tokenul (în ServiceAccount sau în Pod). |
kubectl create serviceaccount NUME |
Creează un ServiceAccount din linia de comandă. |
kubectl create token NUME --duration=1h |
Emite un token temporar pentru ServiceAccount. |
system:serviceaccount:NS:NUME |
Numele de utilizator al ServiceAccount-ului, folosit în RBAC și cu --as. |
Exemple
Exemplul 1: ServiceAccount cu drept de citire a Pod-urilor
Aplicația de monitorizare poate doar lista și citi Pod-urile din namespace-ul magazin.
apiVersion: v1
kind: ServiceAccount
metadata:
name: monitor
namespace: magazin
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: citire-pods
namespace: magazin
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: monitor-citire-pods
namespace: magazin
subjects:
- kind: ServiceAccount
name: monitor
namespace: magazin
roleRef:
kind: Role
name: citire-pods
apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: monitor
namespace: magazin
spec:
selector:
matchLabels: {app: monitor}
template:
metadata:
labels: {app: monitor}
spec:
serviceAccountName: monitor
containers:
- name: monitor
image: firma/monitor:2.1
Exemplul 2: Verificarea drepturilor și un token temporar
Testăm drepturile „în numele” ServiceAccount-ului, apoi emitem un token valabil o oră (ieșire scurtată).
kubectl auth can-i list pods -n magazin --as=system:serviceaccount:magazin:monitor
kubectl auth can-i delete pods -n magazin --as=system:serviceaccount:magazin:monitor
kubectl create token monitor -n magazin --duration=1h
Ieșire în terminal
yes
no
eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1hZ2F6aW4ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjIl0…
Greșeli frecvente
- Acordarea de drepturi ServiceAccount-ului
default: toate Pod-urile din namespace care nu cer alt ServiceAccount le primesc automat. Creează câte un ServiceAccount pentru fiecare aplicație. - Crearea manuală de Secret-uri de tip
kubernetes.io/service-account-tokenpentru tokenuri fără expirare: dacă ajung într-un depozit sau jurnal, rămân valabile până la ștergere. Preferăkubectl create tokencu durată scurtă.
Comenzi înrudite
Obiectul ResourceQuota: Limitează totalul de CPU, memorie, Pod-uri sau alte obiecte pe care le poate consuma un namespace.CustomResourceDefinition (CRD): Adaugă în API-ul Kubernetes un tip nou de obiect (resursă proprie), cu schemă validată, folosit de operatori și controllere.