Gestione di certificati e segreti TLS e non TLS

Scopri come utilizzare i certificati e i segreti nel tuo cluster.

Considera l'utilizzo Secrets Manager di per gestire centralmente e aggiornare automaticamente i tuoi segreti.

Gestione dei certificati e dei segreti di TLS con Ingress

Il certificato Ingress TLS è memorizzato come segreto Kubernetes. Per gestire i segreti di TLS nel cluster, è possibile utilizzare l'insieme di comandi ibmcloud ks ingress secret.

Ad esempio, puoi importare un certificato da Secrets Manager a un segreto Kubernetes nel tuo cluster immettendo il seguente comando.

ibmcloud ks ingress secret create --cluster CLUSTER_NAME_OR_ID --cert-crn CRN --name SECRET_NAME --namespace default

Per importare il certificato con il ibmcloud ks ingress secret create comando, è necessario che un'istanza Secrets Manager predefinita sia registrata nel cluster. Se non disponi di un'istanza Secrets Manager e i tuoi segreti sono invece scritti direttamente nel tuo cluster, i tuoi segreti non hanno il valore CRN richiesto e devi copiarli manualmente con kubectl i comandi.

Per visualizzare tutti i segreti di Ingress per i certificati TLS nel cluster, eseguire il seguente comando.

ibmcloud ks ingress secret ls -c CLUSTER

Impostazione dei segreti di TLS per il sottodominio Ingress fornito da IBM

IBM fornisce un sottodominio Ingress e un certificato TLS predefinito, memorizzato come segreto Kubernetes nel cluster, che può essere specificato nella risorsa Ingress. I certificati TLS forniti da IBM vengono firmati da LetsEncrypt e vengono gestiti completamente da IBM.

Il sottodominio Ingress con carattere jolly fornito da IBM, *.<cluster_name>-<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud, è registrato per impostazione predefinita per il tuo cluster. Il certificato TLS fornito da IBM è un certificato jolly e può essere utilizzato per il dominio secondario jolly.

Seguire i passaggi per utilizzare il certificato predefinito di TLS per il sottodominio di ingresso fornito da IBM.

  1. Ottenere il nome del segreto in cui è memorizzato il certificato predefinito di TLS. Tieni presente che questo è il nome segreto che specifichi nella sezione spec.tls della tua risorsa Ingress.

    ibmcloud ks cluster get -c CLUSTER | grep Ingress
    

    Output di esempio

    Ingress Subdomain:      mycluster-<hash>-0000.us-south.containers.appdomain.cloud
    Ingress Secret:         mycluster-<hash>-0000
    
  2. Visualizzare i dettagli del segreto e annotare il valore CRN. È il CRN del certificato TLS. Se non si dispone di un'istanza [Secrets Manager] registrata nel cluster, il segreto non ha un CRN. Per ulteriori dettagli, consultare la nota nel passo seguente.

    ibmcloud ks ingress secret get -c CLUSTER --name SECRET_NAME --namespace default
    
  3. Creare un segreto per il certificato predefinito di TLS in ogni spazio dei nomi in cui sono presenti risorse o app di Ingress. Specificare il CRN del certificato TLS con l'opzione di comando --cert-crn.

    In alternativa, è possibile impostare il segreto come nel defaultCertificateibm-ingress-deploy-config ConfigMap.

    ibmcloud ks ingress secret create --cluster CLUSTER_NAME_OR_ID --cert-crn CRN --name SECRET_NAME --namespace default
    

    Per copiare il segreto con il ibmcloud ks ingress secret create comando, è necessario che nel cluster sia registrata un'istanza Secrets Manager predefinita. Se non disponi di un'istanza Secrets Manager e i tuoi segreti sono invece scritti direttamente nel tuo cluster, i tuoi segreti non hanno il valore CRN richiesto e devi copiarli manualmente con kubectl i comandi.

Impostazione dei segreti di TLS per i sottodomini personalizzati

Se si definisce un sottodominio personalizzato nella risorsa Ingress, è possibile utilizzare il proprio certificato TLS per gestire la terminazione TLS. È necessario creare un segreto Kubernetes per memorizzare il certificato TLS, quindi importare questo segreto in ogni spazio dei nomi in cui sono presenti le applicazioni.

Memorizzando i certificati personalizzati di TLS in Secrets Manager è possibile importare i certificati direttamente in un segreto di Kubernetes nel cluster.

  1. Creare o importare un segreto per il certificato TLS nello spazio dei nomi in cui esiste la risorsa Ingress. Ad esempio, è possibile importare un segreto da Secrets Manager nel cluster eseguendo il seguente comando. Specificare il CRN del certificato TLS con l'opzione di comando --cert-crn.

    Per importare il certificato con il ibmcloud ks ingress secret create comando, è necessario che un'istanza Secrets Manager predefinita sia registrata nel cluster. Se non disponi di un'istanza Secrets Manager e i tuoi segreti sono invece scritti direttamente nel tuo cluster, i tuoi segreti non hanno il valore CRN richiesto e devi copiarli manualmente con kubectl i comandi.

    ibmcloud ks ingress secret create --name SECRET_NAME --cluster CLUSTER_NAME_OR_ID --cert-crn CERTIFICATE_CRN --namespace default
    
  2. Ripeti il passo precedente per ogni spazio dei nomi in cui esistono le tue applicazioni.

