Concepts de réseau pour les applications dans AKS (Azure Kubernetes Service)Network concepts for applications in Azure Kubernetes Service (AKS)

Dans une approche du développement d’applications axée sur les microservices basés sur un conteneur, les composants d’application doivent collaborer pour traiter leurs tâches.In a container-based microservices approach to application development, application components must work together to process their tasks. Kubernetes fournit diverses ressources qui permettent cette communication entre les applications.Kubernetes provides various resources that enable this application communication. Vous pouvez vous connecter aux applications et les exposer en interne ou en externe.You can connect to and expose applications internally or externally. Pour créer des applications hautement disponibles, vous pouvez équilibrer leurs charges.To build highly available applications, you can load balance your applications. Les applications plus complexes peuvent nécessiter la configuration du trafic d’entrée pour l’arrêt ou le routage SSL/TLS de plusieurs composants.More complex applications may require configuration of ingress traffic for SSL/TLS termination or routing of multiple components. Pour des raisons de sécurité, vous pouvez également être amené à limiter le flux du trafic réseau vers ou entre les nœuds et les pods.For security reasons, you may also need to restrict the flow of network traffic into or between pods and nodes.

Cet article présente les concepts fondamentaux qui fournissent la mise en réseau à vos applications dans AKS :This article introduces the core concepts that provide networking to your applications in AKS:

Concepts de base KubernetesKubernetes basics

Pour autoriser l’accès à vos applications ou pour que les composants d’application communiquent entre eux, Kubernetes fournit une couche d’abstraction à la mise en réseau virtuelle.To allow access to your applications, or for application components to communicate with each other, Kubernetes provides an abstraction layer to virtual networking. Les nœuds Kubernetes sont connectés à un réseau virtuel et peuvent fournir la connectivité entrante et sortante pour les pods.Kubernetes nodes are connected to a virtual network, and can provide inbound and outbound connectivity for pods. Le composant kube-proxy s’exécute sur chaque nœud afin de fournir ces fonctionnalités de réseau.The kube-proxy component runs on each node to provide these network features.

Dans Kubernetes, les services regroupent logiquement les pods pour permettre un accès direct via une adresse IP ou un nom DNS et sur un port spécifique.In Kubernetes, Services logically group pods to allow for direct access via an IP address or DNS name and on a specific port. Vous pouvez également distribuer le trafic à l’aide d’un équilibreur de charge.You can also distribute traffic using a load balancer. En outre, vous pouvez affiner le routage du trafic des applications avec des contrôleurs d’entrée.More complex routing of application traffic can also be achieved with Ingress Controllers. Sécurité et le filtrage du trafic réseau pour des pods est possible avec Kubernetes stratégies réseau (en version préliminaire dans ACS).Security and filtering of the network traffic for pods is possible with Kubernetes network policies (in preview in AKS).

La plateforme Azure permet également de simplifier la mise en réseau virtuelle pour les clusters AKS.The Azure platform also helps to simplify virtual networking for AKS clusters. Quand vous créez un équilibreur de charge Kubernetes, la ressource d’équilibreur de charge Azure sous-jacente est créée et configurée.When you create a Kubernetes load balancer, the underlying Azure load balancer resource is created and configured. Quand vous ouvrez des ports réseau sur les pods, les règles de groupe de sécurité réseau Azure correspondantes sont configurées.As you open network ports to pods, the corresponding Azure network security group rules are configured. Pour le routage d’application HTTP, Azure peut également configurer un DNS externe quand de nouvelles routes d’entrée sont configurées.For HTTP application routing, Azure can also configure external DNS as new ingress routes are configured.

ServicesServices

Pour simplifier la configuration du réseau pour les charges de travail d’applications, Kubernetes utilise des services pour regrouper logiquement un ensemble de pods et fournir une connectivité réseau.To simplify the network configuration for application workloads, Kubernetes uses Services to logically group a set of pods together and provide network connectivity. Les types de service suivants sont disponibles :The following Service types are available:

  • ClusterIP : crée une adresse IP interne pour une utilisation au sein du cluster AKS.Cluster IP - Creates an internal IP address for use within the AKS cluster. Convient pour les applications internes uniquement qui prennent en charge d’autres charges de travail au sein du cluster.Good for internal-only applications that support other workloads within the cluster.

    Diagramme montrant le flux de trafic ClusterIP dans un cluster AKS

  • NodePort : crée un mappage de port sur le nœud sous-jacent qui rend l’application accessible directement avec l’adresse IP du nœud et le port.NodePort - Creates a port mapping on the underlying node that allows the application to be accessed directly with the node IP address and port.

    Diagramme montrant le flux de trafic NodePort dans un cluster AKS

  • LoadBalancer : crée une ressource d’équilibreur de charge Azure, configure une adresse IP externe et connecte les pods demandés au pool back-end d’équilibreurs de charge.LoadBalancer - Creates an Azure load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool. Pour que le trafic des clients puisse atteindre l’application, des règles d’équilibrage de charge sont créées sur les ports de votre choix.To allow customers traffic to reach the application, load balancing rules are created on the desired ports.

    Diagramme montrant le flux de trafic LoadBalancer dans un cluster AKS

    Pour renforcer le contrôle et le routage du trafic entrant, vous pouvez plutôt utiliser un contrôleur d’entrée.For additional control and routing of the inbound traffic, you may instead use an Ingress controller.

  • ExternalName : crée une entrée DNS spécifique pour faciliter l’accès aux applications.ExternalName - Creates a specific DNS entry for easier application access.

