Concetti relativi alla rete per le applicazioni nel servizio Azure KubernetesNetwork concepts for applications in Azure Kubernetes Service (AKS)

In un approccio allo sviluppo delle applicazioni come microservizi basati su contenitori, i componenti dell'applicazione devono interagire per elaborare le proprie attività.In a container-based microservices approach to application development, application components must work together to process their tasks. Kubernetes offre diverse risorse che consentono queste comunicazioni tra le applicazioni.Kubernetes provides various resources that enable this application communication. È possibile connettersi alle applicazioni ed esporle internamente o esternamente.You can connect to and expose applications internally or externally. Per sviluppare applicazioni a disponibilità elevata, è possibile bilanciare il carico delle applicazioni.To build highly available applications, you can load balance your applications. Le applicazioni più complesse possono richiedere la configurazione del traffico in ingresso per la terminazione SSL/TLS o il routing di più componenti.More complex applications may require configuration of ingress traffic for SSL/TLS termination or routing of multiple components. Per motivi di sicurezza, potrebbe anche essere necessario limitare il flusso del traffico di rete all'interno o tra i pod e i nodi.For security reasons, you may also need to restrict the flow of network traffic into or between pods and nodes.

Questo articolo introduce i concetti di base correlati alle funzionalità di rete per le applicazioni nel servizio Azure Kubernetes:This article introduces the core concepts that provide networking to your applications in AKS:

Nozioni di base di KubernetesKubernetes basics

Per consentire l'accesso alle applicazioni o per consentire ai componenti dell'applicazione di comunicare tra loro, Kubernetes offre un livello di astrazione per funzionalità di rete virtuale.To allow access to your applications, or for application components to communicate with each other, Kubernetes provides an abstraction layer to virtual networking. I nodi Kubernetes vengono connessi a una rete virtuale e possono fornire la connettività in ingresso e in uscita per i pod.Kubernetes nodes are connected to a virtual network, and can provide inbound and outbound connectivity for pods. Il componente kube-proxy viene eseguito in ogni nodo per fornire queste funzionalità di rete.The kube-proxy component runs on each node to provide these network features.

In Kubernetes, i servizi raggruppano i pod dal punto di vista logico per consentire l'accesso diretto tramite un indirizzo IP o nome DNS e su una porta specifica.In Kubernetes, Services logically group pods to allow for direct access via an IP address or DNS name and on a specific port. È anche possibile distribuire il traffico usando un bilanciamento del carico.You can also distribute traffic using a load balancer. Si può anche ottenere un routing più complesso del traffico dell'applicazione con i controller di ingresso.More complex routing of application traffic can also be achieved with Ingress Controllers. La sicurezza e il filtraggio del traffico di rete per i pod sono possibili con i criteri di rete di Kubernetes.Security and filtering of the network traffic for pods is possible with Kubernetes network policies.

Anche la piattaforma Azure contribuisce a semplificare le funzionalità di rete virtuale per i cluster servizio Azure Kubernetes.The Azure platform also helps to simplify virtual networking for AKS clusters. Quando si crea un bilanciamento del carico di Kubernetes, viene creata e configurata la risorsa di bilanciamento del carico di Azure sottostante.When you create a Kubernetes load balancer, the underlying Azure load balancer resource is created and configured. Quando si aprono le porte di rete per i pod, vengono configurate le regole del gruppo di sicurezza di rete di Azure corrispondente.As you open network ports to pods, the corresponding Azure network security group rules are configured. Per il routing delle applicazioni HTTP, Azure può anche configurare il DNS esterno quando vengono configurate nuove route in ingresso.For HTTP application routing, Azure can also configure external DNS as new ingress routes are configured.

ServiziServices