Gestione dei segreti non TLS

Per gestire i segreti non TLS, è possibile utilizzare i comandi ibmcloud ks ingress secret.

Esistono 5 tipi di segreti non TLS:

  • I segreti arbitrari contengono un valore di stringa.
  • Le credenziali IAM contengono una chiave API IAM.
  • I segreti di nome utente e password contengono un nome utente e una password come due valori separati.
  • I valori chiave contengono valori JSON.
  • Le credenziali personalizzate contengono valori (stringhe) personalizzati.

Scoprite come potete gestire in modo centralizzato i vostri segreti non TLS con IBM Cloud Secrets Manager. Con Secrets Manager è possibile creare segreti Kubernetes gestiti, aggiornare automaticamente i segreti, creare gruppi di segreti che controllano chi ha accesso ai segreti nel cluster e altro ancora.

Creare un segreto non TLS nel proprio cluster

Creare un segreto non TLS specificando l'opzione --type Opaque nel comando ibmcloud ks ingress secret create comando. Con il tipo di Opaque, è possibile includere più valori CRN non certificati. Se l'opzione " --type " non viene specificata, per impostazione predefinita viene applicata l'opzione " TLS ". Per ulteriori informazioni e ulteriori opzioni di comando, vedi il riferimento CLI.

Il seguente esempio di comando crea un segreto non TLS con il tipo Opaque specificato. I segreti non TLS richiedono almeno un campo segreto. Nota che il modo in cui specifichi l'opzione --field varia in base al tipo di segreto che crei.

ibmcloud ks ingress secret create -c cluster-test --name example-secret --namespace default --field crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1a11111aaa1a1111aa1aa111:111a1111-11a1 --type Opaque

Per verificare che il segreto sia stato creato, elencare tutti i segreti nello spazio dei nomi.

kubectl get secret -n default

L'esempio seguente mostra il risultato.

NAME                   TYPE                                  DATA   AGE
all-icr-io             kubernetes.io/dockerconfigjson        1      41h
default-token-8t6xw    kubernetes.io/service-account-token   3      41h
example-secret         Opaque                                        3m

Gestione dei campi segreti non TLS

Un campo segreto è una coppia chiave-valore che è memorizzata in un segreto non TLS. Fare riferimento agli esempi seguenti per visualizzare, aggiungere, aggiornare o rimuovere i campi segreti non TLS.

Visualizzazione dei valori del campo

È possibile visualizzare i valori dei campi di un segreto ottenendo i relativi dettagli.

kubectl get secret -n default example-secret -o yaml

Il seguente output di esempio mostra i campi segreti e i relativi valori nella sezione data.

apiVersion: v1
data:
  arbitraryFVT: AAAaaAAaAAA1AAAaaAAa
  userCredsFVT_password: aAAaa1aaaA=
  userCredsFVT_username: aAAaaa==
kind: Secret
metadata:
  annotations:
    ingress.cloud.ibm.com/cert-source: ibm
    razee.io/build-url: https://url.com
    razee.io/source-url: https://url.com
  creationTimestamp: "2022-11-08T19:45:05Z"
  name: example-secret
  namespace: default
  resourceVersion: "111111"
  uid: 1aaa1111-1a11-111a-a1a1-11111a1a1a1a
type: Opaque

È inoltre possibile elencare i campi in un segreto con i comandi ibmcloud ks ingress secret field ls e ibmcloud ks ingress secret get, ma gli output includono solo il nome campo e non il valore associato ad esso.

Aggiunta di un campo segreto

Aggiungere un campo segreto a un segreto non TLS eseguendo il comando ibmcloud ks ingress secret field add con l'opzione --field. È anche possibile utilizzare questa opzione per aggiungere campi quando si crea un segreto con il comando ibmcloud ks ingress secret create. Questa opzione non è supportata per i segreti TLS.

Esistono tre modi per specificare l'opzione --field. Quello scelto dipende dal tipo di segreto e da come si desidera denominare il campo nel segreto.

Opzioni per aggiungere campi ai segreti non TLS
Opzione Formato Descrizione Tipi di segreto supportati
Valore predefinito --field <crn> Il nome del campo aggiunto è il nome campo predefinito per il tipo di segreto del CRN fornito. Tutti i tipi di segreto non TLS
Con nome --field <name>=<crn> Utilizzare questa opzione per specificare un nome per il campo aggiunto. Il nome del campo aggiunto è il valore specificato per <name>.
  • Arbitrario
  • Credenziali IAM
Con prefisso --field prefix=<crn> Il nome del campo aggiunto è il nome campo predefinito per il tipo di segreto specificato dal CRN fornito, preceduto dal nome del segreto specificato da <crn> e da un carattere di sottolineatura.
  • Credenziali IAM
  • nome utente/password
  • chiave/valore
  • credenziali personalizzate

I nomi dei campi predefiniti sono arbitrary per segreti arbitrari, api_key per credenziali IAM, username o password per credenziali utente e key per chiave-valore.

Il seguente esempio aggiunge tre campi segreti - utilizzando lo stesso segreto delle credenziali IAM, denominato iam- per dimostrare in che modo le varie opzioni --field influiscono sul nome del campo risultante. È possibile visualizzare i campi aggiunti a un segreto eseguendo kubectl get secret e visualizzando il blocco data dell'output.

ibmcloud ks ingress secret field add --cluster example-cluster --name example-iam-secret --namespace default  --field crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa-1a11-111a-aa1a-1111aa1aa111:secret:111a1111-11a1-11aa-a1a1-111aa12345aa --field custom_iam_name=crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa-1a11-111a-aa1a-1111aa1aa111:secret:111a1111-11a1-11aa-a1a1-111aa12345aa --field prefix=crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa-1a11-111a-aa1a-1111aa1aa111:secret:111a1111-11a1-11aa-a1a1-111aa12345aa

Campi di esempio elencati nel blocco data dei dettagli del segreto.

data:
  api_key: bmZrUHR1VS1fNVpMOExsTmIxeTdQcXFTSENMc2pTUjRsNTQyTzZkZ2ZQMkk=  # Default field type using the default `api_key` field name
  custom_iam_name: bmZrUHR1VS1fNVpMOExsTmIxeTdQcXFTSENMc2pTUjRsNTQyTzZkZ2ZQMkk=  # Named field type using the specified `custom_iam_name` field name.
  iam_api_key: bmZrUHR1VS1fNVpMOExsTmIxeTdQcXFTSENMc2pTUjRsNTQyTzZkZ2ZQMkk= # Prefixed field type using the `iam` name in Secrets Manager followed by the `api_key` default name.

Aggiornamento dei campi segreti

Eseguire il comando ingress secret update per aggiornare i valori di un campo segreto. Notare che questo non aggiorna il CRN. Per ulteriori informazioni e opzioni di comandi, vedi il riferimento CLI.

ibmcloud ks ingress secret update --cluster example-cluster --name example-secret --namespace default

Rimozione di un campo segreto

È possibile rimuovere un campo segreto da un segreto non TLS. Per ulteriori informazioni e opzioni di comandi, vedi il riferimento CLI.

ibmcloud ks ingress secret field rm -c example-cluster --name example-secret --namespace default --field-name example-Field

Puoi verificare che il campo sia rimosso controllando il blocco data dei dettagli del segreto.

kubectl get secret -n default example-secret -o yaml

FAQ sui segreti

Esamina le risposte alle domande più comuni sulla gestione dei segreti nel tuo cluster.

I miei segreti vengono aggiornati automaticamente se non creo e registro un'istanza Secrets Manager ?
Se non registri un'istanza Secrets Manager sul tuo cluster, i tuoi segreti Ingress predefiniti continuano ad aggiornarsi automaticamente ogni 90 giorni e vengono applicati al tuo cluster. Tuttavia, tutti i segreti che hai creati che fanno riferimento al segreto Ingress predefinito non vengono aggiornati automaticamente.
Scenario di esempio: hai un certificato Ingress predefinito nello spazio dei nomi default. Esegui il comando ibmcloud ks ingress secret create e fai riferimento al CRN del certificato Ingress predefinito per eseguire il mirroring del certificato nello spazio dei nomi istio-system. Senza un'istanza Secrets Manager, il certificato Ingress predefinito nello spazio dei nomi default viene aggiornato automaticamente. Tuttavia, sei responsabile dell'aggiornamento regolare del certificato nello spazio dei nomi istio-system con i comandi **kubectl** o un altro metodo di rotazione.
Ho creato dei segreti che fanno riferimento al certificato Ingress predefinito, ma non ho creato e registrato un'istanza Secrets Manager. Come posso gestire i miei segreti?
Se non registri un'istanza Secrets Manager, IBM Cloud Kubernetes Service aggiorna automaticamente solo il segreto Ingress predefinito. Sei responsabile della gestione di tutti gli altri segreti utilizzando i comandi kubectl o un altro metodo di rotazione. Se i tuoi segreti fanno riferimento al certificato Ingress predefinito, rimuovili utilizzando ibmcloud ks ingress secret rm.