Condividi tramite


Usare le protezioni di distribuzione per applicare le procedure consigliate nel servizio Azure Kubernetes (anteprima)

Questo articolo illustra come usare le protezioni di distribuzione per applicare le procedure consigliate in un cluster del servizio Azure Kubernetes.

Panoramica

Durante il ciclo di vita di sviluppo, è comune che si verifichino bug, problemi e altri errori se la distribuzione iniziale delle risorse Kubernetes include configurazioni errate. Per semplificare il carico di sviluppo di Kubernetes, il servizio Azure Kubernetes offre misure di sicurezza per la distribuzione (anteprima). Le protezioni di distribuzione applicano le procedure consigliate di Kubernetes nel cluster del servizio Azure Kubernetes tramite i controlli di Criteri di Azure.

Le protezioni di distribuzione offrono due livelli di configurazione:

  • Warning: visualizza i messaggi di avviso nel terminale del codice per avvisare l'utente di eventuali configurazioni del cluster non conformi, ma consente comunque di eseguire la richiesta.
  • Enforcement: applica configurazioni conformi negando e modificando le distribuzioni se non seguono le procedure consigliate.

Dopo aver configurato le protezioni di distribuzione per "Avviso" o "Imposizione", queste valutano a livello di codice i cluster al momento della creazione o dell'aggiornamento per la conformità. Le protezioni di distribuzione visualizzano anche informazioni di conformità aggregate tra i carichi di lavoro a livello di risorsa tramite il dashboard di conformità di Criteri di Azure nel portale di Azure, nell'interfaccia della riga di comando o nel terminale. L'esecuzione di un carico di lavoro non conforme indica che il cluster non segue le procedure consigliate e che i carichi di lavoro nel cluster sono a rischio di problemi causati dalla configurazione del cluster.

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:

Prerequisiti

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

  1. Installare l'estensione dell'interfaccia della riga di comando aks-preview usando il comando az extension add.

    az extension add --name aks-preview
    
  2. Aggiornare l'estensione per assicurarsi che sia installata la versione più recente usando il comando az extension update.

    az extension update --name aks-preview
    

Registrare il flag di funzionalità di protezioni di distribuzione

  1. Registrare il flag della funzionalità SafeguardsPreview usando il comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    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 SafeguardsPreview
    
  3. Quando lo stato riflette Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Criteri delle protezioni di distribuzione

Nota

I criteri ReadOnlyRootFilesystem e RootfilesystemInitContainers sono attualmente disponibili solo in Linux.

La tabella seguente elenca i criteri che diventano attivi e le risorse Kubernetes di destinazione quando si abilitano le protezioni di distribuzione. È possibile visualizzare le protezioni di distribuzione attualmente disponibili nel portale di Azure come definizione di Criteri di Azure o in definizioni predefinite di Criteri di Azure per il servizio Azure Kubernetes. L'intento di questa raccolta è creare un elenco comune e generico di procedure consigliate applicabili alla maggior parte degli utenti e dei casi d'uso.

Criteri di protezione della distribuzione Risorsa Kubernetes di destinazione Risultato della mutazione, se disponibile
[Anteprima]: non è possibile modificare singoli nodi Nodo N/D
Le risorse CPU e memoria dei contenitori nel cluster Kubernetes non devono superare i limiti specificati Pod Imposta i limiti delle risorse CPU su 500 m se non è impostato e imposta i limiti di memoria su 500 Mi se non è presente alcun percorso
[Anteprima]: deve avere un set di regole anti-affinità Deployment, StatefulSet, ReplicationController, ReplicaSet N/D
[Anteprima]: nessuna etichetta specifica del servizio Azure Kubernetes Deployment, StatefulSet, Replicaset N/D
I contenitori del cluster Kubernetes devono usare solo le immagini consentite Pod N/D
[Anteprima]: taint del pool di sistema riservato Nodo Rimuove il taint CriticalAddonsOnly da un pool di nodi utente, se non impostato. Il servizio Azure Kubernetes usa il taint CriticalAddonsOnly per tenere lontani i pod dei clienti dal pool di sistema. Questa configurazione garantisce una netta separazione tra i componenti del servizio Azure Kubernetes e i pod dei clienti e impedisce l'eliminazione dei pod dei clienti che non tollerano il taint CriticalAddonsOnly.
Assicura che per i contenitori del cluster siano configurati probe di conformità o di attività Pod N/D
I cluster Kubernetes devono usare driver Container Storage Interface(CSI) StorageClass StorageClass N/D
[Anteprima]: i contenitori del cluster Kubernetes devono eseguire il pull solo di immagini quando sono presenti segreti pull delle immagini Pod N/D
[Anteprima]: il cluster Kubernetes deve implementare budget accurati di interruzione dei pod Deployment, ReplicaSet, StatefulSet Imposta maxUnavailable nella risorsa PodDisruptionBudget su 1.
[Anteprima]: i servizi cluster Kubernetes devono usare selettori univoci Service N/D
[Anteprima]: ReadOnlyRootFilesystem nella specifica pod è impostata su true Pod Imposta readOnlyRootFilesystem nella specifica pod su true se non impostata. Questa configurazione impedisce ai contenitori di scrivere nel file system radice.
[Anteprima]: RootfilesystemInitContainers nella specifica pod è impostata su true Pod Imposta rootFilesystemInitContainers nella specifica pod su true se non impostata.
[Anteprima]: le immagini del contenitore del cluster Kubernetes non devono includere il tag di immagine più recente Deployment, StatefulSet, ReplicationController, ReplicaSet N/D
[Anteprima]: le immagini del contenitore del cluster Kubernetes devono includere l'hook preStop Deployment, StatefulSet, ReplicationController, ReplicaSet N/D

Se si ha un'idea o una richiesta per una protezione di distribuzione, aprire un problema nel repository GitHub del servizio Azure Kubernetes e aggiungere [deployment safeguards request] all'inizio del titolo.

Abilitare le protezioni di distribuzione

Nota

Se i Criteri di Azure sono stati abilitati per la prima volta per l'uso delle misure di sicurezza della distribuzione, potrebbe essere necessario attendere fino a 20 minuti affinché siano applicati i Criteri di Azure.

L'uso del livello Enforcement delle protezioni di distribuzione significa che si sceglie di bloccare e modificare le distribuzioni. Considerare il modo in cui questi criteri potrebbero funzionare con il cluster del servizio Azure Kubernetes prima di abilitare Enforcement.

Abilitare le protezioni di distribuzione su un nuovo cluster

Abilitare le protezioni di distribuzione in un nuovo cluster usando il comando az aks create con i flag --safeguards-level e --safeguards-version.

Se si desidera ricevere avvisi di non conformità, impostare --safeguards-level su Warning. Se si desidera negare o modificare tutte le distribuzioni non conformi, impostarla su Enforcement. Per ricevere avvisi, impostare --safeguards-level su "Avviso". Per negare o modificare tutte le distribuzioni che non rispettano le protezioni di distribuzione, impostare --safeguards-level su "Imposizione". Per impostare la versione delle protezioni di distribuzione, usare il flag --safeguards-version. Al momento, v2.0.0 è la versione più recente delle protezioni di distribuzione.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Abilitare le protezioni di distribuzione su un cluster esistente

Abilitare le protezioni di distribuzione in un cluster esistente con il componente aggiuntivo Criteri di Azure abilitato usando il comando az aks update con i flag --safeguards-level e --safeguards-version. Se si desidera ricevere avvisi di non conformità, impostare --safeguards-level su Warning. Se si desidera negare o modificare tutte le distribuzioni non conformi, impostarla su Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Se si vuole aggiornare il livello di protezioni di distribuzione di un cluster esistente, usare il comando az aks update con il flag --safeguards-level impostato su Warning o Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Esclusione degli spazi dei nomi

È anche possibile escludere determinati spazi dei nomi dalle protezioni di distribuzione. Quando si esclude uno spazio dei nomi, l'attività in tale spazio dei nomi non viene influenzata da avvisi o imposizioni delle protezioni di distribuzione.

