kubectl certificate și CertificateSigningRequest în Kubernetes (kubectl)

Configurare și context kubectl 1.5+ (certificates.k8s.io/v1 din Kubernetes 1.19)

Aprobă sau respinge cererile de certificat (CSR) trimise clusterului, de exemplu pentru a da acces unui utilizator nou.

Sintaxă comandă
kubectl certificate approve <csr>
kubectl certificate deny <csr>
kubectl get csr

Ce face kubectl certificate și CertificateSigningRequest

Un CertificateSigningRequest (CSR) este o cerere ca autoritatea de certificare a clusterului să semneze un certificat. Cu semnatarul kubernetes.io/kube-apiserver-client, certificatul rezultat servește la autentificarea unui utilizator: câmpul CN devine numele utilizatorului, iar fiecare O un grup, folosite apoi în regulile RBAC.

kubectl certificate approve aprobă cererea, iar deny o respinge; după aprobare, certificatul semnat apare în status.certificate. Kubernetes nu poate revoca certificatele de client, deci alege o durată scurtă cu expirationSeconds și dă drepturi unui grup, nu direct utilizatorului.

Parametri

Parametru Descriere
approve CSR Aprobă cererea.
deny CSR Respinge cererea.
spec.signerName Semnatarul: kubernetes.io/kube-apiserver-client pentru utilizatori.
spec.expirationSeconds Durata cerută a certificatului (minimum 600 de secunde).
spec.usages Utilizări; pentru utilizatori client auth.
kubectl get csr Listează cererile și starea lor.

Exemple

Exemplul 1: Cheie și cerere de certificat pentru Ana

Ana își generează cheia (care nu părăsește calculatorul ei) și o cerere cu numele ana și grupul dezvoltatori.

openssl genrsa -out ana.key 2048
openssl req -new -key ana.key -out ana.csr -subj "/CN=ana/O=dezvoltatori"
kubectl apply -f - <<EOF
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: ana
spec:
  request: $(base64 < ana.csr | tr -d '\n')
  signerName: kubernetes.io/kube-apiserver-client
  expirationSeconds: 2592000
  usages: ["client auth"]
EOF

Ieșire în terminal

certificatesigningrequest.certificates.k8s.io/ana created

Exemplul 2: Aprobarea și extragerea certificatului

Administratorul aprobă cererea; certificatul semnat se adaugă apoi în kubeconfig-ul Anei.

kubectl certificate approve ana
kubectl get csr ana
kubectl get csr ana -o jsonpath='{.status.certificate}' | base64 -d > ana.crt
kubectl config set-credentials ana --client-key=ana.key --client-certificate=ana.crt --embed-certs=true

Ieșire în terminal

certificatesigningrequest.certificates.k8s.io/ana approved
NAME   AGE   SIGNERNAME                            REQUESTOR          REQUESTEDDURATION   CONDITION
ana    40s   kubernetes.io/kube-apiserver-client   kubernetes-admin   30d                 Approved,Issued
User "ana" set.

Greșeli frecvente

  • Aprobarea cererilor fără a verifica CN și O din cerere (openssl req -in ana.csr -noout -subject): cineva poate cere un certificat în grupul system:masters, cu acces total.
  • Certificate cu durată de ani pentru oameni: când cineva pleacă din echipă, certificatul rămâne valabil. Folosește durate scurte sau autentificare printr-un furnizor de identitate (OIDC).

Comenzi înrudite

  • kubectl auth can-i: Verifică dacă tu (sau alt utilizator ori ServiceAccount) ai voie să faci o anumită acțiune în cluster, conform regulilor RBAC.
  • kubectx și kubens: Unelte mici pentru schimbarea rapidă a contextului (clusterului) și a namespace-ului implicit din kubeconfig.