Per semplificare la configurazione di rete per i carichi di lavoro dell'applicazione, Kubernetes usa servizi per raggruppare un set di pod in modo logico e fornire la connettività di rete.To simplify the network configuration for application workloads, Kubernetes uses Services to logically group a set of pods together and provide network connectivity. Sono disponibili i tipi di servizio seguenti:The following Service types are available:

  • IP del cluster - Crea un indirizzo IP interno per l'uso all'interno del cluster del servizio Azure Kubernetes.Cluster IP - Creates an internal IP address for use within the AKS cluster. Soluzione idonea per le applicazioni solo interne che supportano altri carichi di lavoro all'interno del cluster.Good for internal-only applications that support other workloads within the cluster.

    Diagramma che mostra il flusso del traffico IP del cluster in un cluster servizio Azure Kubernetes

  • NodePort - Crea un mapping delle porte nel nodo sottostante che consente l'accesso diretto all'applicazione con l'indirizzo IP e la porta del nodo.NodePort - Creates a port mapping on the underlying node that allows the application to be accessed directly with the node IP address and port.

    Diagramma che mostra il flusso del traffico NodePort in un cluster servizio Azure Kubernetes

  • LoadBalancer - Crea una risorsa di bilanciamento del carico di Azure, configura un indirizzo IP esterno e connette i pod richiesti al pool back-end del bilanciamento del carico.LoadBalancer - Creates an Azure load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool. Per consentire al traffico dei clienti di raggiungere l'applicazione, vengono create regole di bilanciamento del carico per le porte desiderate.To allow customers traffic to reach the application, load balancing rules are created on the desired ports.

    Diagramma che illustra il flusso del traffico di bilanciamento del carico in un cluster servizio Azure Kubernetes

    Per un maggiore controllo e il routing del traffico in ingresso, è invece possibile usare un controller di ingresso.For additional control and routing of the inbound traffic, you may instead use an Ingress controller.

  • ExternalName - Crea una voce DNS specifica per semplificare l'accesso dell'applicazione.ExternalName - Creates a specific DNS entry for easier application access.

L'indirizzo IP per i bilanciamenti del carico e i servizi può essere assegnato in modo dinamico oppure è possibile specificare un indirizzo IP statico esistente da usare.The IP address for load balancers and services can be dynamically assigned, or you can specify an existing static IP address to use. Si possono assegnare sia indirizzi IP statici interni che esterni.Both internal and external static IP addresses can be assigned. Questo indirizzo IP statico esistente è spesso associato a una voce DNS.This existing static IP address is often tied to a DNS entry.

Si possono creare sia bilanciamenti del carico interni che esterni.Both internal and external load balancers can be created. Al servizio di bilanciamento del carico interno viene assegnato solo un indirizzo IP privato, pertanto non è possibile accedervi da Internet.Internal load balancers are only assigned a private IP address, so they can't be accessed from the Internet.

Reti virtuali di AzureAzure virtual networks

Nel servizio Azure Kubernetes è possibile distribuire un cluster che usa uno dei due modelli di rete seguenti:In AKS, you can deploy a cluster that uses one of the following two network models:

  • Funzionalità di rete kubenet: le risorse di rete vengono in genere create e configurate quando viene distribuito il cluster del servizio Azure Kubernetes.Kubenet networking - The network resources are typically created and configured as the AKS cluster is deployed.
  • Funzionalità di rete Azure Container Networking Interface (Azure CNI) : il cluster del servizio Azure Kubernetes viene connesso alle configurazioni e alle risorse di rete virtuale esistenti.Azure Container Networking Interface (CNI) networking - The AKS cluster is connected to existing virtual network resources and configurations.

Funzionalità di rete kubenet (di base)Kubenet (basic) networking

L'opzione per le funzionalità di rete kubenet è la configurazione predefinita per la creazione del cluster del servizio Azure Kubernetes.The kubenet networking option is the default configuration for AKS cluster creation. Con kubenet i nodi ottengono un indirizzo IP dalla subnet della rete virtuale di Azure.With kubenet, nodes get an IP address from the Azure virtual network subnet. I pod ricevono un indirizzo IP da uno spazio di indirizzi diverso dal punto di vista logico nella subnet della rete virtuale di Azure dei nodi.Pods receive an IP address from a logically different address space to the Azure virtual network subnet of the nodes. La funzionalità Network Address Translation (NAT) viene quindi configurata in modo che i pod possano raggiungere le risorse nella rete virtuale di Azure.Network address translation (NAT) is then configured so that the pods can reach resources on the Azure virtual network. L'indirizzo IP di origine del traffico viene convertito tramite NAT nell'indirizzo IP primario del nodo.The source IP address of the traffic is NAT'd to the node's primary IP address.

I nodi usano il plug-in kubenet Kubernetes.Nodes use the kubenet Kubernetes plugin. La piattaforma Azure può creare e configurare le reti virtuali automaticamente. In alternativa, è possibile distribuire il cluster del servizio Azure Kubernetes nella subnet di una rete virtuale esistente.You can let the Azure platform create and configure the virtual networks for you, or choose to deploy your AKS cluster into an existing virtual network subnet. Anche in questo caso, solo i nodi ricevono un indirizzo IP instradabile e i pod usano NAT per comunicare con altre risorse all'esterno del cluster AKS.Again, only the nodes receive a routable IP address, and the pods use NAT to communicate with other resources outside the AKS cluster. Questo approccio riduce notevolmente il numero di indirizzi IP che è necessario riservare ai pod nello spazio di indirizzi della rete.This approach greatly reduces the number of IP addresses that you need to reserve in your network space for pods to use.

Per altre informazioni, vedere configurare la rete kubenet per un cluster AKS.For more information, see Configure kubenet networking for an AKS cluster.

Funzionalità di rete Azure CNI (avanzata)Azure CNI (advanced) networking

Con Azure CNI ogni pod ottiene un indirizzo IP dalla subnet in modo che vi si possa accedere direttamente.With Azure CNI, every pod gets an IP address from the subnet and can be accessed directly. Questi indirizzi IP devono essere univoci nello spazio di indirizzi della rete e devono essere pianificati in anticipo.These IP addresses must be unique across your network space, and must be planned in advance. Ogni nodo ha un parametro di configurazione per il numero massimo di pod che supporta.Each node has a configuration parameter for the maximum number of pods that it supports. Il numero equivalente di indirizzi IP per nodo viene quindi riservato anticipatamente per tale nodo.The equivalent number of IP addresses per node are then reserved up front for that node. Questo approccio richiede una pianificazione più approfondita, in quanto può compromettere l'esaurimento degli indirizzi IP o la necessità di ricompilare i cluster in una subnet più ampia in caso di aumento delle richieste dell'applicazione.This approach requires more planning, as can otherwise lead to IP address exhaustion or the need to rebuild clusters in a larger subnet as your application demands grow.

I nodi usano il plug-in Kubernetes (CNI) di Azure container Network Interface .Nodes use the Azure Container Networking Interface (CNI) Kubernetes plugin.

Diagramma che illustra due nodi ognuno dei quali è connesso da bridge a una singola rete virtuale di Azure

Per altre informazioni, vedere configurare Azure CNI per un cluster AKS.For more information, see Configure Azure CNI for an AKS cluster.

Confrontare i modelli di reteCompare network models

Sia kubenet che Azure CNI forniscono la connettività di rete per i cluster AKS.Both kubenet and Azure CNI provide network connectivity for your AKS clusters. Esistono tuttavia vantaggi e svantaggi.However, there are advantages and disadvantages to each. A un livello elevato, si applicano le considerazioni seguenti:At a high level, the following considerations apply:

  • kubenetkubenet
    • Conserva lo spazio degli indirizzi IP.Conserves IP address space.
    • Usa il servizio di bilanciamento del carico interno o esterno di Kubernetes per raggiungere i pod dall'esterno del cluster.Uses Kubernetes internal or external load balancer to reach pods from outside of the cluster.
    • È necessario gestire e gestire manualmente le route definite dall'utente (UDR).You must manually manage and maintain user-defined routes (UDRs).
    • Massimo 400 nodi per cluster.Maximum of 400 nodes per cluster.
  • Azure CNIAzure CNI
    • I pod ottengono la connettività di rete virtuale completa e possono essere raggiunti direttamente dall'esterno del cluster.Pods get full virtual network connectivity and can be directly reached from outside of the cluster.
    • Richiede più spazio di indirizzi IP.Requires more IP address space.

Tra kubenet e Azure CNI sono presenti le differenze di comportamento seguenti:The following behavior differences exist between kubenet and Azure CNI:

CapacitàCapability KubenetKubenet Azure CNIAzure CNI
Distribuire il cluster in una rete virtuale nuova o esistenteDeploy cluster in existing or new virtual network Supportato-UdR applicato manualmenteSupported - UDRs manually applied SupportatoSupported
Connettività Pod-PodPod-pod connectivity SupportatoSupported SupportatoSupported
Connettività Pod-VM; VM nella stessa rete virtualePod-VM connectivity; VM in the same virtual network Funziona quando avviato da PodWorks when initiated by pod Funziona in entrambi i modiWorks both ways
Connettività Pod-VM; VM in una rete virtuale con peeringPod-VM connectivity; VM in peered virtual network Funziona quando avviato da PodWorks when initiated by pod Funziona in entrambi i modiWorks both ways
Accesso locale tramite VPN o Express RouteOn-premises access using VPN or Express Route Funziona quando avviato da PodWorks when initiated by pod Funziona in entrambi i modiWorks both ways
Accesso alle risorse protette dagli endpoint del servizioAccess to resources secured by service endpoints SupportatoSupported SupportatoSupported
Esporre i servizi Kubernetes usando un servizio di bilanciamento del carico, un gateway app o un controller di ingressoExpose Kubernetes services using a load balancer service, App Gateway, or ingress controller SupportatoSupported SupportatoSupported
DNS di Azure e zone private predefiniteDefault Azure DNS and Private Zones SupportatoSupported SupportatoSupported

Ambito di supporto tra i modelli di reteSupport scope between network models

Indipendentemente dal modello di rete usato, sia kubenet che Azure CNI possono essere distribuiti in uno dei modi seguenti:Regardless of the network model you use, both kubenet and Azure CNI can be deployed in one of the following ways:

  • La piattaforma Azure può creare e configurare automaticamente le risorse della rete virtuale quando si crea un cluster AKS.The Azure platform can automatically create and configure the virtual network resources when you create an AKS cluster.
  • Quando si crea il cluster AKS, è possibile creare e configurare manualmente le risorse della rete virtuale e connetterle a tali risorse.You can manually create and configure the virtual network resources and attach to those resources when you create your AKS cluster.

Sebbene le funzionalità come gli endpoint di servizio o UdR siano supportate sia con kubenet che con Azure CNI, i criteri di supporto per AKS definiscono le modifiche che è possibile apportare.Although capabilities like service endpoints or UDRs are supported with both kubenet and Azure CNI, the support policies for AKS define what changes you can make. Esempio:For example:

  • Se si creano manualmente le risorse della rete virtuale per un cluster AKS, si è supportati quando si configurano gli endpoint di servizio o UdR personalizzati.If you manually create the virtual network resources for an AKS cluster, you are supported when configuring your own UDRs or service endpoints.
  • Se la piattaforma Azure crea automaticamente le risorse di rete virtuale per il cluster del servizio contenitore di Azure, non è supportata la modifica manuale delle risorse gestite da AKS per configurare UdR o endpoint di servizio personalizzati.If the Azure platform automatically creates the virtual network resources for your AKS cluster, it is not supported to manually change those AKS-managed resources to configure your own UDRs or service endpoints.

Controller di ingressoIngress controllers

Quando si crea un servizio di tipo LoadBalancer, viene creata una risorsa di bilanciamento del carico di Azure sottostante.When you create a LoadBalancer type Service, an underlying Azure load balancer resource is created. Il bilanciamento del carico viene configurato per distribuire il traffico verso i pod nel servizio su una porta specifica.The load balancer is configured to distribute traffic to the pods in your Service on a given port. Il servizio di tipo LoadBalancer opera solo sul livello 4: non è a conoscenza delle applicazioni effettive e non può gestire ulteriori considerazioni sul routing.The LoadBalancer only works at layer 4 - the Service is unaware of the actual applications, and can't make any additional routing considerations.

I controller di ingresso operano sul livello 7 e possono usare regole più intelligenti per distribuire il traffico delle applicazioni.Ingress controllers work at layer 7, and can use more intelligent rules to distribute application traffic. Un uso comune di un controller di ingresso è l'indirizzamento del traffico HTTP verso applicazioni diverse in base all'URL in ingresso.A common use of an Ingress controller is to route HTTP traffic to different applications based on the inbound URL.

Diagramma che mostra il flusso del traffico in ingresso in un cluster del servizio Azure Kubernetes

Nel servizio Azure Kubernetes è possibile creare una risorsa di ingresso usando uno strumento come NGINX o la funzionalità di routing delle applicazioni HTTP del servizio Azure Kubernetes.In AKS, you can create an Ingress resource using something like NGINX, or use the AKS HTTP application routing feature. Quando si abilita il routing delle applicazioni HTTP per un cluster servizio Azure Kubernetes, la piattaforma Azure crea il controller di ingresso e un controller DNS esterno.When you enable HTTP application routing for an AKS cluster, the Azure platform creates the Ingress controller and an External-DNS controller. Quando vengono create le risorse di ingresso in Kubernetes, i record A DNS necessari vengono creati in una zona DNS specifica del cluster.As new Ingress resources are created in Kubernetes, the required DNS A records are created in a cluster-specific DNS zone. Per altre informazioni, vedere deploy http Application routing.For more information, see deploy HTTP application routing.

Un'altra funzionalità comune per il traffico in ingresso è la terminazione SSL/TLS.Another common feature of Ingress is SSL/TLS termination. In applicazioni Web di grandi dimensioni a cui si accede tramite HTTPS, la terminazione TLS può essere gestita dalla risorsa di ingresso invece che all'interno dell'applicazione stessa.On large web applications accessed via HTTPS, the TLS termination can be handled by the Ingress resource rather than within the application itself. Per garantire la generazione e la configurazione automatiche della certificazione TLS, è possibile configurare la risorsa di ingresso per l'uso di provider, ad esempio Let's Encrypt.To provide automatic TLS certification generation and configuration, you can configure the Ingress resource to use providers such as Let's Encrypt. Per altre informazioni sulla configurazione di un controller di ingresso NGINX con la crittografia, vedere ingresso e TLS.For more information on configuring an NGINX Ingress controller with Let's Encrypt, see Ingress and TLS.

È anche possibile configurare il controller di ingresso per mantenere l'IP di origine del client nelle richieste ai contenitori nel cluster AKS.You can also configure your ingress controller to preserve the client source IP on requests to containers in your AKS cluster. Quando la richiesta di un client viene indirizzata a un contenitore nel cluster AKS tramite il controller di ingresso, l'indirizzo IP di origine della richiesta non sarà disponibile per il contenitore di destinazione.When a client's request is routed to a container in your AKS cluster via your ingress controller, the original source ip of that request will not be available to the target container. Quando si Abilita la conservazione dell'indirizzo IP di origine client, l'indirizzo IP di origine per il client è disponibile nell'intestazione della richiesta in X-inoltred-for.When you enable client source IP preservation, the source IP for the client is available in the request header under X-Forwarded-For. Se si usa la conservazione dell'indirizzo IP di origine client sul controller di ingresso, non è possibile usare il pass-through SSL.If you are using client source IP preservation on your ingress controller, you cannot use SSL pass-through. La conservazione IP di origine client e il pass-through SSL possono essere usati con altri servizi, ad esempio il tipo LoadBalancer .Client source IP preservation and SSL pass-through can be used with other services, such as the LoadBalancer type.

