Condividi tramite


Autorità di certificazione personalizzata (CA) nel servizio Azure Kubernetes (AKS) (anteprima)

Il servizio Azure Kubernetes genera e usa i certificati, le autorità di certificazione (CA) e gli account del servizio seguenti (SA):

  • Il server API del servizio Azure Kubernetes crea una CA denominata CA del cluster.
  • Il server API ha una CA del cluster, che firma i certificati per la comunicazione unidirezionale dal server API ai kubelet.
  • Ogni kubelet inoltre crea una richiesta di firma del certificato (CSR), firmata dalla CA del cluster, per la comunicazione dal kubelet al server API.
  • L'aggregatore API usa la CA del cluster per rilasciare certificati per la comunicazione con altre API. L'aggregatore API inoltre può avere la propria CA per il rilascio di tali certificati, ma attualmente usa la CA del cluster.
  • Ogni nodo usa un token Software Assurance, firmato dalla CA del cluster.
  • Il client kubectl ha un certificato per la comunicazione con il cluster del servizio Azure Kubernetes.

È anche possibile creare autorità di certificazione personalizzate, che consentono di stabilire una relazione di attendibilità tra i cluster del servizio Azure Kubernetes e i carichi di lavoro, ad esempio registri privati, proxy e firewall. Un segreto Kubernetes archivia le informazioni dell'autorità di certificazione e quindi viene passato a tutti i nodi del cluster. Questa funzionalità viene applicata per i pool di nodi, quindi è necessario abilitarla nei pool di nodi nuovi ed esistenti.

Questo articolo mostra come creare CA personalizzate e applicarle ai cluster del servizio Azure Kubernetes.

Prerequisiti

Limiti

  • Questa funzionalità non è attualmente supportata per i pool di nodi Windows.

Installare l'estensione aks-preview dell'interfaccia della riga di comando di Azure.

Importante

Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

  1. Installare l'estensione aks-preview usando il comando az extension add.

    az extension add --name aks-preview
    
  2. Eseguire l'aggiornamento alla versione più recente dell'estensione usando il comando az extension update.

    az extension update --name aks-preview
    

Registrare il flag di funzionalità CustomCATrustPreview

  1. Registrare il flag di funzionalità CustomCATrustPreview usando il comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    

    Sono necessari alcuni minuti per visualizzare lo stato Registered.

  2. Verificare lo stato della registrazione usando il comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    
  3. Quando lo stato diventa Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Installazione della CA personalizzata nei pool di nodi del servizio Azure Kubernetes

Installare le CA nei pool di nodi del servizio Azure Kubernetes

  • Se per il corretto provisioning, l'ambiente richiede l'aggiunta di CA personalizzate all'archivio attendibilità del nodo, è necessario passare un file di testo contenente fino a 10 certificati separati da righe vuote durante le operazioni az aks create o az aks update. File di testo di esempio:

    -----BEGIN CERTIFICATE-----
    cert1
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    cert2
    -----END CERTIFICATE-----
    

Installare le CA durante la creazione del pool di nodi

  • Installare ca durante la creazione del pool di nodi usando il az aks create comando e specificando il file di testo per il --custom-ca-trust-certificates parametro .

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs \
        --generate-ssh-keys
    

Rotazione della CA per la disponibilità durante l'avvio del pool di nodi

  • Aggiornare le CA passate al cluster durante l'avvio usando il comando az aks update e specificando il file di testo per il parametro --custom-ca-trust-certificates.

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates pathToFileWithCAs
    

    Nota

    Questa operazione attiva un aggiornamento del modello, assicurando che i nuovi nodi dispongano delle CA più recenti necessarie per il provisioning corretto. Il servizio Azure Kubernetes crea nodi aggiuntivi, svuota quelli esistenti, li elimina e li sostituisce con nodi in cui è installato il nuovo set di CA.

Installare le CA dopo la creazione del pool di nodi

Se il provisioning dell'ambiente può essere eseguito correttamente senza le CA personalizzate, è possibile fornire le CA distribuendo un segreto nello spazio dei nomi kube-system. Questo approccio consente la rotazione dei certificati senza la necessità di creare di nuovo i nodi.

  • Creare un manifesto YAML del segreto Kubernetes con la stringa di certificato con codifica Base64 nel data campo .

    apiVersion: v1
    kind: Secret
    metadata: 
        name: custom-ca-trust-secret
        namespace: kube-system
    type: Opaque
    data:
        ca1.crt: |
          {base64EncodedCertStringHere}
        ca2.crt: |
          {anotherBase64EncodedCertStringHere}
    

    I dati di questo segreto vengono usati per aggiornare le CA in tutti i nodi. Assicurarsi che il segreto sia denominato custom-ca-trust-secret e che venga creato nello spazio dei nomi kube-system. L'installazione di CA tramite segreto nello spazio dei nomi kube-system consente la rotazione della CA senza la necessità di una nuova creazione dei nodi. Per aggiornare o rimuovere una CA, è possibile modificare e applicare il manifesto YAML. Il cluster esegue il polling delle modifiche e aggiorna i nodi di conseguenza. L'applicazione delle modifiche potrebbe richiedere alcuni minuti.

    Nota

    Affinché le CA vengano ritirate correttamente, potrebbe essere necessario riavviare i containerd sul nodo. Se sembra che le CA non siano state aggiunte correttamente all'archivio attendibilità del nodo, è possibile attivare un riavvio usando il comando seguente dalla shell del nodo:

    systemctl restart containerd

