Share via


Creare e collegare un cluster servizio Azure Kubernetes con v1

SI APPLICA A:Python SDK azureml v1

SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v1

Importante

Questo articolo illustra come usare l'interfaccia della riga di comando e l'SDK v1 per creare o collegare un cluster servizio Azure Kubernetes, considerato ora come funzionalità legacy. Per collegare servizio Azure Kubernetes cluster usando l'approccio consigliato per la versione 2, vedere Introduzione alla destinazione di calcolo Kubernetes nella versione 2.

Azure Machine Learning può distribuire modelli di Machine Learning sottoposti a training in servizio Azure Kubernetes. Tuttavia, è prima necessario creare un cluster servizio Azure Kubernetes (servizio Azure Kubernetes) dall'area di lavoro di Azure Machine Learning o collegare un cluster del servizio Azure Kubernetes esistente. Questo articolo fornisce informazioni sulla creazione e il collegamento di un cluster.

Prerequisiti

  • Un'area di lavoro di Azure Machine Learning. Per altre informazioni, vedere Creare un'area di lavoro di Azure Machine Learning.

  • Estensione dell'interfaccia della riga di comando di Azure (v1) per il servizio Machine Learning, Azure Machine Learning Python SDK o l'estensione Azure Machine Learning Visual Studio Code.

    Importante

    Alcuni dei comandi dell'interfaccia della riga di comando di Azure in questo articolo usano l'estensione azure-cli-ml, o v1 per Azure Machine Learning. Il supporto per l'estensione v1 terminerà il 30 settembre 2025. Sarà possibile installare e usare l'estensione v1 fino a tale data.

    È consigliabile passare all'estensione , o v2, prima del ml30 settembre 2025. Per altre informazioni sull'estensione v2, vedere Estensione dell'interfaccia della riga di comando di Azure ML e Python SDK v2.

  • Se si prevede di usare un Rete virtuale di Azure per proteggere la comunicazione tra l'area di lavoro di Azure Machine Learning e il cluster del servizio Azure Kubernetes, l'area di lavoro e le risorse associate (archiviazione, insieme di credenziali delle chiavi, Registro Azure Container) devono avere endpoint privati o endpoint di servizio nella stessa rete virtuale della rete virtuale del cluster del servizio Azure Kubernetes. Seguire l'esercitazione creare un'area di lavoro sicura per aggiungere tali endpoint privati o endpoint di servizio alla rete virtuale.

