Skip to content

Emissione certificati per Kubernetes

Davide Porrovecchio edited this page Jan 20, 2020 · 1 revision

Lato client

Per richiedere l'emissione di un certificato per accesso al cluster Kubernetes è necessario disporre di una chiave privata RSA. Se non disponibile è possibile crearne una con il comando:

openssl genrsa -out <utente>.key 4096

Con la chiave disponibile è possibile creare una Certificate Signing Request mediante il comando:

openssl req -new -key <utente>.key -nodes -out <utente>.csr -subj '/CN=<utente>/O=<organizzazione>'

Il parametro rappresenta il nome utente che sarà usato nell'ambito del cluster.

Lato server

È necessario aggiungere al cluster la CSR con il seguente comando:

cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: <utente>
spec:
  request: $(cat <utente>.csr | base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - server auth
  - client auth
EOF

Successivamente la richiesta va approvata con il comando:

kubectl certificate approve <utente>

Il certificato firmato può quindi essere salvato con:

kubectl get csr <utente> -o jsonpath={.status.certificate} | base64 --decode > <utente>.crt

Per ottenere il certificato della CA si può usare il comando:

kubectl config view --minify --raw --output 'jsonpath={..cluster.certificate-authority-data}' | base64 -d > wai-ca.crt

Il certificato dell'utente e quello dalla CA così ottenuti, possono essere inviati al richiedente.

Lato client

Ricevuto il certificato dell'utente e il certificato della CA del cluster Kubernetes è possibile configurare il contesto per il client kubectl con i seguenti comandi:

kubectl config set-credentials <utente> --client-certificate=<utente>.crt --client-key=<utente>.key --embed-certs
kubectl config set-cluster wai --server=https://<ip api server>:<porta api server> --certificate-authority=wai-ca.crt  --embed-certs
kubectl config set-context <utente>-wai --cluster=wai --user=<utente>
kubectl config use-context <utente>-wai
Clone this wiki locally