L’adresse IP pour les services et les équilibreurs de charge peut être affectée dynamiquement, ou vous pouvez spécifier une adresse IP statique existante à utiliser.The IP address for load balancers and services can be dynamically assigned, or you can specify an existing static IP address to use. Des adresses IP statiques internes et externes peuvent être affectées.Both internal and external static IP addresses can be assigned. Cette adresse IP statique existante est souvent liée à une entrée DNS.This existing static IP address is often tied to a DNS entry.

Des équilibreurs de charge internes et externes peuvent être créés.Both internal and external load balancers can be created. Les équilibreurs de charge internes ne recevant qu’une adresse IP privée, ils ne sont pas accessibles à partir d’Internet.Internal load balancers are only assigned a private IP address, so can't be accessed from the Internet.

Réseaux virtuels AzureAzure virtual networks

Dans AKS, vous pouvez déployer un cluster qui utilise un des deux modèles de réseau suivants :In AKS, you can deploy a cluster that uses one of the following two network models:

  • Mise en réseau Kubenet : les ressources réseau sont généralement créées et configurées quand le cluster AKS est déployé.Kubenet networking - The network resources are typically created and configured as the AKS cluster is deployed.
  • Mise en réseau Azure CNI (Container Networking Interface)  : le cluster AKS est connecté à des configurations et ressources de réseau virtuel existantes.Azure Container Networking Interface (CNI) networking - The AKS cluster is connected to existing virtual network resources and configurations.

Mise en réseau Kubenet (de base)Kubenet (basic) networking

L’option de mise en réseau kubenet est la configuration par défaut de la création de cluster AKS.The kubenet networking option is the default configuration for AKS cluster creation. Avec kubenet, les nœuds obtiennent une adresse IP du sous-réseau du réseau virtuel Azure.With kubenet, nodes get an IP address from the Azure virtual network subnet. Les pods reçoivent une adresse IP du sous-réseau de réseau virtuel Azure des nœuds à partir d’un espace d’adressage logiquement différent.Pods receive an IP address from a logically different address space to the Azure virtual network subnet of the nodes. La traduction d’adresses réseau (NAT) est ensuite configurée afin que les pods puissent accéder aux ressources sur le réseau virtuel Azure.Network address translation (NAT) is then configured so that the pods can reach resources on the Azure virtual network. L’adresse IP source du trafic fait l’objet d’une opération NAT sur l’adresse IP principale du nœud.The source IP address of the traffic is NAT'd to the node's primary IP address.

Les nœuds utilisent le plug-in Kubernetes kubenet.Nodes use the kubenet Kubernetes plugin. Vous pouvez laisser la plateforme Azure créer et configurer les réseaux virtuels pour vous ou choisir de déployer votre cluster AKS dans un sous-réseau de réseau virtuel existant.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. Là encore, seuls les nœuds recevoir une adresse IP routable et les pods utilisent NAT pour communiquer avec d’autres ressources à l’extérieur du 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. Cette approche réduit considérablement le nombre d’adresses IP que vous devez réserver dans votre espace réseau pour que les pods les utilisent.This approach greatly reduces the number of IP addresses that you need to reserve in your network space for pods to use.

Pour plus d’informations, consultez Configurer une mise en réseau kubenet pour un cluster AKS.For more information, see Configure kubenet networking for an AKS cluster.

Mise en réseau Azure CNI (avancée)Azure CNI (advanced) networking

Avec Azure CNI, chaque pod reçoit une adresse IP du sous-réseau et est accessible directement.With Azure CNI, every pod gets an IP address from the subnet and can be accessed directly. Ces adresses IP doivent être uniques dans votre espace réseau et doivent être planifiées à l’avance.These IP addresses must be unique across your network space, and must be planned in advance. Chaque nœud possède un paramètre de configuration pour le nombre maximal de pods qu’il prend en charge.Each node has a configuration parameter for the maximum number of pods that it supports. Le nombre équivalent d’adresses IP par nœud est alors réservé à l’avance pour ce nœud.The equivalent number of IP addresses per node are then reserved up front for that node. Cette approche nécessite davantage de planification. De plus, elle conduit souvent à l’épuisement des adresses IP ou à la nécessité de regénérer les clusters dans un sous-réseau plus vaste à mesure que vos demandes d’applications augmentent.This approach requires more planning, and often leads to IP address exhaustion or the need to rebuild clusters in a larger subnet as your application demands grow.

