Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come abilitare Istio CNI per il componente aggiuntivo Mesh di servizi basato su Istio nel servizio Azure Kubernetes. Istio CNI migliora la sicurezza eliminando la necessità di funzionalità di rete con privilegi nei carichi di lavoro dell'applicazione all'interno della mesh del servizio.
Informazioni generali
Istio reindirizza il traffico dell'applicazione al proxy sidecar Envoy usando uno dei due meccanismi seguenti:
-
Istio CNI (): un plug-in CNI a
CNIChaininglivello di cluster configura il reindirizzamento del traffico, quindi i pod dell'applicazione non necessitano di funzionalità di rete con privilegi. Ilistio-validationcontenitore init viene aggiunto durante l'inserimento sidecar per verificare che il reindirizzamento del traffico sia configurato correttamente. -
Contenitori Init (
InitContainers): ogni pod dell'applicazione usa un contenitore init con privilegiistio-initche richiedeNET_ADMINeNET_RAWfunzionalità per configurare il reindirizzamento del traffico. Queste funzionalità spesso generano problemi di sicurezza negli ambienti aziendali.
A partire dalla revisione asm-1-30, Istio CNI è il meccanismo di reindirizzamento predefinito per le nuove installazioni mesh. Per le revisioni da asm-1-25 a asm-1-29, i container init rimangono l'opzione predefinita ed è necessario abilitare esplicitamente Istio CNI. Le revisioni precedenti non supportano Istio CNI.
Istio CNI offre i vantaggi seguenti rispetto ai contenitori init:
-
Migliora la sicurezza: rimuove la necessità di funzionalità di rete con privilegi (
NET_ADMIN,NET_RAW) dai carichi di lavoro dell'applicazione - Semplifica i criteri di sicurezza dei pod: i pod dell'applicazione richiedono solo funzionalità minime
- Mantiene la funzionalità: offre le stesse funzionalità di gestione del traffico dell'approccio tradizionale ai contenitori d'inizio.
Annotazioni
Istio CNI non sostituisce Azure CNI e non interferirà con il normale networking di AKS. Si tratta di un plug-in separato progettato per gestire la configurazione del reindirizzamento del traffico di Istio a livello di nodo, migliorando la sicurezza rimuovendo la necessità di contenitori init con privilegi nei pod dell'applicazione.
Prima di iniziare
Installare il interfaccia della riga di comando di Azure versione 2.86.0 o successiva. È possibile eseguire
az --versionper verificare la versione. Per installare o eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.È necessario un cluster AKS con il componente aggiuntivo del service mesh basato su Istio abilitato. Se non si dispone di questa configurazione, vedere Distribuire la mesh di servizi basata su Istio come componente aggiuntivo per il servizio Azure Kubernetes.
Verificare che la mesh del servizio Istio usi la versione
asm-1-25o versioni successive. È possibile controllare la revisione corrente con:az aks show --resource-group <resource-group-name> --name <cluster-name> --query 'serviceMeshProfile.istio.revisions'
Impostare le variabili di ambiente
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
Abilitare Istio CNI
Abilitare Istio CNI in una nuova installazione mesh
Per le revisioni asm-1-30 e successive, CNIChaining è il meccanismo predefinito di reindirizzamento del proxy per le nuove installazioni del componente aggiuntivo service mesh. Non è necessario specificare parametri aggiuntivi. Per le revisioni asm-1-25 fino a asm-1-29, abilita esplicitamente Istio CNI specificando il parametro --proxy-redirection-mechanism:
az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --proxy-redirection-mechanism CNIChaining
Abilitare Istio CNI su un'installazione di rete mesh esistente
Se il componente aggiuntivo Mesh del servizio Istio è già abilitato, è possibile passare a Istio CNI usando il comando seguente:
az aks mesh proxy-redirection-mechanism --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --mechanism CNIChaining
Il asm-1-30 valore predefinito si applica solo alle nuove installazioni, quindi l'aggiornamento di una mesh esistente non modifica il meccanismo di reindirizzamento.
Annotazioni
I pod esistenti non verranno trasferiti automaticamente al contenitore init istio-validation. Riavviare le distribuzioni dopo aver abilitato Istio CNI in modo che i pod rilevino la modifica (ad esempio kubectl rollout restart deployment/<name>).
Verificare che Istio CNI sia abilitato
Usa az aks get-credentials per ottenere le credenziali per il tuo cluster AKS.
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Dopo aver abilitato Istio CNI, verificare l'installazione controllando che il DaemonSet CNI sia in esecuzione:
kubectl get daemonset -n aks-istio-system
Dovresti vedere Istio CNI DaemonSet in esecuzione:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
azure-service-mesh-istio-cni-addon-node 3 3 3 3 3 kubernetes.io/os=linux 94s
Distribuire i carichi di lavoro e verificare il comportamento
Per verificare il miglioramento della sicurezza, è possibile distribuire l'applicazione di esempio bookinfo e verificare che i carichi di lavoro usino il contenitore init sicuro istio-validation anziché il contenitore con privilegi istio-init .
Distribuire l'applicazione di esempio
Prima di tutto, abilitare l'inserimento sidecar per lo spazio dei nomi predefinito:
# Get the current Istio revision
REVISION=$(az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --query 'serviceMeshProfile.istio.revisions[0]' -o tsv)
# Label the namespace for sidecar injection
kubectl label namespace default istio.io/rev=${REVISION}
Distribuire l'applicazione di esempio bookinfo:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.25/samples/bookinfo/platform/kube/bookinfo.yaml
Verificare l'uso dell'init container sicuro
Verificare che i pod distribuiti usino il contenitore init istio-validation sicuro anziché istio-init:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.initContainers[0].name}{"\t"}{.spec.initContainers[0].securityContext.capabilities}{"\n"}{end}'
L'output previsto dovrebbe visualizzare istio-validation come il contenitore init con funzionalità rimosse:
details-v1-799dc5d847-7x9gl istio-validation {"drop":["ALL"]}
productpage-v1-99d6d698f-89gpj istio-validation {"drop":["ALL"]}
ratings-v1-7545c4bb6c-m7t42 istio-validation {"drop":["ALL"]}
reviews-v1-8679d76d6c-jz4vg istio-validation {"drop":["ALL"]}
reviews-v2-5b9c77895c-b2b7m istio-validation {"drop":["ALL"]}
reviews-v3-5b57874f5f-kk9rt istio-validation {"drop":["ALL"]}
È anche possibile verificare la presenza di un pod specifico in YAML per verificare il contesto di sicurezza:
kubectl get pod <pod-name> -n <namespace> -o yaml | grep -A 20 -B 25 "name: istio-validation"
L'output dovrebbe indicare che il istio-validation contenitore init non dispone di funzionalità con privilegi:
initContainers:
- args:
…
name: istio-validation
…
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsGroup: 1337
runAsNonRoot: true
runAsUser: 1337
Disabilitare Istio CNI
Per disabilitare Istio CNI e tornare all'uso dei contenitori init tradizionali, usare il comando seguente:
az aks mesh proxy-redirection-mechanism --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --mechanism InitContainers
Dopo aver disabilitato Istio CNI:
Il DaemonSet CNI verrà rimosso:
kubectl get daemonset azure-service-mesh-istio-cni-addon-node -n aks-istio-systemOutput previsto (nessun DaemonSet CNI):
Error from server (NotFound): daemonsets.apps "azure-service-mesh-istio-cni-addon-node" not foundI nuovi carichi di lavoro useranno il contenitore init tradizionale
istio-initcon funzionalità di rete. Riavviare tutte le distribuzioni esistenti per applicare la modifica:kubectl rollout restart deployment/details-v1 kubectl rollout restart deployment/productpage-v1 kubectl rollout restart deployment/ratings-v1 kubectl rollout restart deployment/reviews-v1 kubectl rollout restart deployment/reviews-v2 kubectl rollout restart deployment/reviews-v3Verificare il nome e le funzionalità del contenitore init:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.initContainers[0].name}{"\t"}{.spec.initContainers[0].securityContext.capabilities}{"\n"}{end}'L'output previsto dovrebbe visualizzare
istio-initcon le funzionalità di rete:details-v1-57bc58c559-722v8 istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} productpage-v1-7bb64f657c-jw6gs istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} ratings-v1-57d5594c75-4zd49 istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} reviews-v1-7fd8f9cd59-mdcf9 istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} reviews-v2-7b8bdc9cdf-k9qgb istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} reviews-v3-588854d9d7-s2f7j istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]}
Passaggi successivi
- Distribuire gli ingressi esterni o interni per il componente aggiuntivo mesh del servizio Istio
- Configurare il componente aggiuntivo Mesh di servizi basato su Istio per il servizio Azure Kubernetes
- Informazioni sul componente aggiuntivo Mesh di servizi basato su Istio per il servizio Azure Kubernetes