Le autorità di certificazione (CA) del cluster emettono e firmano certificati per consentire l'autenticazione e la crittografia sicure tra i componenti del cluster. Per impostazione predefinita, in Google Distributed Cloud, l'API Cluster crea le CA del cluster quando crei un nuovo cluster. Questo documento descrive come utilizzare le tue autorità di certificazione con Google Distributed Cloud. L'utilizzo di CA cluster personalizzate offre un maggiore controllo sull'emissione e sulla gestione dei certificati del cluster. Puoi anche controllare l'attendibilità, i parametri dell'algoritmo di crittografia, la profondità dei certificati secondari e il loro scopo.
Per utilizzare CA personalizzate, fornisci CA radice, costituite da un file di certificato CA e dal file della chiave privata corrispondente. Fornisci una coppia di file di chiave e certificato CA per ciascuna delle seguenti CA cluster richieste:
CA etcd: il certificato per la CA etcd protegge la comunicazione dal server API Kubernetes alle repliche etcd e anche la comunicazione tra le repliche etcd.
CA cluster: il certificato per la CA cluster protegge la comunicazione tra il server API Kubernetes e tutti i client API Kubernetes interni. I client includono kubelet, controller manager e scheduler.
CA front-proxy: il certificato per la CA front-proxy protegge la comunicazione con le API aggregate.
Puoi fornire una coppia di chiavi e certificati univoca per ogni CA oppure riutilizzare una coppia di chiavi e certificati per più CA.
Applica le coppie chiave-certificato durante la
creazione del cluster (solo metodo bmctl
)
e la rotazione della CA. La funzionalità CA cluster personalizzata funziona con tutti i tipi di cluster: di amministrazione, utente, ibrido e autonomo.
Prerequisiti
È tua responsabilità preparare le tue CA radice in base alle seguenti regole:
Le CA personalizzate sono CA radice, ciascuna costituita da un file di certificato autofirmato e da un file di chiave privata.
Per il certificato, ti consigliamo di utilizzare il formato Distinguished Encoding Rules (DER) (vedi il consiglio X.690 per le regole di codifica ASN.1). Il file del certificato deve contenere dati codificati in base64 preceduti da
‑‑‑‑‑BEGIN CERTIFICATE‑‑‑‑‑
e seguiti da‑‑‑‑END CERTIFICATE‑‑‑‑‑
.Per la chiave privata, ti consigliamo di utilizzare il formato Public-Key Cryptography Standards (PKCS) #1. Il file della chiave deve contenere dati codificati in base64 preceduti da
‑‑‑‑BEGIN RSA PRIVATE KEY‑‑‑‑
e seguiti da‑‑‑‑END RSA PRIVATE KEY‑‑‑‑
.Per ridurre al minimo potenziali interruzioni del cluster, le CA personalizzate non devono scadere prima di cinque anni. Consigliamo un periodo di scadenza più lungo, ad esempio da 10 a 30 anni.
Assicurati che i file del certificato e della chiave si trovino sulla workstation di amministrazione in cui esegui i comandi
bmctl
.L'utente che esegue i comandi
bmctl
deve disporre dell'accesso alla directory in cui memorizzi i file. Ti consigliamo di inserire i file in una directory esistente utilizzata per certificati e chiavi. Ad esempio, puoi archiviare i file in~/baremetal/bmctl-workspace/.sa-keys
insieme alle chiavi del account di servizio.L'utente che esegue i comandi
bmctl
deve disporre dell'accesso in lettura ai file.
Utilizzare una CA personalizzata durante la creazione del cluster
Quando crei un
cluster
con bmctl
, devi prima aggiornare il file di configurazione del cluster per descrivere le
funzionalità e le impostazioni del cluster. Per utilizzare la funzionalità CA cluster personalizzata durante la creazione del cluster, hai due opzioni per specificare le CA cluster personalizzate nel file di configurazione del cluster:
- Specifica i percorsi per i file di certificati CA e per i file di chiavi private
- Specifica solo i percorsi per i file di chiavi private
Quando specifichi solo le chiavi private, bmctl
cerca i file dei certificati CA corrispondenti nella stessa directory. I file dei certificati devono avere lo stesso nome dei file delle chiavi private corrispondenti e l'estensione .crt
. Ad esempio, se il percorso della chiave privata è /custom-ca/cluster_ca.key
, bmctl
si aspetta che il percorso del certificato sia /custom-ca/cluster_ca.crt
.
In entrambi i casi, i percorsi sono specificati nella sezione delle credenziali del file di configurazione, come mostrato negli esempi seguenti.
Esempio 1: specifica i percorsi del certificato e della chiave
Il seguente estratto di un file di configurazione del cluster mostra come specificare i percorsi dei file del certificato e della chiave per ogni CA del cluster. In questo esempio, i file della chiave e del certificato CA si trovano nella stessa directory dei file della chiave JSON dell'account di servizio.
gcrKeyPath: bmctl-workspace/.sa-keys/myproject-anthos-baremetal-gcr.json
...
cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/myproject-anthos-baremetal-cloud-ops.json
clusterCACertPath: bmctl-workspace/.sa-keys/cluster_ca_cert.pem
clusterCAPrivateKeyPath: bmctl-workspace/.sa-keys/cluster_ca_key.pem
etcdCACertPath: bmctl-workspace/.sa-keys/etcd_ca_cert.pem
etcdCAPrivateKeyPath: bmctl-workspace/.sa-keys/etcd_ca_key.pem
frontProxyCACertPath: bmctl-workspace/.sa-keys/front_proxy_ca_cert.pem
frontProxyCAPrivateKeyPath: bmctl-workspace/.sa-keys/front_proxy_ca_key.pem
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin-test
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
...
Esempio 2: specifica solo i percorsi delle chiavi private
Il seguente estratto di un file di configurazione del cluster mostra come specificare solo i percorsi dei file delle chiavi. In questo esempio, i file della chiave privata della CA si trovano nella stessa directory dei file della chiave JSON del account di servizio. Anche i file dei certificati CA
corrispondenti devono trovarsi nella directory /.sa-keys
. I file dei certificati
hanno lo stesso nome dei file delle chiavi, ma con estensione .crt
. Pertanto, il file del certificato CA etcd ha il nome etcd_ca.crt
.
gcrKeyPath: bmctl-workspace/.sa-keys/myproject-anthos-baremetal-gcr.json
...
cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/myproject-anthos-baremetal-cloud-ops.json
clusterCAPrivateKeyPath: bmctl-workspace/.sa-keys/cluster_ca_key.pem
etcdCAPrivateKeyPath: bmctl-workspace/.sa-keys/etcd_ca_key.pem
frontProxyCAPrivateKeyPath: bmctl-workspace/.sa-keys/front_proxy_ca_key.pem
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin-test
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
...
Esempio 3: riutilizzare una singola coppia di file di chiave e certificato CA
Il seguente estratto di un file di configurazione del cluster mostra come specificare solo i percorsi dei file delle chiavi. In questo esempio, viene utilizzata una singola coppia chiave-certificato
per tutte le CA cluster. I file del certificato CA e della chiave privata si trovano entrambi nella
directory /custom-ca
. Seguendo la convenzione di denominazione, il nome del file del certificato CA
è custom_ca.crt
.
gcrKeyPath: bmctl-workspace/.sa-keys/myproject-anthos-baremetal-gcr.json
...
cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/myproject-anthos-baremetal-cloud-ops.json
clusterCAPrivateKeyPath: /custom-ca/custom_ca.key
etcdCAPrivateKeyPath: /custom-ca/custom_ca.key
frontProxyCAPrivateKeyPath: /custom-ca/custom_ca.key
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin-test
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
...
Utilizzare una CA personalizzata durante la rotazione delle CA
Quando ruoti le CA, puoi specificare i
percorsi per i file della chiave privata e del certificato CA del cluster personalizzato. Le opzioni
disponibili sono simili a quelle per specificare CA cluster personalizzate durante
la creazione del cluster. Quando esegui il comando bmctl update credentials
certificate-authorities rotate
, hai le seguenti opzioni:
- Specifica i percorsi per i file di certificati CA personalizzati e per i file di chiavi private.
- Specifica solo i percorsi dei file di chiavi private della CA personalizzata. Il file del certificato CA corrispondente deve trovarsi nella stessa directory, avere lo stesso nome del file della chiave e avere l'estensione
.crt
. - Riutilizza una coppia di chiave-certificato CA specificando gli stessi percorsi di certificato e chiave per più di una CA cluster.
- Ometti gli argomenti per i percorsi CA personalizzati. Se non specifichi percorsi CA personalizzati quando ruoti le CA, Google Distributed Cloud crea e utilizza la CA cluster standard.
Esempio 1: specifica i percorsi del certificato CA e della chiave privata
bmctl update credentials certificate-authorities rotate \
--cluster CLUSTER_NAME \
--kubeconfig ADMIN_KUBECONFIG \
--cluster-ca-cert-path=CLUSTER_CA_CERT_PATH \
--cluster-ca-private-key-path=CLUSTER_CA_KEY_PATH \
--etcd-ca-cert-path=ETCD_CA_CERT_PATH \
--etcd-ca-private-key-path=ETCD_CA_KEY_PATH \
--front-proxy-ca-cert-path=FRONT_PROXY_CA_CERT_PATH \
--front-proxy-ca-private-key-path=FRONT_PROXY_CA_KEY_PATH
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del cluster per cui vuoi ruotare le CA.
- ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione. Per i cluster self-managed, questo file è il file kubeconfig del cluster.
- CLUSTER_CA_CERT_PATH: il percorso del file del certificato CA del cluster.
- CLUSTER_CA_KEY_PATH: il percorso del file della chiave privata CA del cluster.
- ETCD_CA_CERT_PATH: il percorso del file del certificato CA etcd.
- ETCD_CA_KEY_PATH: il percorso del file della chiave privata CA etcd.
- FRONT_PROXY_CA_CERT_PATH: il percorso del file del certificato del proxy front-end.
- FRONT_PROXY_CA_KEY_PATH: il percorso del file della chiave privata del proxy front-end.
Esempio 2: specifica solo i percorsi delle chiavi private
bmctl update credentials certificate-authorities rotate \
--cluster CLUSTER_NAME \
--kubeconfig ADMIN_KUBECONFIG \
--cluster-ca-private-key-path=CLUSTER_CA_KEY_PATH \
--etcd-ca-private-key-path=ETCD_CA_KEY_PATH \
--front-proxy-ca-private-key-path=FRONT_PROXY_CA_KEY_PATH
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del cluster per cui vuoi ruotare le CA.
- ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione. Per i cluster self-managed, questo file è il file kubeconfig del cluster.
- CLUSTER_CA_KEY_PATH: il percorso del file della chiave privata CA del cluster.
- ETCD_CA_KEY_PATH: il percorso del file della chiave privata CA etcd.
- FRONT_PROXY_CA_KEY_PATH: il percorso del file della chiave privata del proxy front-end.
CA intermedie
I cluster versione 1.29 supportano l'utilizzo di CA intermedie come funzionalità di anteprima. Questa funzionalità non si trova nella stessa fase di lancio per tutte le versioni del prodotto supportate:
- 1.29: Anteprima
- 1.28: Non disponibile
- 1.16: Non disponibile
Analogamente al requisito della CA radice per le CA personalizzate, per utilizzare le CA intermedie devi preparare tre set di CA. Ogni CA è costituita da un file di certificato CA e dal file della chiave privata corrispondente. Fornisci una coppia di file di chiave e certificato CA per ciascuna delle seguenti CA cluster richieste:
- CA etcd
- cluster CA
- CA front-proxy
Come per le CA radice, puoi fornire una coppia di chiave-certificato univoca per ogni CA oppure puoi riutilizzare una coppia di chiave-certificato per più CA specificando gli stessi percorsi dei file nella configurazione della CA.
Quando utilizzi CA intermedie, il file del certificato CA deve contenere l'intera catena di certificati, che include i certificati delle CA intermedie fino alla CA radice. I certificati sono elencati in ordine inverso rispetto alla firma, con l'ultimo certificato CA intermedia in alto e il certificato CA radice in basso.
Nell'esempio seguente (a partire dalla CA radice in basso), l'ordine indica quanto segue:
- La CA radice ha firmato il certificato della CA intermedia A
- La CA intermedia A ha firmato il certificato della CA intermedia B
- La catena continua fino al certificato CA intermedio Y finale, che è stato firmato dalla CA intermedia X
-----BEGIN CERTIFICATE-----
<Intermediate-Y CA CERT CONTENT>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Intermediate-X CA CERT CONTENT>
-----END CERTIFICATE-----
...
-----BEGIN CERTIFICATE-----
<Intermediate-B CA CERT CONTENT>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Intermediate-A CA CERT CONTENT>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<ROOT CA CERT CONTENT>
-----END CERTIFICATE-----
Per continuare con questo esempio, la chiave privata associata al certificato CA Intermediate-Y deve essere trasmessa insieme alle catene di certificati CA nello stesso modo di una CA personalizzata.
-----BEGIN RSA PRIVATE KEY-----
<Intermediate-Y PRIVATE KEY CONTENT>
-----END RSA PRIVATE KEY-----
Per verificare se il cluster utilizza la CA intermedia, controlla il conteggio dei certificati nel secret CA del cluster:
kubectl get secret CLUSTER_NAME-ca \
--kubeconfig ADMIN_KUBECONFIG
-n cluster-CLUSTER_NAME \
-o jsonpath='{.data.tls\.crt}' | base64 --decode | grep "BEGIN CERTIFICATE" | wc -l