Funzionamento del routing con Azure Dev SpacesHow routing works with Azure Dev Spaces

Importante

Azure Dev Spaces sta per essere ritirato e smetterà di funzionare il 31 ottobre 2023.Azure Dev Spaces is being retired and will stop working on October 31, 2023. Valutare la migrazione a Bridge per Kubernetes.Consider migrating to Bridge to Kubernetes.

Azure Dev Spaces offre diversi modi per eseguire rapidamente l'iterazione e il debug di applicazioni Kubernetes e collaborare con il team in un cluster del servizio Azure Kubernetes.Azure Dev Spaces provides you with multiple ways to rapidly iterate and debug Kubernetes applications and collaborate with your team on an Azure Kubernetes Service (AKS) cluster. Quando il progetto viene eseguito in uno spazio di sviluppo, Azure Dev Spaces fornisce funzionalità di rete e di routing aggiuntive per il progetto.Once your project is running in a dev space, Azure Dev Spaces provides additional networking and routing capabilities for your project.

Questo articolo descrive il funzionamento del routing con gli spazi di sviluppo.This article describes how routing works with Dev Spaces.

Funzionamento del routingHow routing works

Uno spazio di sviluppo si basa su AKS e usa gli stessi concetti di rete.A dev space is built on top of AKS and uses the same networking concepts. Azure Dev Spaces dispone anche di un servizio ingressmanager centralizzato e distribuisce il proprio controller di ingresso nel cluster AKS.Azure Dev Spaces also has a centralized ingressmanager service and deploys its own Ingress Controller to the AKS cluster. Il servizio ingressmanager monitora i cluster AKS con spazi di sviluppo e aumenta il controller di ingresso Azure Dev Spaces nel cluster con gli oggetti in ingresso per il routing ai pod dell'applicazione.The ingressmanager service monitors AKS clusters with dev spaces and augments the Azure Dev Spaces Ingress Controller in the cluster with Ingress objects for routing to application pods. Il contenitore devspaces-proxy in ogni pod aggiunge un' azds-route-as intestazione HTTP per il traffico HTTP a uno spazio di sviluppo basato sull'URL.The devspaces-proxy container in each pod adds an azds-route-as HTTP header for HTTP traffic to a dev space based on the URL. Ad esempio, una richiesta all'URL http://azureuser.s.default.serviceA.fedcba09...azds.io otterrebbe un'intestazione HTTP con azds-route-as: azureuser .For example, a request to the URL http://azureuser.s.default.serviceA.fedcba09...azds.io would get an HTTP header with azds-route-as: azureuser. Il contenitore devspaces-proxy non aggiunge un' azds-route-as intestazione se ne è già presente una.The devspaces-proxy container will not add an azds-route-as header if one is already present.

Quando viene effettuata una richiesta HTTP a un servizio dall'esterno del cluster, la richiesta viene inviata al controller di ingresso.When an HTTP request is made to a service from outside the cluster, the request goes to the Ingress controller. Il controller di ingresso instrada la richiesta direttamente al Pod appropriato in base alle regole e agli oggetti in ingresso.The Ingress controller routes the request directly to the appropriate pod based on its Ingress objects and rules. Il contenitore devspaces-proxy nel pod riceve la richiesta, aggiunge l' azds-route-as intestazione in base all'URL, quindi instrada la richiesta al contenitore dell'applicazione.The devspaces-proxy container in the pod receives the request, adds the azds-route-as header based on the URL, and then routes the request to the application container.

Quando viene effettuata una richiesta HTTP a un servizio da un altro servizio all'interno del cluster, la richiesta passa prima di tutto al contenitore devspaces-proxy del servizio chiamante.When an HTTP request is made to a service from another service within the cluster, the request first goes through the calling service's devspaces-proxy container. Il contenitore devspaces-proxy esamina la richiesta HTTP e controlla l' azds-route-as intestazione.The devspaces-proxy container looks at the HTTP request and checks the azds-route-as header. In base all'intestazione, il contenitore del proxy di devspaces cercherà l'indirizzo IP del servizio associato al valore dell'intestazione.Based on the header, the devspaces-proxy container will look up the IP address of the service associated with the header value. Se viene trovato un indirizzo IP, il contenitore devspaces-Proxy reindirizza la richiesta a tale indirizzo IP.If an IP address is found, the devspaces-proxy container reroutes the request to that IP address. Se non viene trovato un indirizzo IP, il contenitore devspaces-proxy instrada la richiesta al contenitore dell'applicazione padre.If an IP address is not found, the devspaces-proxy container routes the request to the parent application container.

Ad esempio, le applicazioni servicea e serviceB vengono distribuite in uno spazio di sviluppo padre denominato default.For example, the applications serviceA and serviceB are deployed to a parent dev space called default. servicea si basa su serviceB ed effettua chiamate http.serviceA relies on serviceB and makes HTTP calls to it. L'utente di Azure crea uno spazio di sviluppo figlio basato sullo spazio predefinito denominato azureuser.Azure User creates a child dev space based on the default space called azureuser. L'utente di Azure distribuisce anche la propria versione di servicea nello spazio figlio.Azure User also deploys their own version of serviceA to their child space. Quando viene effettuata una richiesta a http://azureuser.s.default.serviceA.fedcba09...azds.io :When a request is made to http://azureuser.s.default.serviceA.fedcba09...azds.io:

Routing Azure Dev Spaces

  1. Il controller di ingresso cerca l'IP per il Pod associato all'URL, che è servicea. azureuser.The Ingress controller looks up the IP for the pod associated with the URL, which is serviceA.azureuser.
  2. Il controller di ingresso trova l'indirizzo IP per il Pod nello spazio di sviluppo dell'utente di Azure e instrada la richiesta al Pod servicea. azureuser .The Ingress controller finds the IP for the pod in Azure User's dev space and routes the request to the serviceA.azureuser pod.
  3. Il contenitore devspaces-proxy nel pod servicea. azureuser riceve la richiesta e aggiunge azds-route-as: azureuser come intestazione HTTP.The devspaces-proxy container in the serviceA.azureuser pod receives the request and adds azds-route-as: azureuser as an HTTP header.
  4. Il contenitore devspaces-proxy nel pod servicea. azureuser instrada la richiesta al contenitore dell'applicazione servicea nel pod servicea. azureuser .The devspaces-proxy container in the serviceA.azureuser pod routes the request to the serviceA application container in the serviceA.azureuser pod.
  5. L'applicazione servicea nel pod servicea. azureuser effettua una chiamata a serviceB.The serviceA application in the serviceA.azureuser pod makes a call to serviceB. L'applicazione servicea contiene anche il codice per mantenere l' azds-route-as intestazione esistente, che in questo caso è azds-route-as: azureuser .The serviceA application also contains code to preserve the existing azds-route-as header, which in this case is azds-route-as: azureuser.
  6. Il contenitore devspaces-proxy nel pod servicea. azureuser riceve la richiesta e cerca l'IP di serviceB in base al valore dell' azds-route-as intestazione.The devspaces-proxy container in the serviceA.azureuser pod receives the request and looks up the IP of serviceB based on the value of the azds-route-as header.
  7. Il contenitore devspaces-proxy nel pod servicea. azureuser non trova un IP per serviceB. azureuser.The devspaces-proxy container in the serviceA.azureuser pod does not find an IP for serviceB.azureuser.
  8. Il contenitore devspaces-proxy nel pod servicea. azureuser cerca l'IP per serviceB nello spazio padre, ovvero serviceB. default.The devspaces-proxy container in the serviceA.azureuser pod looks up the IP for serviceB in the parent space, which is serviceB.default.
  9. Il contenitore devspaces-proxy nel pod servicea. azureuser trova l'indirizzo IP per serviceB. default e instrada la richiesta al Pod serviceB. default .The devspaces-proxy container in the serviceA.azureuser pod finds the IP for serviceB.default and routes the request to the serviceB.default pod.
  10. Il contenitore devspaces-proxy nel pod serviceB. default riceve la richiesta e instrada la richiesta al contenitore dell'applicazione serviceb nel pod serviceB. default .The devspaces-proxy container in the serviceB.default pod receives the request and routes the request to the serviceB application container in the serviceB.default pod.
  11. L'applicazione serviceB nel pod serviceB. default restituisce una risposta al Pod servicea. azureuser .The serviceB application in the serviceB.default pod returns a response to the serviceA.azureuser pod.
  12. Il contenitore devspaces-proxy nel pod servicea. azureuser riceve la risposta e instrada la risposta al contenitore dell'applicazione servicea nel pod servicea. azureuser .The devspaces-proxy container in the serviceA.azureuser pod receives the response and routes the response to the serviceA application container in the serviceA.azureuser pod.
  13. L'applicazione servicea riceve la risposta e quindi restituisce la propria risposta.The serviceA application receives the response and then returns its own response.
  14. Il contenitore devspaces-proxy nel pod servicea. azureuser riceve la risposta dal contenitore dell'applicazione servicea e instrada la risposta al chiamante originale all'esterno del cluster.The devspaces-proxy container in the serviceA.azureuser pod receives the response from the serviceA application container and routes the response to the original caller outside of the cluster.

Tutto il resto del traffico TCP che non è HTTP passa attraverso il controller di ingresso e i contenitori devspaces-proxy non modificati.All other TCP traffic that is not HTTP passes through the Ingress controller and devspaces-proxy containers unmodified.

Condivisione di uno spazio di sviluppoSharing a dev space

Quando si lavora con un team, è possibile condividere uno spazio di sviluppo in un intero team e creare spazi di sviluppo derivati.When working with a team, you can share a dev space across an entire team and create derived dev spaces. Uno spazio di sviluppo può essere usato da chiunque disponga dell'accesso come collaboratore al gruppo di risorse dello spazio di sviluppo.A dev space can be used by anyone with contributor access to the dev space's resource group.

È anche possibile creare un nuovo spazio di sviluppo derivato da un altro spazio di sviluppo.You can also create a new dev space that is derived from another dev space. Quando si crea uno spazio di sviluppo derivato, l'etichetta azds.io/Parent-Space=Parent-Space-Name viene aggiunta allo spazio dei nomi dello spazio di sviluppo derivato.When you create a derived dev space, the azds.io/parent-space=PARENT-SPACE-NAME label is added to the derived dev space's namespace. Inoltre, tutte le applicazioni dallo spazio di sviluppo padre vengono condivise con lo spazio di sviluppo derivato.Also, all applications from the parent dev space are shared with the derived dev space. Se si distribuisce una versione aggiornata di un'applicazione nello spazio di sviluppo derivato, questa sarà presente solo nello spazio di sviluppo derivato e lo spazio dev padre rimarrà inalterato.If you deploy an updated version of an application to the derived dev space, it will only exist in the derived dev space and the parent dev space will remain unaffected. È possibile disporre di un massimo di tre livelli di spazi di sviluppo o di spazi padre derivati.You can have a maximum of three levels of derived dev spaces or grandparent spaces.

Lo spazio di sviluppo derivato effettuerà anche il routing intelligente delle richieste tra le proprie applicazioni e le applicazioni condivise dal relativo elemento padre.The derived dev space will also intelligently route requests between its own applications and the applications shared from its parent. Il routing funziona tentando di indirizzare la richiesta a un'applicazione nello spazio di sviluppo derivato e di eseguire il fallback all'applicazione condivisa dallo spazio di sviluppo padre.The routing works by attempting to route request to an application in the derived dev space and falling back to the shared application from the parent dev space. Se l'applicazione non si trova nello spazio padre, il routing verrà eseguito nuovamente nell'applicazione condivisa nell'area del padre.The routing will fall back to the shared application in the grandparent space if the application is not in the parent space.

Ad esempio:For example:

  • Il valore predefinito dello spazio di sviluppo include le applicazioni servicea e serviceB.The dev space default has applications serviceA and serviceB.
  • Il valore predefinito è derivato dallo spazio di sviluppo azureuser .The dev space azureuser is derived from default.
  • Una versione aggiornata di servicea viene distribuita a azureuser.An updated version of serviceA is deployed to azureuser.

Quando si usa azureuser, tutte le richieste a servicea verranno indirizzate alla versione aggiornata in azureuser.When using azureuser, all requests to serviceA will be routed to the updated version in azureuser. Una richiesta a serviceB tenterà prima di essere indirizzata alla versione azureuser di serviceB.A request to serviceB will first try to be routed to the azureuser version of serviceB. Poiché non esiste, verrà instradato alla versione predefinita di serviceB.Since it does not exist, it will be routed to the default version of serviceB. Se viene rimossa la versione azureuser di servicea , tutte le richieste a servicea eseguiranno il fallback utilizzando la versione predefinita di servicea.If the azureuser version of serviceA is removed, all requests to serviceA will fall back to using the default version of serviceA.

Passaggi successiviNext steps

Per un esempio di come Azure Dev Spaces usa il routing per fornire iterazioni e sviluppo rapidi, vedere come funziona il debug remoto del codice con Azure Dev Spaces.To see an example of how Azure Dev Spaces uses routing to provide rapid iteration and development, see How remote debugging your code with Azure Dev Spaces works.