Limitazioni

  • Un servizio Azure Kubernetes può essere creato o collegato solo come singola destinazione di calcolo nell'area di lavoro di Azure Machine Learning. L'uso di più allegati per un servizio Azure Kubernetes non è supportato.

  • Se è necessario distribuire un Load Balancer Standard(SLB) nel cluster anziché un Load Balancer (BLB), creare un cluster nel portale/interfaccia della riga di comando/SDK del servizio Azure Kubernetes e collegarlo all'area di lavoro di Azure Machine Learning.

  • Se si dispone di un criterio di Azure che limita la creazione di indirizzi IP pubblici, la creazione del cluster del servizio Azure Kubernetes avrà esito negativo. Il servizio Azure Kubernetes richiede un indirizzo IP pubblico per il traffico in uscita. L'articolo sul traffico in uscita fornisce anche materiale sussidiario per bloccare il traffico in uscita dal cluster tramite l'indirizzo IP pubblico, tranne che per alcuni nomi di dominio completi. Esistono 2 modi per abilitare un indirizzo IP pubblico:

    • Il cluster può usare l'indirizzo IP pubblico creato per impostazione predefinita con bilanciamento del carico software o bilanciamento del carico software oppure
    • Il cluster può essere creato senza un indirizzo IP pubblico e quindi un indirizzo IP pubblico è configurato con un firewall con una route definita dall'utente. Per altre informazioni, vedere Personalizzare l'uscita del cluster con una route definita dall'utente.

    Il piano di controllo di Azure Machine Learning non comunica con questo indirizzo IP pubblico. Comunica con il piano di controllo del servizio Azure Kubernetes per le distribuzioni.

  • Per collegare un cluster del servizio Azure Kubernetes, all'entità servizio o all'utente che esegue l'operazione deve essere assegnato il ruolo Proprietario o collaboratore del controllo degli accessi in base al ruolo di Azure nel gruppo di risorse di Azure che contiene il cluster. All'entità servizio o all'utente deve essere assegnato anche servizio Azure Kubernetes Ruolo Amministrazione cluster nel cluster.

  • Se si collega un cluster del servizio Azure Kubernetes, con un intervallo IP autorizzato abilitato per accedere al server API, abilitare gli intervalli IP del piano di controllo di Azure Machine Learning per il cluster del servizio Azure Kubernetes. Il piano di controllo di Azure Machine Learning viene distribuito nelle diverse aree associate e distribuisce pod di inferenza nel cluster del servizio Azure Kubernetes. Senza accesso al server API, non è possibile distribuire i pod di inferenza. Quando si abilitano gli intervalli IP in un cluster del servizio Azure Kubernetes, usare gli intervalli IP per entrambe le aree associate.

    Gli intervalli IP autorizzati funzionano solo con Load Balancer Standard.

  • Se si vuole usare un cluster del servizio Azure Kubernetes privato (usando collegamento privato di Azure), è prima necessario creare il cluster e quindi collegarlo all'area di lavoro. Per altre informazioni, vedere Creare un cluster privato del servizio Azure Kubernetes.

  • L'utilizzo di un nome di dominio completo (FQDN) pubblico con un cluster del servizio Azure Kubernetes privatonon è supportato con Azure Machine Learning.

  • Il nome della risorsa di calcolo per il cluster del servizio Azure Kubernetes DEVE essere univoco nell'area di lavoro di Azure Machine Learning. Può includere lettere, cifre e trattini. Deve iniziare con una lettera, terminare con una lettera o una cifra e avere una lunghezza compresa tra 3 e 24 caratteri.

  • Se si vogliono distribuire modelli in nodi GPU o nodi FPGA (o uno SKU specifico), è necessario creare un cluster con lo SKU specifico. La creazione di un pool di nodi secondario in un cluster esistente e la distribuzione di modelli nel pool di nodi secondario non sono supportate.

  • Quando si crea o si collega un cluster, è possibile selezionare se creare il cluster per sviluppo-test o produzione. Se si vuole creare un cluster del servizio Azure Kubernetes per lo sviluppo, la convalida e il test invece che per la produzione, impostare lo scopo del cluster su sviluppo-test. Se non si specifica lo scopo del cluster, viene creato un cluster di produzione.

    Importante

    Un cluster di sviluppo-test non è adatto per il traffico a livello di produzione e può aumentare i tempi di inferenza. I cluster di sviluppo/test non garantiscono anche la tolleranza di errore.

  • Quando si crea o si collega un cluster, se il cluster verrà usato per la produzione, deve contenere almeno 3 nodi. Un cluster di sviluppo-test deve contenere almeno 1 nodo.

  • L'SDK Azure Machine Learning non supporta il ridimensionamento di un cluster del servizio Azure Kubernetes. Per ridimensionare i nodi nel cluster, usare l'interfaccia utente del cluster del servizio Azure Kubernetes in studio di Azure Machine Learning. È possibile modificare solo il conteggio dei nodi, non le dimensioni della macchina virtuale del cluster. Per altre informazioni sul ridimensionamento dei nodi in un cluster del servizio Azure Kubernetes, vedere gli articoli seguenti:

  • Non aggiornare direttamente il cluster usando una configurazione YAML. Mentre il servizio Azure Kubernetes supporta gli aggiornamenti tramite la configurazione YAML, le distribuzioni di Azure Machine Learning eseguiranno l'override delle modifiche. Gli unici due campi YAML che non verranno sovrascritti sono limiti di richiesta e cpu e memoria.

  • La creazione di un cluster del servizio Azure Kubernetes tramite l'interfaccia utente studio di Azure Machine Learning, l'SDK o l'estensione dell'interfaccia della riga di comando non è idempotente. Il tentativo di creare di nuovo la risorsa genera un errore nel quale viene comunicato che esiste già un cluster con lo stesso nome.

    • Anche l'uso di un modello di Azure Resource Manager e della risorsa Microsoft.MachineLearningServices/workspaces/computes per creare un cluster del servizio Azure Kubernetes non è idempotente. Se si tenta di usare di nuovo il modello per aggiornare una risorsa già esistente, si riceverà lo stesso errore.