Les nœuds utilisent le plug-in Kubernetes Azure CNI (Container Networking Interface).Nodes use the Azure Container Networking Interface (CNI) Kubernetes plugin.

Diagramme représentant 2 nœuds avec des ponts les reliant chacun à un réseau virtuel Azure

Azure CNI fournit les fonctionnalités suivantes par rapport à la mise en réseau kubenet :Azure CNI provides the following features over kubenet networking:

  • Chaque pod dans le cluster se voit affecter une adresse IP dans le réseau virtuel.Every pod in the cluster is assigned an IP address in the virtual network. Les pods du cluster peuvent communiquer directement entre eux et avec les autres nœuds du réseau virtuel.The pods can directly communicate with other pods in the cluster, and other nodes in the virtual network.
  • Les pods dans un sous-réseau disposant de points de terminaison de service activés peuvent se connecter de manière sécurisée aux services Azure (tels que Stockage Azure et SQL Database).Pods in a subnet that have service endpoints enabled can securely connect to Azure services, such as Azure Storage and SQL DB.
  • Vous pouvez créer des itinéraires définis par l’utilisateur pour acheminer le trafic des pods vers une appliance virtuelle réseau.You can create user-defined routes (UDR) to route traffic from pods to a Network Virtual Appliance.

Pour plus d’informations, consultez Configurer Azure CNI pour un cluster AKS.For more information, see Configure Azure CNI for an AKS cluster.

Contrôleurs d’entréeIngress controllers

Quand vous créez un service de type LoadBalancer, une ressource d’équilibreur de charge Azure sous-jacente est créée.When you create a LoadBalancer type Service, an underlying Azure load balancer resource is created. L’équilibreur de charge est configuré pour distribuer le trafic vers les pods dans votre service sur un port donné.The load balancer is configured to distribute traffic to the pods in your Service on a given port. L’équilibreur de charge fonctionne uniquement au niveau de la couche 4 : le service n’a pas connaissance des applications réelles et n’intervient pas dans le routage.The LoadBalancer only works at layer 4 - the Service is unaware of the actual applications, and can't make any additional routing considerations.

Les contrôleurs d’entrée fonctionnent au niveau de la couche 7 ; ils peuvent utiliser des règles plus intelligentes pour distribuer le trafic des applications.Ingress controllers work at layer 7, and can use more intelligent rules to distribute application traffic. Une utilisation courante d’un contrôleur d’entrée consiste à router le trafic HTTP vers les différentes applications en fonction de l’URL entrante.A common use of an Ingress controller is to route HTTP traffic to different applications based on the inbound URL.

Diagramme montrant le flux de trafic d’entrée dans un cluster AKS

Dans AKS, vous pouvez créer une ressource d’entrée à l’aide de NGINX, ou d’un outil similaire, ou utiliser la fonctionnalité de routage d’application HTTP AKS.In AKS, you can create an Ingress resource using something like NGINX, or use the AKS HTTP application routing feature. Quand vous activez le routage d’application HTTP pour un cluster AKS, la plateforme Azure crée le contrôleur d’entrée et un contrôleur DNS externe.When you enable HTTP application routing for an AKS cluster, the Azure platform creates the Ingress controller and an External-DNS controller. Quand des ressources d’entrée sont créées dans Kubernetes, les enregistrements DNS A requis sont créés dans une zone DNS propre au cluster.As new Ingress resources are created in Kubernetes, the required DNS A records are created in a cluster-specific DNS zone. Pour plus d’informations, consultez Déployer le routage d’applications HTTP.For more information, see deploy HTTP application routing.

Une autre fonctionnalité d’entrée courante est l’arrêt SSL/TLS.Another common feature of Ingress is SSL/TLS termination. Sur les grandes applications web accessibles via HTTPS, l’arrêt TLS peut être géré par la ressource d’entrée plutôt que dans l’application proprement dite.On large web applications accessed via HTTPS, the TLS termination can be handled by the Ingress resource rather than within the application itself. Pour fournir la configuration et la génération automatiques de la certification TLS, vous pouvez configurer la ressource d’entrée pour utiliser des fournisseurs tels que 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. Pour plus d’informations sur la configuration d’un contrôleur d’entrée NGINX avec Let's Encrypt, consultez Entrée et TLS.For more information on configuring an NGINX Ingress controller with Let's Encrypt, see Ingress and TLS.