Ad esempio, per escludere gli spazi dei nomi ns1 e ns2, usare un elenco delimitato da virgole di spazi dei nomi con il flag --safeguards-excluded-ns, come illustrato nell'esempio seguente:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

Aggiornare la versione di protezione della distribuzione

Nota

v2.0.0 è la versione più recente delle protezioni di distribuzione.

Aggiornare la versione delle protezioni di distribuzione usando il comando az aks update con il flag --safeguards-version impostato sulla nuova versione. Nell'esempio seguente viene aggiornato un cluster esistente per usare la versione 2.0.0:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Verificare la conformità tra cluster

Dopo aver distribuito il manifesto di Kubernetes, vengono visualizzati avvisi o un potenziale messaggio di rifiuto nell'interfaccia della riga di comando o nel terminale se il cluster non è conforme alle misure di sicurezza della distribuzione, come illustrato negli esempi seguenti:

Avvertenza

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Imposizione

Con le mutazioni di sicurezza della distribuzione, il livello Enforcement modifica le risorse Kubernetes, se applicabile. Tuttavia, le risorse Kubernetes devono comunque passare tutte le misure di sicurezza per una corretta distribuzione. Se i criteri di sicurezza hanno esito negativo, la risorsa viene negata e non verrà distribuita.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Se le risorse Kubernetes sono conformi alle misure di sicurezza delle mutazioni applicabili e soddisfano tutti gli altri requisiti di sicurezza, verranno distribuite correttamente, come illustrato nell'esempio seguente:

$ kubectl apply -f pod.yml
pod/my-pod created

Verificare la conformità tra cluster usando il dashboard di Criteri di Azure

Per verificare che le protezioni di distribuzione siano state applicate e per verificare la conformità del cluster, passare alla pagina del portale di Azure per il cluster e selezionare Criteri, quindi selezionare Passa a Criteri di Azure.

Nell'elenco di criteri e iniziative selezionare l'iniziativa associata alle protezioni di distribuzione. Viene visualizzato un dashboard che mostra lo stato di conformità nel cluster del servizio Azure Kubernetes.

Nota

Per valutare correttamente la conformità all'interno del cluster del servizio Azure Kubernetes, l'iniziativa Criteri di Azure deve avere come ambito il gruppo di risorse del cluster.

Disabilitare le protezioni di distribuzione

Disabilitare le misure di sicurezza della distribuzione nel cluster usando il comando az aks update e impostare --safeguards-level su Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

Domande frequenti

Le protezioni di distribuzione sono state abilitate con Criteri di Azure per la prima volta. Perché non vengono visualizzati avvisi? Perché i pod non vengono rifiutati?

La sincronizzazione con il cluster con Criteri di Azure può richiedere fino a 35 minuti dopo la prima abilitazione.

Si è appena passati da Avviso a Imposizione. Le modifiche avranno effetto immediato?

Quando si cambiano i livelli di protezione delle distribuzioni, potrebbe essere necessario attendere fino a 15 minuti prima che il nuovo livello venga applicato.

È possibile creare mutazioni personalizzate?

No. Se si ha un'idea per una protezione, aprire un problema nel repository GitHub del servizio Azure Kubernetes e aggiungere [deployment safeguards request] all'inizio del titolo.

È possibile scegliere le mutazioni in Imposizione?

No. Le protezioni di distribuzione includono tutto o niente. Dopo aver attivato Avviso o Imposizione, tutte le protezioni saranno attive.

Perché la risorsa di distribuzione è stata ammessa anche se non segue le procedure consigliate?

Le protezioni di distribuzione applicano gli standard delle procedure consigliate tramite i controlli di Criteri di Azure e hanno criteri che convalidano le risorse Kubernetes. Per valutare e applicare i componenti del cluster, Criteri di Azure estende Gatekeeper. L'imposizione di Gatekeeper opera anche in un modello fail-open. Poiché non esiste alcuna garanzia che Gatekeeper risponderà alla chiamata di rete, assicurarsi che in tal caso la convalida venga ignorata in modo che il rifiuto non blocchi le distribuzioni.

Per altre informazioni, vedere convalida del carico di lavoro in Gatekeeper.

Passaggi successivi