Versione del servizio Azure Kubernetes

servizio Azure Kubernetes consente di creare un cluster usando diverse versioni di Kubernetes. Per altre informazioni sulle versioni disponibili, vedere Versioni di Kubernetes supportate in servizio Azure Kubernetes.

Quando si crea un cluster servizio Azure Kubernetes usando uno dei metodi seguenti, non è possibile scegliere nella versione del cluster creata:

  • studio di Azure Machine Learning o la sezione di Azure Machine Learning della portale di Azure.
  • Estensione Machine Learning per l'interfaccia della riga di comando di Azure.
  • Azure Machine Learning SDK.

Questi metodi di creazione di un cluster del servizio Azure Kubernetes usano la versione predefinita del cluster. La versione predefinita cambia nel tempo man mano che diventano disponibili nuove versioni di Kubernetes.

Quando si collega un cluster del servizio Azure Kubernetes esistente, sono supportate tutte le versioni del servizio Azure Kubernetes attualmente supportate.

Importante

servizio Azure Kubernetes usa il driver Blobfuse FlexVolume per le versioni <=1.16 e il driver CSI BLOB per le versioni >=1.17. È quindi importante ridribuire o aggiornare il servizio Web dopo l'aggiornamento del cluster per eseguire la distribuzione nel metodo blobfuse corretto per la versione del cluster.

Nota

In alcuni casi perimetrali è presente un cluster meno recente che non è più supportato. In questo caso, l'operazione di collegamento restituirà un errore ed elenca le versioni attualmente supportate.

È possibile allegare le versioni di anteprima . La funzionalità di anteprima viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Il supporto per l'uso delle versioni di anteprima può essere limitato. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.

Versioni disponibili e predefinite

Per trovare le versioni del servizio Azure Kubernetes disponibili e predefinite, usare il comando dell'interfaccia della riga di comando di Azure az aks get-versions. Ad esempio, il comando seguente restituisce le versioni disponibili nell'area Stati Uniti occidentali:

az aks get-versions -l westus -o table

L'output di questo comando è simile al testo seguente:

KubernetesVersion    Upgrades
-------------------  ----------------------------------------
1.18.6(preview)      None available
1.18.4(preview)      1.18.6(preview)
1.17.9               1.18.4(preview), 1.18.6(preview)
1.17.7               1.17.9, 1.18.4(preview), 1.18.6(preview)
1.16.13              1.17.7, 1.17.9
1.16.10              1.16.13, 1.17.7, 1.17.9
1.15.12              1.16.10, 1.16.13
1.15.11              1.15.12, 1.16.10, 1.16.13

Per trovare la versione predefinita usata durante la creazione di un cluster tramite Azure Machine Learning, è possibile usare il --query parametro per selezionare la versione predefinita:

az aks get-versions -l westus --query "orchestrators[?default == `true`].orchestratorVersion" -o table

L'output di questo comando è simile al testo seguente:

Result
--------
1.16.13

Se si vuole controllare a livello di codice le versioni disponibili, usare l'API REST Client del servizio contenitore - Elenca agenti di orchestrazione. Per trovare le versioni disponibili, esaminare le voci in cui orchestratorType è Kubernetes. Le voci associate orchestrationVersion contengono le versioni disponibili che possono essere collegate all'area di lavoro.

Per trovare la versione predefinita usata durante la creazione di un cluster tramite Azure Machine Learning, trovare la voce dove orchestratorType è Kubernetes e default è true. Il valore associato orchestratorVersion è la versione predefinita. Il frammento JSON seguente mostra una voce di esempio:

...
 {
        "orchestratorType": "Kubernetes",
        "orchestratorVersion": "1.16.13",
        "default": true,
        "upgrades": [
          {
            "orchestratorType": "",
            "orchestratorVersion": "1.17.7",
            "isPreview": false
          }
        ]
      },
...

Creare un nuovo cluster del servizio Azure Kubernetes

Tempo stimato: circa 10 minuti.

La creazione o il collegamento di un cluster del servizio Azure Kubernetes è un processo monouso per l'area di lavoro. È possibile riutilizzare questo cluster per più distribuzioni. Se si elimina il cluster o il gruppo di risorse che lo contiene, è necessario creare un nuovo cluster alla successiva distribuzione. È possibile avere più cluster del servizio Azure Kubernetes collegati all'area di lavoro.

L'esempio seguente illustra come creare un nuovo cluster del servizio Azure Kubernetes usando l'SDK e l'interfaccia della riga di comando:

SI APPLICA A:Python SDK azureml v1

from azureml.core.compute import AksCompute, ComputeTarget

# Use the default configuration (you can also provide parameters to customize this).
# For example, to create a dev/test cluster, use:
# prov_config = AksCompute.provisioning_configuration(cluster_purpose = AksCompute.ClusterPurpose.DEV_TEST)
prov_config = AksCompute.provisioning_configuration()

# Example configuration to use an existing virtual network
# prov_config.vnet_name = "mynetwork"
# prov_config.vnet_resourcegroup_name = "mygroup"
# prov_config.subnet_name = "default"
# prov_config.service_cidr = "10.0.0.0/16"
# prov_config.dns_service_ip = "10.0.0.10"
# prov_config.docker_bridge_cidr = "172.17.0.1/16"

aks_name = 'myaks'
# Create the cluster
aks_target = ComputeTarget.create(workspace = ws,
                                    name = aks_name,
                                    provisioning_configuration = prov_config)

# Wait for the create process to complete
aks_target.wait_for_completion(show_output = True)

Per altre informazioni sulle classi, i metodi e i parametri usati in questo esempio, vedere i documenti di riferimento seguenti:

Collegare un cluster del servizio Azure Kubernetes esistente

Stima del tempo: Circa 5 minuti.

Se nella sottoscrizione di Azure è già presente un cluster del servizio Azure Kubernetes, è possibile usarlo con l'area di lavoro.

Suggerimento

Il cluster del servizio Azure Kubernetes esistente può trovarsi in un'area di Azure diversa dall'area di lavoro di Azure Machine Learning.

Avviso

Non creare più allegati simultanei allo stesso cluster del servizio Azure Kubernetes. Ad esempio, collegare un cluster del servizio Azure Kubernetes a un'area di lavoro usando due nomi diversi o collegare un cluster del servizio Azure Kubernetes a un'area di lavoro diversa. Ogni nuovo allegato interromperà gli allegati esistenti precedenti e causerà un errore imprevedibile.

Se si vuole ricollegare un cluster del servizio Azure Kubernetes, ad esempio per modificare l'impostazione di configurazione di TLS o di altro cluster, è prima necessario rimuovere l'allegato esistente usando AksCompute.detach().

Per altre informazioni sulla creazione di un cluster del servizio Azure Kubernetes tramite l'interfaccia della riga di comando di Azure o il portale, vedere gli articoli seguenti:

L'esempio seguente illustra come collegare un cluster del servizio Azure Kubernetes esistente all'area di lavoro:

SI APPLICA A:Python SDK azureml v1

from azureml.core.compute import AksCompute, ComputeTarget
# Set the resource group that contains the AKS cluster and the cluster name
resource_group = 'myresourcegroup'
cluster_name = 'myexistingcluster'

# Attach the cluster to your workgroup. If the cluster has less than 12 virtual CPUs, use the following instead:
# attach_config = AksCompute.attach_configuration(resource_group = resource_group,
#                                         cluster_name = cluster_name,
#                                         cluster_purpose = AksCompute.ClusterPurpose.DEV_TEST)
attach_config = AksCompute.attach_configuration(resource_group = resource_group,
                                         cluster_name = cluster_name)
aks_target = ComputeTarget.attach(ws, 'myaks', attach_config)

# Wait for the attach process to complete
aks_target.wait_for_completion(show_output = True)

Per altre informazioni sulle classi, i metodi e i parametri usati in questo esempio, vedere i documenti di riferimento seguenti:

Creare o collegare un cluster del servizio Azure Kubernetes con terminazione TLS

Quando si crea o si collega un cluster del servizio Azure Kubernetes, è possibile abilitare la terminazione TLS con AksCompute.provisioning_configuration() e AksCompute.attach_configuration() oggetti di configurazione. Entrambi i metodi restituiscono un oggetto di configurazione con un metodo enable_ssl ed è possibile usare enable_ssl metodo per abilitare TLS.

Nell'esempio seguente viene illustrato come abilitare la terminazione TLS con la generazione e la configurazione automatica dei certificati TLS usando il certificato Microsoft.

SI APPLICA A:Python SDK azureml v1

   from azureml.core.compute import AksCompute, ComputeTarget
   
   # Enable TLS termination when you create an AKS cluster by using provisioning_config object enable_ssl method

   # Leaf domain label generates a name using the formula
   # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com"
   # where "######" is a random series of characters
   provisioning_config.enable_ssl(leaf_domain_label = "contoso")
   
   # Enable TLS termination when you attach an AKS cluster by using attach_config object enable_ssl method

   # Leaf domain label generates a name using the formula
   # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com"
   # where "######" is a random series of characters
   attach_config.enable_ssl(leaf_domain_label = "contoso")


Nell'esempio seguente viene illustrato come abilitare la terminazione TLS con certificato personalizzato e nome di dominio personalizzato. Con il dominio personalizzato e il certificato, è necessario aggiornare il record DNS in modo che punti all'indirizzo IP dell'endpoint di assegnazione dei punteggi. Vedere Aggiornare il DNS

SI APPLICA A:Python SDK azureml v1

   from azureml.core.compute import AksCompute, ComputeTarget

   # Enable TLS termination with custom certificate and custom domain when creating an AKS cluster
   
   provisioning_config.enable_ssl(ssl_cert_pem_file="cert.pem",
                                        ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
    
   # Enable TLS termination with custom certificate and custom domain when attaching an AKS cluster

   attach_config.enable_ssl(ssl_cert_pem_file="cert.pem",
                                        ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")


Nota

Per altre informazioni su come proteggere la distribuzione del modello nel cluster del servizio Azure Kubernetes, vedere Usare TLS per proteggere un servizio Web tramite Azure Machine Learning

Creare o collegare un cluster del servizio Azure Kubernetes per usare i Load Balancer interni con ip privato

Quando si crea o si collega un cluster del servizio Azure Kubernetes, è possibile configurare il cluster per l'uso di un Load Balancer interno. Con un Load Balancer interno, gli endpoint di assegnazione dei punteggi per le distribuzioni al servizio Azure Kubernetes useranno un indirizzo IP privato all'interno della rete virtuale. I frammenti di codice seguenti illustrano come configurare un Load Balancer interno per un cluster del servizio Azure Kubernetes.

SI APPLICA A:Python SDK azureml v1

Per creare un cluster del servizio Azure Kubernetes che usa un Load Balancer interno, usare i load_balancer_type parametri e load_balancer_subnet :

from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute import AksCompute, ComputeTarget

# When you create an AKS cluster, you can specify Internal Load Balancer to be created with provisioning_config object
provisioning_config = AksCompute.provisioning_configuration(load_balancer_type = 'InternalLoadBalancer')

# Create the cluster
aks_target = ComputeTarget.create(workspace = ws,
                                name = aks_name,
                                provisioning_configuration = provisioning_config)

# Wait for the create process to complete
aks_target.wait_for_completion(show_output = True)

Importante

Se il cluster del servizio Azure Kubernetes è configurato con un Load Balancer interno, l'uso di un certificato fornito da Microsoft non è supportato ed è necessario usare un certificato personalizzato per abilitare TLS.

Nota

Per altre informazioni su come proteggere l'ambiente di inferenza, vedere Proteggere un ambiente di inferenza di Azure Machine Learning

Scollegare un cluster del servizio Azure Kubernetes

Per scollegare un cluster dall'area di lavoro, usare uno dei metodi seguenti:

Avviso

L'uso di studio di Azure Machine Learning, SDK o l'estensione dell'interfaccia della riga di comando di Azure per machine learning per scollegare un cluster del servizio Azure Kubernetes non elimina il cluster del servizio Azure Kubernetes. Per eliminare il cluster, vedere Usare l'interfaccia della riga di comando di Azure con il servizio Azure Kubernetes.

SI APPLICA A:Python SDK azureml v1

aks_target.detach()

Risoluzione dei problemi

Aggiornare il cluster

Aggiornamenti ai componenti di Azure Machine Learning installati in un cluster servizio Azure Kubernetes devono essere applicati manualmente.

È possibile applicare questi aggiornamenti scollegando il cluster dall'area di lavoro di Azure Machine Learning e ricollegando il cluster all'area di lavoro.

SI APPLICA A:Azureml di Python SDK v1

compute_target = ComputeTarget(workspace=ws, name=clusterWorkspaceName)
compute_target.detach()
compute_target.wait_for_completion(show_output=True)

Prima di poter collegare nuovamente il cluster all'area di lavoro, è necessario prima eliminare tutte le azureml-fe risorse correlate. Se nel cluster non è presente alcun servizio attivo, è possibile eliminare le azureml-fe risorse correlate con il codice seguente.

kubectl delete sa azureml-fe
kubectl delete clusterrole azureml-fe-role
kubectl delete clusterrolebinding azureml-fe-binding
kubectl delete svc azureml-fe
kubectl delete svc azureml-fe-int-http
kubectl delete deploy azureml-fe
kubectl delete secret azuremlfessl
kubectl delete cm azuremlfeconfig

Se TLS è abilitato nel cluster, è necessario specificare il certificato TLS/SSL e la chiave privata durante la riassettazione del cluster.

SI APPLICA A:Azureml di Python SDK v1

attach_config = AksCompute.attach_configuration(resource_group=resourceGroup, cluster_name=kubernetesClusterName)

# If SSL is enabled.
attach_config.enable_ssl(
    ssl_cert_pem_file="cert.pem",
    ssl_key_pem_file="key.pem",
    ssl_cname=sslCname)

attach_config.validate_configuration()

compute_target = ComputeTarget.attach(workspace=ws, name=args.clusterWorkspaceName, attach_configuration=attach_config)
compute_target.wait_for_completion(show_output=True)

Se non si dispone più del certificato TLS/SSL e della chiave privata oppure si usa un certificato generato da Azure Machine Learning, è possibile recuperare i file prima di scollegare il cluster connettendosi al cluster usando kubectl e recuperando il segreto azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Nota

Kubernetes archivia i segreti nel formato con codifica Base64. È necessario decodificare i cert.pem componenti e key.pem di Base64 prima di fornire i segreti a attach_config.enable_ssl.

Errori del servizio Web

È possibile eseguire il debug di molti errori del servizio Web nel servizio Azure Kubernetes connettendosi al cluster usando kubectl. È possibile ottenere l'oggetto kubeconfig.json per un cluster del servizio Azure Kubernetes eseguendo

SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v1

az aks get-credentials -g <rg> -n <aks cluster name>

Dopo aver scollegato il cluster, se non è presente un servizio attivo nel cluster, eliminare le azureml-fe risorse correlate prima di collegarsi di nuovo:

kubectl delete sa azureml-fe
kubectl delete clusterrole azureml-fe-role
kubectl delete clusterrolebinding azureml-fe-binding
kubectl delete svc azureml-fe
kubectl delete svc azureml-fe-int-http
kubectl delete deploy azureml-fe
kubectl delete secret azuremlfessl
kubectl delete cm azuremlfeconfig

I servizi di bilanciamento del carico non devono avere indirizzi IP pubblici

Quando si tenta di creare o collegare un cluster del servizio Azure Kubernetes, potrebbe essere visualizzato un messaggio che la richiesta è stata negata perché "Load Balancers non deve avere indirizzi IP pubblici". Questo messaggio viene restituito quando un amministratore ha applicato un criterio che impedisce l'uso di un cluster del servizio Azure Kubernetes con un indirizzo IP pubblico.

Per risolvere questo problema, creare/collegare il cluster usando i load_balancer_type parametri e load_balancer_subnet . Per altre informazioni, vedere Load Balancer interna (IP privato).

Passaggi successivi