Vous pouvez également configurer votre contrôleur d’entrée pour conserver l’adresse IP source de client sur les demandes vers les conteneurs dans votre cluster AKS.You can also configure your ingress controller to preserve the client source IP on requests to containers in your AKS cluster. Lorsqu’une demande du client est acheminée vers un conteneur dans votre cluster ACS par le biais de votre contrôleur d’entrée, il se peut que l’ip source d’origine de la demande ne sera pas disponible pour le conteneur cible.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. Lorsque vous activez préservation du client source IP, l’adresse IP source pour le client est disponible dans l’en-tête de demande sous X-Forwarded-For.When you enable client source IP preservation, the source IP for the client is available in the request header under X-Forwarded-For. Si vous utilisez la préservation d’IP client source sur votre contrôleur d’entrée, vous ne pouvez pas utiliser directe SSL.If you are using client source IP preservation on your ingress controller, you cannot use SSL pass-through. Préservation du client source IP et directe SSL utilisable avec d’autres services, tels que le LoadBalancer type.Client source IP preservation and SSL pass-through can be used with other services, such as the LoadBalancer type.

Groupes de sécurité réseauNetwork security groups

Un groupe de sécurité réseau filtre le trafic pour des machines virtuelles, par exemple les nœuds AKS.A network security group filters traffic for VMs, such as the AKS nodes. Quand vous créez des services, tels qu’un équilibreur de charge, la plateforme Azure configure automatiquement toutes les règles de groupe de sécurité réseau nécessaires.As you create Services, such as a LoadBalancer, the Azure platform automatically configures any network security group rules that are needed. Ne configurez pas manuellement des règles de groupe de sécurité réseau pour filtrer le trafic des pods dans un cluster AKS.Don't manually configure network security group rules to filter traffic for pods in an AKS cluster. Définissez les ports et le transfert requis dans le cadre de vos manifestes de services Kubernetes et laissez la plateforme Azure créer ou mettre à jour les règles appropriées.Define any required ports and forwarding as part of your Kubernetes Service manifests, and let the Azure platform create or update the appropriate rules. Vous pouvez également utiliser les stratégies de réseau, comme indiqué dans la section suivante, pour appliquer automatiquement les règles de filtre de trafic avec les pods.You can also use network policies, as discussed in the next section, to automatically apply traffic filter rules to pods.

Stratégies réseauNetwork policies

Par défaut, tous les pods d’un cluster AKS peuvent envoyer et recevoir du trafic sans limitations.By default, all pods in an AKS cluster can send and receive traffic without limitations. Pour une sécurité accrue, vous pouvez définir des règles qui contrôlent le flux de trafic.For improved security, you may want to define rules that control the flow of traffic. Les applications principales sont souvent exposées uniquement aux services frontaux obligatoires, ou les composants de base de données sont uniquement accessibles aux couches d’application qui s’y connectent.Backend applications are often only exposed to required frontend services, or database components are only accessible to the application tiers that connect to them.

Stratégie de réseau est une fonctionnalité de Kubernetes dans AKS qui vous permet de contrôler le flux de trafic entre les pods.Network policy is a Kubernetes feature available in AKS that lets you control the traffic flow between pods. Vous pouvez choisir d’autoriser ou de refuser un trafic en fonction de paramètres, tels que des étiquettes attribuées, un espace de noms ou un port de trafic.You can choose to allow or deny traffic based on settings such as assigned labels, namespace, or traffic port. Les groupes de sécurité réseau sont plus adaptés aux nœuds AKS qu’aux pods.Network security groups are more for the AKS nodes, not pods. L’utilisation de stratégies réseau est un moyen plus adapté et natif du cloud de contrôler le flux de trafic.The use of network policies is a more suitable, cloud-native way to control the flow of traffic. Les pods étant créés de façon dynamique dans un cluster AKS, les stratégies réseau nécessaires peuvent être appliquées automatiquement.As pods are dynamically created in an AKS cluster, the required network policies can be automatically applied.

Pour plus d’informations, consultez Sécuriser le trafic entre les pods avec des stratégies réseau dans Azure Kubernetes Service (AKS).For more information, see Secure traffic between pods using network policies in Azure Kubernetes Service (AKS).

Étapes suivantesNext steps

Pour bien démarrer avec la mise en réseau AKS, créez et configurez un cluster AKS avec vos propres plages d’adresses IP à l’aide de kubenet ou d’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.

Pour les recommandations associées, consultez meilleures pratiques pour la connectivité de réseau et de sécurité dans AKS.For associated best practices, see Best practices for network connectivity and security in AKS.

Pour plus d’informations sur les concepts fondamentaux de Kubernetes et d’AKS, consultez les articles suivants :For additional information on core Kubernetes and AKS concepts, see the following articles: