Kubernetes API

L'autenticazione degli utenti con

Indice

Kubernetes API

Contesto

Integrazione con Identity Provider

Conclusione

Gestire gli accessi utente in Kubernetes può diventare complicato, soprattutto quando si vuole garantire un’autenticazione sicura. Fortunatamente, Kubernetes mette a disposizione l’API Certificate, che rende tutto molto più snello. Vediamo come funziona, attraverso un esempio pratico. 

Il contesto

Immagina che un nuovo sviluppatore, desouser, entri a far parte del team e debba accedere al cluster Kubernetes aziendale. Invece di creare l’utente manualmente o condividere certificati esistenti (cosa sconsigliata per motivi di sicurezza), possiamo seguire un flusso semplice per generare e approvare le credenziali in modo sicuro. 

1. Creazione della chiave e della CSR

Per prima cosa, desouser genera una chiave privata e una richiesta di firma del certificato (CSR) usando openssl: 

openssl genrsa -out desouser.key 2048 
openssl req -new -key desouser.key -subj “/CN=desouser” -out desouser.csr 

2. Invio della richiesta di certificato

La CSR deve essere convertita in base64 e inviata all’amministratore del cluster: 

cat desouser.csr | base64 | tr -d “\n” 

Questa stringa viene poi inclusa in un file YAML per creare la richiesta di certificato in Kubernetes: 

apiVersion: certificates.k8s.io/v1 
kind: CertificateSigningRequest
metadata: 
  name: desouser 
spec: 
  request: “LS0tLS1CRUdJTi…..” # CSR codificata in base64 
  signerName:
kubernetes.io/kube-apiserver
client
 
  expirationSeconds: 86400 # 1 giorno di validità
  usages: 
  – client auth

3. Approvazione da parte dell’amministratore

L’amministratore approva la richiesta con: 

kubectl certificate approve desouser

4. Recupero del certificato firmato

Una volta approvata, desouser può scaricare il certificato generato dal cluster: 

kubectl get csr desouser -o jsonpath='{.status.certificate}’ | base64 -d > desouser.crt

5. Assegnazione dei permessi

Per fare in modo che desouser possa lavorare nel cluster, è necessario assegnargli dei permessi, ad esempio tramite un Role e un RoleBinding: 

kubectl create role developer –verb=create –verb=get –verb=list –verb=update –verb=delete –resource=pods
kubectl create rolebinding developer-binding-desouser –role=developer –user=desouser

6. Configurazione dell’accesso

Infine, desouser deve configurare il proprio file kubeconfig per usare le nuove credenziali: 

kubectl config set-credentials desouser –client-key=desouser.key –client-certificate=desouser.crt –embed-certs=true 
kubectl config set-context desouser –cluster=kubernetes –user=desouser 
kubectl config use-context desouser 

Integrazione con Identity Provider esterni

Oltre alla gestione diretta dei certificati, Kubernetes consente di integrare provider di identità esterni, grazie al supporto per OpenID Connect (OIDC). Questo è particolarmente utile in ambienti aziendali dove già esistono strumenti di gestione utenti centralizzati come Azure Active Directory, Google Workspace, Okta o Keycloak. 

Questa modalità consente l’uso di Single Sign-On (SSO), una gestione centralizzata delle credenziali, e il supporto per gruppi e policy definite esternamente. 

Configurazione dell’API server 

Per abilitare l’autenticazione via OIDC, il kube-apiserver deve essere avviato con i seguenti parametri: 

Configurazione utente nel kubeconfig 

L’utente può autenticarsi tramite browser o CLI, ricevere un token JWT, e usarlo nel proprio kubeconfig: 

Assegnazione dei permessi 

Anche in questo caso, si devono creare le regole RBAC per concedere i permessi all’utente: 

Conclusione

Kubernetes offre diversi strumenti per gestire in modo sicuro l’accesso al cluster. La combinazione tra l’API Certificate e l’integrazione con provider OIDC permette di coprire sia scenari con utenti tecnici (come desouser) sia l’adozione aziendale su larga scala. Il tutto mantenendo un controllo rigoroso e personalizzabile tramite il sistema RBAC integrato. 

 

A cura di Nabil Sato