Gruppi di sicurezza di reteNetwork security groups

Un gruppo di sicurezza di rete filtra il traffico per le macchine virtuali, ad esempio i nodi del servizio Azure Kubernetes.A network security group filters traffic for VMs, such as the AKS nodes. Quando si creano servizi, ad esempio LoadBalancer, la piattaforma Azure configura automaticamente le eventuali regole dei gruppi di sicurezza di rete necessarie.As you create Services, such as a LoadBalancer, the Azure platform automatically configures any network security group rules that are needed. Non configurare manualmente le regole dei gruppi di sicurezza di rete per filtrare il traffico per i pod in un cluster servizio Azure Kubernetes.Don't manually configure network security group rules to filter traffic for pods in an AKS cluster. Definire le eventuali porte necessarie e l'inoltro come parte dei manifesti del servizio Kubernetes e delegare alla piattaforma Azure la creazione o l'aggiornamento delle regole appropriate.Define any required ports and forwarding as part of your Kubernetes Service manifests, and let the Azure platform create or update the appropriate rules. È anche possibile usare i criteri di rete, come illustrato nella sezione successiva, per applicare automaticamente le regole di filtro del traffico ai pod.You can also use network policies, as discussed in the next section, to automatically apply traffic filter rules to pods.

Criteri di reteNetwork policies

Per impostazione predefinita, tutti i pod in un cluster del servizio Azure Kubernetes possono inviare e ricevere traffico senza limitazioni.By default, all pods in an AKS cluster can send and receive traffic without limitations. Per garantire maggiore sicurezza, è possibile definire regole per il controllo del flusso del traffico.For improved security, you may want to define rules that control the flow of traffic. Le applicazioni back-end vengono spesso esposte solo ai servizi front-end richiesti oppure i componenti di database sono accessibili solo ai livelli applicazione che si connettono a essi.Backend applications are often only exposed to required frontend services, or database components are only accessible to the application tiers that connect to them.

Criteri di rete è una funzionalità di Kubernetes disponibile in AKS che consente di controllare il flusso del traffico tra i pod.Network policy is a Kubernetes feature available in AKS that lets you control the traffic flow between pods. È possibile scegliere di consentire o non consentire il traffico in base a impostazioni come la porta del traffico, lo spazio dei nomi o le etichette assegnate.You can choose to allow or deny traffic based on settings such as assigned labels, namespace, or traffic port. I gruppi di sicurezza di rete sono più adatti per i nodi del servizio Azure Kubernetes piuttosto che per i pod.Network security groups are more for the AKS nodes, not pods. L'uso di criteri di rete è un metodo nativo del cloud più appropriato per controllare il flusso del traffico.The use of network policies is a more suitable, cloud-native way to control the flow of traffic. Poiché i pod vengono creati dinamicamente in un cluster del servizio Azure Kubernetes, i criteri di rete necessari possono essere applicati automaticamente.As pods are dynamically created in an AKS cluster, the required network policies can be automatically applied.

Per altre informazioni, vedere proteggere il traffico tra i pod usando i criteri di rete in Azure Kubernetes Service (AKS).For more information, see Secure traffic between pods using network policies in Azure Kubernetes Service (AKS).

Passaggi successiviNext steps

Per iniziare a usare la rete AKS, creare e configurare un cluster del servizio contenitore di Azure con gli intervalli di indirizzi IP usando kubenet o Azure CNI.To get started with AKS networking, create and configure an AKS cluster with your own IP address ranges using kubenet or Azure CNI.

Per le procedure consigliate associate, vedere procedure consigliate per la connettività di rete e la sicurezza in AKS.For associated best practices, see Best practices for network connectivity and security in AKS.

Per altre informazioni sui concetti fondamentali relativi a Kubernetes e al servizio Azure Kubernetes, vedere gli articoli seguenti:For additional information on core Kubernetes and AKS concepts, see the following articles: