Contribuisci a migliorare questa pagina
Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.
Proteggere i carichi di lavoro con i certificati Kubernetes
L’API Kubernetes Certificates automatizza il provisioning delle credenziali X.509CertificateSigningRequest per chiedere la firma del certificato da parte di un firmatario designato. Le richieste vengono approvate o negate prima della firma. Kubernetes supporta sia i firmatari integrati che personalizzati con comportamenti ben definiti. In questo modo, i client possono prevedere cosa succede alle loro CSR. Per ulteriori informazioni sulla firma dei certificati, consulta signing requests
Uno dei firmatari integrati è kubernetes.io/legacy-unknown. L’API v1beta1 della risorsa CSR ha onorato questo firmatario “legacy-unknown”. Tuttavia, l’API v1 stabile di CSR non consente l’impostazione di signerName su kubernetes.io/legacy-unknown.
Se desideri utilizzare l’autorità di certificazione (CA) di Amazon EKS per la generazione di certificati sul tuo cluster, devi utilizzare un firmatario personalizzato. Per utilizzare la versione v1 dell’API CSR e generare un nuovo certificato, devi eseguire la migrazione di tutti i manifesti e i client dell’API esistenti. I certificati esistenti creati con l’API v1beta1 esistente sono validi e funzionanti fino alla scadenza dei certificati. Questo include gli output seguenti:
-
Distribuzione di attendibilità: nessuna. Non esiste alcuna distribuzione di attendibilità o standard per questo firmatario in un cluster Kubernetes.
-
Argomenti consentiti: tutti
-
Estensioni x509 consentite: rispetta le estensioni di utilizzo delle chiavi e subjectAltName, scartando le altre.
-
Utilizzo delle chiavi consentite: non devono includere altri utilizzi oltre ["key encipherment", "digital signature", "server auth"]
Nota
La firma dei certificati client non è supportata.
-
Scadenza/durata del certificato: 1 anno (predefinita e massima)
-
Bit CA consentito/non consentito: non consentito
Generazione CSR di esempio con signerName
Questa procedura mostra come generare un certificato di servizio per il nome DNS myserver.default.svc utilizzando signerName: beta.eks.amazonaws.com/app-serving. Utilizzala come guida per il tuo ambiente.
-
Esegui il comando
openssl genrsa -out myserver.key 2048per generare una chiave privata RSA.openssl genrsa -out myserver.key 2048 -
Utilizza il comando seguente per generare una richiesta di certificato.
openssl req -new -key myserver.key -out myserver.csr -subj "/CN=myserver.default.svc" -
Genera un valore
base64per la richiesta CSR e memorizzalo in una variabile da utilizzare in un passaggio successivo.base_64=$(cat myserver.csr | base64 -w 0 | tr -d " ") -
Per creare un file denominato
mycsr.yaml, esegui il comando di seguito. Nell’esempio seguente,beta.eks.amazonaws.com/app-servingèsignerName.cat >mycsr.yaml <<EOF apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: myserver spec: request: $base_64 signerName: beta.eks.amazonaws.com/app-serving usages: - digital signature - key encipherment - server auth EOF -
Invia la CSR.
kubectl apply -f mycsr.yaml -
Approva il certificato di servizio.
kubectl certificate approve myserver -
Verifica l’emissione del certificato.
kubectl get csr myserverDi seguito viene riportato un output di esempio.
NAME AGE SIGNERNAME REQUESTOR CONDITION myserver 3m20s beta.eks.amazonaws.com/app-serving kubernetes-admin Approved,Issued -
Esporta il certificato emesso.
kubectl get csr myserver -o jsonpath='{.status.certificate}'| base64 -d > myserver.crt