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
È necessario abilitare il componente aggiuntivo Criteri di Azure per il servizio Azure Kubernetes. Per altre informazioni, vedere Abilitare Criteri di Azure nel cluster del servizio Azure Kubernetes.
Per configurare le protezioni di distribuzione, è necessario disporre di una versione
2.0.0b1
o successiva dell'estensioneaks-preview
. Per installare l'estensione, vedere Installare l'estensione dell'interfaccia della riga di comando aks-preview. È anche consigliabile aggiornare l'interfaccia della riga di comando di Azure per assicurarsi che sia installata la versione più recente.Per creare e modificare la configurazione per le protezioni di distribuzione, è necessaria una sottoscrizione con le autorizzazioni seguenti per il cluster del servizio Azure Kubernetes:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
È necessario registrare il flag di funzionalità di protezioni di distribuzione. Per registrare il flag di funzionalità, vedere Registrare il flag di funzionalità per le protezioni di distribuzione.
Installare l'estensione dell'interfaccia della riga di comando aks-preview
Installare l'estensione dell'interfaccia della riga di comando
aks-preview
usando il comandoaz extension add
.az extension add --name aks-preview
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
Registrare il flag della funzionalità
SafeguardsPreview
usando il comandoaz feature register
.az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Sono necessari alcuni minuti per visualizzare lo stato Registered.
Verificare lo stato della registrazione usando il comando
az feature show
.az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
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
- Altre informazioni sulle procedure consigliate per l'uso di un cluster del servizio Azure Kubernetes.
Azure Kubernetes Service