Configurare un nuovo cluster del servizio Azure Kubernetes per l'uso di una CA personalizzata

  • Configurare un nuovo cluster del servizio Azure Kubernetes per l'uso di una CA personalizzata usando il comando az aks create con il parametro --enable-custom-ca-trust.

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --generate-ssh-keys
    

Configurare un nuovo cluster del servizio Azure Kubernetes per l'uso di una CA personalizzata con CA installate prima dell'avvio del nodo

  • Configurare un nuovo cluster del servizio Azure Kubernetes per l'uso di CA personalizzate con CA installate prima dell'avvio del nodo usando il comando az aks create con i parametri --enable-custom-ca-trust e --custom-ca-trust-certificates .

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs \
        --generate-ssh-keys
    

Configurare un cluster del servizio Azure Kubernetes esistente in modo che le CA personalizzate siano installate prima dell'avvio del nodo

  • Configurare un cluster del servizio Azure Kubernetes esistente in modo che le CA personalizzate siano aggiunte all'archivio attendibilità del nodo prima dell'avvio usando il comando az aks update con il parametro --custom-ca-trust-certificates.

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates pathToFileWithCAs
    

Configurare un nuovo pool di nodi per l'uso di una CA personalizzata

  • Configurare un nuovo pool di nodi per utilizzare una CA personalizzata usando il comando az aks nodepool add con il parametro --enable-custom-ca-trust.

    az aks nodepool add \
        --cluster-name <cluster-name> \
        --resource-group <resource-group-name> \
        --name <node-pool-name> \
        --enable-custom-ca-trust \
        --os-type Linux
    

    Se non esistono altri pool di nodi con la funzionalità abilitata, il cluster deve risolvere le differenze delle impostazioni per rendere effettive le modifiche. Questa operazione viene eseguita automaticamente come parte del ciclo del servizio Azure Kubernetes per risolvere le differenze. Prima dell'operazione, il set daemon e i pod non sono visualizzati nel cluster. È possibile attivare un'operazione immediata per risolvere le differenze usando il comando az aks update. Il set daemon e i pod vengono visualizzati al termine dell'aggiornamento.

Configurare un pool di nodi esistente per l'uso di una CA personalizzata

  • Configurare un pool di nodi esistente per usare una CA personalizzata usando il comando az aks nodepool update con il parametro --enable-custom-ca-trust.

    az aks nodepool update \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --enable-custom-ca-trust
    

    Se non esistono altri pool di nodi con la funzionalità abilitata, il cluster deve risolvere le differenze delle impostazioni per rendere effettive le modifiche. Questa operazione viene eseguita automaticamente come parte del ciclo del servizio Azure Kubernetes per risolvere le differenze. Prima dell'operazione, il set daemon e i pod non sono visualizzati nel cluster. È possibile attivare un'operazione immediata per risolvere le differenze usando il comando az aks update. Il set daemon e i pod vengono visualizzati al termine dell'aggiornamento.

Disabilitare la CA personalizzata in un pool di nodi

  • Disabilitare la funzionalità CA personalizzata in un pool di nodi esistente usando il az aks nodepool update comando con il --disable-custom-ca-trust parametro .

    az aks nodepool update \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --disable-custom-ca-trust
    

Risoluzione dei problemi

La funzionalità è abilitata e viene aggiunto il segreto con la CA; tuttavia le operazioni restituiscono l’errore Certificato X.509 firmato da autorità sconosciuta

Certificati formattati in modo non corretto passati nel segreto

Il servizio Azure Kubernetes richiede che i certificati passati nel segreto creato dall'utente siano formattati correttamente e base64 encoded. Assicurarsi che le CA passate siano codificate correttamente in base64 e che i file con CA non abbiano interruzioni di riga CR LF. I certificati passati a --custom-ca-trust-certificates non devono essere base64 encoded.

containerd non ha prelevato nuovi certificati

Dalla shell del nodo eseguire systemctl restart containerd. Dopo il riavvio di containerd, i nuovi certificati vengono prelevati correttamente dal runtime del contenitore.

Passaggi successivi

Per altre informazioni sulle procedure consigliate per la sicurezza del servizio Azure Kubernetes, vedere Procedure consigliate per la sicurezza e gli aggiornamenti del cluster nel servizio Azure Kubernetes (AKS).