Nätverks koncept för program i Azure Kubernetes service (AKS)Network concepts for applications in Azure Kubernetes Service (AKS)

I en container-baserad mikrotjänster-metod för program utveckling måste program komponenterna arbeta tillsammans för att bearbeta sina uppgifter.In a container-based microservices approach to application development, application components must work together to process their tasks. Kubernetes tillhandahåller olika resurser som möjliggör den här program kommunikationen.Kubernetes provides various resources that enable this application communication. Du kan ansluta till och exponera program internt eller externt.You can connect to and expose applications internally or externally. Om du vill bygga program med hög tillgänglighet kan du belastningsutjämna dina program.To build highly available applications, you can load balance your applications. Mer komplexa program kan kräva konfiguration av inkommande trafik för SSL/TLS-avslutning eller routning av flera komponenter.More complex applications may require configuration of ingress traffic for SSL/TLS termination or routing of multiple components. Av säkerhets skäl kan du också behöva begränsa flödet av nätverks trafik till eller mellan poddar och noder.For security reasons, you may also need to restrict the flow of network traffic into or between pods and nodes.

I den här artikeln beskrivs de grundläggande koncepten som ger nätverk till dina program i AKS:This article introduces the core concepts that provide networking to your applications in AKS:

Grundläggande om KubernetesKubernetes basics

För att tillåta åtkomst till dina program, eller för att program komponenter ska kunna kommunicera med varandra, tillhandahåller Kubernetes ett abstraktions lager för virtuella nätverk.To allow access to your applications, or for application components to communicate with each other, Kubernetes provides an abstraction layer to virtual networking. Kubernetes-noder är anslutna till ett virtuellt nätverk och kan tillhandahålla inkommande och utgående anslutning för poddar.Kubernetes nodes are connected to a virtual network, and can provide inbound and outbound connectivity for pods. Komponenten Kube-proxy körs på varje nod för att tillhandahålla de här nätverks funktionerna.The kube-proxy component runs on each node to provide these network features.

I Kubernetes grupperar tjänster logiskt poddar för att tillåta direkt åtkomst via en IP-adress eller DNS-namn och på en speciell port.In Kubernetes, Services logically group pods to allow for direct access via an IP address or DNS name and on a specific port. Du kan också distribuera trafik med hjälp av en belastningsutjämnare.You can also distribute traffic using a load balancer. Mer komplex routning av program trafik kan också uppnås med ingångs enheter.More complex routing of application traffic can also be achieved with Ingress Controllers. Säkerhet och filtrering av nätverks trafik för poddar är möjlig med Kubernetes- nätverks principer.Security and filtering of the network traffic for pods is possible with Kubernetes network policies.

Azure-plattformen hjälper också till att förenkla virtuella nätverk för AKS-kluster.The Azure platform also helps to simplify virtual networking for AKS clusters. När du skapar en Kubernetes-belastningsutjämnare skapas och konfigureras den underliggande Azure Load Balancer-resursen.When you create a Kubernetes load balancer, the underlying Azure load balancer resource is created and configured. När du öppnar nätverks portar till poddar konfigureras motsvarande regler för Azure nätverks säkerhets grupper.As you open network ports to pods, the corresponding Azure network security group rules are configured. För HTTP-programroutning kan Azure också konfigurera extern DNS eftersom nya ingress-vägar konfigureras.For HTTP application routing, Azure can also configure external DNS as new ingress routes are configured.

TjänsterServices

För att förenkla nätverks konfigurationen för program arbets belastningar använder Kubernetes tjänster för att logiskt gruppera en uppsättning poddar tillsammans och tillhandahålla nätverks anslutning.To simplify the network configuration for application workloads, Kubernetes uses Services to logically group a set of pods together and provide network connectivity. Följande tjänst typer är tillgängliga:The following Service types are available:

  • Kluster-IP – skapar en intern IP-adress som ska användas i AKS-klustret.Cluster IP - Creates an internal IP address for use within the AKS cluster. Lämpar sig för interna program som har stöd för andra arbets belastningar i klustret.Good for internal-only applications that support other workloads within the cluster.

    Diagram över kluster-IP-trafikflöde i ett AKS-kluster

  • NodePort – skapar en port mappning på den underliggande noden som gör att programmet kan nås direkt med nodens IP-adress och 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.

    Diagram som visar NodePort trafikflöde i ett AKS-kluster

  • Loadbalancer -skapar en Azure Load Balancer-resurs, konfigurerar en extern IP-adress och ansluter de begärda poddar till backend-poolen för belastningsutjämnare.LoadBalancer - Creates an Azure load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool. För att tillåta kund trafik att komma åt programmet skapas belastnings Utjämnings regler på önskade portar.To allow customers traffic to reach the application, load balancing rules are created on the desired ports.

    Diagram som visar Load Balancer trafikflöde i ett AKS-kluster

    För ytterligare kontroll och routning av inkommande trafik kan du i stället använda en ingångs kontroll.For additional control and routing of the inbound traffic, you may instead use an Ingress controller.

  • ExternalName – skapar en specifik DNS-post för enklare program åtkomst.ExternalName - Creates a specific DNS entry for easier application access.

IP-adressen för belastningsutjämnare och tjänster kan tilldelas dynamiskt, eller så kan du ange en befintlig statisk IP-adress som ska användas.The IP address for load balancers and services can be dynamically assigned, or you can specify an existing static IP address to use. Både interna och externa statiska IP-adresser kan tilldelas.Both internal and external static IP addresses can be assigned. Den här befintliga statiska IP-adressen är ofta kopplad till en DNS-post.This existing static IP address is often tied to a DNS entry.

Både interna och externa belastningsutjämnare kan skapas.Both internal and external load balancers can be created. Interna belastningsutjämnare tilldelas bara en privat IP-adress, så de kan inte nås från Internet.Internal load balancers are only assigned a private IP address, so they can't be accessed from the Internet.

Azures virtuella nätverkAzure virtual networks

I AKS kan du distribuera ett kluster som använder någon av följande två nätverks modeller:In AKS, you can deploy a cluster that uses one of the following two network models:

  • Kubernetes -nätverk – nätverks resurserna skapas och konfigureras vanligt vis när AKS-klustret distribueras.Kubenet networking - The network resources are typically created and configured as the AKS cluster is deployed.
  • Nätverk för Azure Container Network Interface (cni) – AKS-klustret är anslutet till befintliga virtuella nätverks resurser och konfigurationer.Azure Container Networking Interface (CNI) networking - The AKS cluster is connected to existing virtual network resources and configurations.

Kubernetes (grundläggande) nätverkKubenet (basic) networking

Alternativet Kubernetes Networking är standard konfigurationen för skapande av AKS-kluster.The kubenet networking option is the default configuration for AKS cluster creation. Med Kuberneteshämtar noder en IP-adress från det virtuella nätverkets undernät i Azure.With kubenet, nodes get an IP address from the Azure virtual network subnet. Poddar tar emot en IP-adress från ett logiskt annorlunda adress utrymme till nodernas virtuella Azure-undernät.Pods receive an IP address from a logically different address space to the Azure virtual network subnet of the nodes. NAT (Network Address Translation) konfigureras sedan så att poddar kan komma åt resurser i det virtuella Azure-nätverket.Network address translation (NAT) is then configured so that the pods can reach resources on the Azure virtual network. Käll-IP-adressen för trafiken är NAT till nodens primära IP-adress.The source IP address of the traffic is NAT'd to the node's primary IP address.

Noder använder plugin-programmet Kubernetes Kubernetes.Nodes use the kubenet Kubernetes plugin. Du kan låta Azure-plattformen skapa och konfigurera de virtuella nätverken åt dig, eller välja att distribuera ditt AKS-kluster till ett befintligt undernät för virtuella nätverk.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. Återigen får bara noderna en IP-adress med IP-adresser och poddar använder NAT för att kommunicera med andra resurser utanför AKS-klustret.Again, only the nodes receive a routable IP address, and the pods use NAT to communicate with other resources outside the AKS cluster. Den här metoden minskar antalet IP-adresser som du behöver reservera i ditt nätverks utrymme för att poddar ska kunna användas.This approach greatly reduces the number of IP addresses that you need to reserve in your network space for pods to use.

Mer information finns i Konfigurera Kubernetes-nätverk för ett AKS-kluster.For more information, see Configure kubenet networking for an AKS cluster.

Azure CNI (avancerat) nätverkAzure CNI (advanced) networking

Med Azure CNI hämtar varje Pod en IP-adress från under nätet och kan nås direkt.With Azure CNI, every pod gets an IP address from the subnet and can be accessed directly. De här IP-adresserna måste vara unika i ditt nätverks utrymme och måste planeras i förväg.These IP addresses must be unique across your network space, and must be planned in advance. Varje nod har en konfigurations parameter för det maximala antalet poddar som stöds.Each node has a configuration parameter for the maximum number of pods that it supports. Motsvarande antal IP-adresser per nod är sedan reserverade för den noden.The equivalent number of IP addresses per node are then reserved up front for that node. Den här metoden kräver mer planering, som annars kan leda till IP-adressundernät eller behöver återskapa kluster i ett större undernät när ditt program kräver större belastning.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.

Noder använder Kubernetes -plugin-programmet för Azure Container Network Interface (cni) .Nodes use the Azure Container Networking Interface (CNI) Kubernetes plugin.

Diagram som visar två noder med bryggor som ansluter var och en till ett enda Azure VNet

Mer information finns i Konfigurera Azure-cni för ett AKS-kluster.For more information, see Configure Azure CNI for an AKS cluster.

Jämför nätverks modellerCompare network models

Både Kubernetes och Azure CNI ger nätverks anslutning till dina AKS-kluster.Both kubenet and Azure CNI provide network connectivity for your AKS clusters. Det finns dock fördelar och nack delar med var och en.However, there are advantages and disadvantages to each. På hög nivå gäller följande aspekter:At a high level, the following considerations apply:

  • kubenetkubenet
    • Bevarar IP-adressutrymmet.Conserves IP address space.
    • Använder intern eller extern belastningsutjämnare i Kubernetes för att uppnå poddar utanför klustret.Uses Kubernetes internal or external load balancer to reach pods from outside of the cluster.
    • Du måste manuellt hantera och underhålla användardefinierade vägar (UDR).You must manually manage and maintain user-defined routes (UDRs).
    • Högst 400 noder per kluster.Maximum of 400 nodes per cluster.
  • Azure CNIAzure CNI
    • Poddar får fullständig virtuell nätverks anslutning och kan nås direkt från utsidan av klustret.Pods get full virtual network connectivity and can be directly reached from outside of the cluster.
    • Kräver mer IP-adressutrymme.Requires more IP address space.

Det finns följande skillnader mellan Kubernetes och Azure CNI:The following behavior differences exist between kubenet and Azure CNI:

FunktionCapability KubernetesKubenet Azure CNIAzure CNI
Distribuera kluster i befintligt eller nytt virtuellt nätverkDeploy cluster in existing or new virtual network Stödd-UDR manuellt tillämpatSupported - UDRs manually applied StödsSupported
Pod – Pod-anslutningPod-pod connectivity StödsSupported StödsSupported
Pod – VM-anslutning; Virtuell dator i samma virtuella nätverkPod-VM connectivity; VM in the same virtual network Fungerar när det initieras av PodWorks when initiated by pod Fungerar på båda sättenWorks both ways
Pod – VM-anslutning; Virtuell dator i peer-kopplat virtuellt nätverkPod-VM connectivity; VM in peered virtual network Fungerar när det initieras av PodWorks when initiated by pod Fungerar på båda sättenWorks both ways
Lokal åtkomst med hjälp av VPN eller Express RouteOn-premises access using VPN or Express Route Fungerar när det initieras av PodWorks when initiated by pod Fungerar på båda sättenWorks both ways
Åtkomst till resurser som skyddas av tjänst slut punkterAccess to resources secured by service endpoints StödsSupported StödsSupported
Exponera Kubernetes Services med hjälp av en belastningsutjämnare, app-gateway eller ingångs kontrollExpose Kubernetes services using a load balancer service, App Gateway, or ingress controller StödsSupported StödsSupported
Standard Azure DNS och privata zonerDefault Azure DNS and Private Zones StödsSupported StödsSupported

Support omfattning mellan nätverks modellerSupport scope between network models

Oavsett vilken nätverks modell du använder kan både Kubernetes och Azure CNI distribueras på något av följande sätt:Regardless of the network model you use, both kubenet and Azure CNI can be deployed in one of the following ways:

  • Azure-plattformen kan automatiskt skapa och konfigurera virtuella nätverks resurser när du skapar ett AKS-kluster.The Azure platform can automatically create and configure the virtual network resources when you create an AKS cluster.
  • Du kan manuellt skapa och konfigurera virtuella nätverks resurser och koppla dem till resurserna när du skapar ditt AKS-kluster.You can manually create and configure the virtual network resources and attach to those resources when you create your AKS cluster.

Även om funktioner som tjänst slut punkter eller UDR stöds med både Kubernetes och Azure CNI, definierar support principerna för AKS vilka ändringar du kan göra.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. Exempel:For example:

  • Om du skapar virtuella nätverks resurser manuellt för ett AKS-kluster, så kan du använda dem när du konfigurerar dina egna UDR-eller tjänst slut punkter.If you manually create the virtual network resources for an AKS cluster, you are supported when configuring your own UDRs or service endpoints.
  • Om Azure-plattformen automatiskt skapar de virtuella nätverks resurserna för ditt AKS-kluster, stöds det inte för att manuellt ändra de AKS-hanterade resurserna för att konfigurera dina egna UDR-eller tjänst slut punkter.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.

Ingress-kontrollerIngress controllers

När du skapar en LoadBalancer-typ tjänst skapas en underliggande resurs för Azure Load Balancer.When you create a LoadBalancer type Service, an underlying Azure load balancer resource is created. Belastningsutjämnaren konfigureras för att distribuera trafik till poddar i din tjänst på en specifik port.The load balancer is configured to distribute traffic to the pods in your Service on a given port. LoadBalancer fungerar endast på nivå 4 – tjänsten är inte medveten om de faktiska programmen och kan inte göra några ytterligare Dirigerings överväganden.The LoadBalancer only works at layer 4 - the Service is unaware of the actual applications, and can't make any additional routing considerations.

Ingress-kontroller fungerar på nivå 7 och kan använda mer intelligenta regler för att distribuera program trafik.Ingress controllers work at layer 7, and can use more intelligent rules to distribute application traffic. En vanlig användning av en ingångs kontroll är att dirigera HTTP-trafik till olika program baserat på den inkommande URL: en.A common use of an Ingress controller is to route HTTP traffic to different applications based on the inbound URL.

Diagram över ingress trafikflöde i ett AKS-kluster

I AKS kan du skapa en ingress-resurs med hjälp av något som NGINX, eller använda funktionen för att dirigera HTTP-program.In AKS, you can create an Ingress resource using something like NGINX, or use the AKS HTTP application routing feature. När du aktiverar HTTP-programroutning för ett AKS-kluster skapar Azure-plattformen ingångs styrenheten och en extern DNS- styrenhet.When you enable HTTP application routing for an AKS cluster, the Azure platform creates the Ingress controller and an External-DNS controller. När nya ingångs resurser skapas i Kubernetes skapas de DNS-poster som krävs i en klustrad DNS-zon.As new Ingress resources are created in Kubernetes, the required DNS A records are created in a cluster-specific DNS zone. Mer information finns i distribuera HTTP-programroutning.For more information, see deploy HTTP application routing.

En annan vanlig funktion i ingress är SSL/TLS-avslutning.Another common feature of Ingress is SSL/TLS termination. I stora webb program som nås via HTTPS kan TLS-terminering hanteras av den ingående resursen i stället för i själva programmet.On large web applications accessed via HTTPS, the TLS termination can be handled by the Ingress resource rather than within the application itself. För att tillhandahålla automatisk generering och konfiguration av TLS-certifiering kan du konfigurera ingångs resursen så att leverantörer kan använda providers, till exempel för att kryptera.To provide automatic TLS certification generation and configuration, you can configure the Ingress resource to use providers such as Let's Encrypt. Mer information om hur du konfigurerar en NGINX ingress-styrenhet med att kryptera finns i ingress och TLS.For more information on configuring an NGINX Ingress controller with Let's Encrypt, see Ingress and TLS.

Du kan också konfigurera ingångs styrenheten för att bevara klientens käll-IP på begär anden till behållare i ditt AKS-kluster.You can also configure your ingress controller to preserve the client source IP on requests to containers in your AKS cluster. När en klients begäran dirigeras till en behållare i ditt AKS-kluster via din ingångs kontroll, kommer den ursprungliga käll-IP: en för den begäran inte att vara tillgänglig för mål behållaren.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. När du aktiverar IP-konservering för klient källaär käll-IP: en för klienten tillgänglig i begär ande huvudet under 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. Om du använder IP-konservering för klient källa på din ingångs kontroll kan du inte använda SSL-vidarekoppling.If you are using client source IP preservation on your ingress controller, you cannot use SSL pass-through. Klientens IP-konservering och SSL-vidarekoppling kan användas med andra tjänster, till exempel Loadbalancer -typen.Client source IP preservation and SSL pass-through can be used with other services, such as the LoadBalancer type.

NätverkssäkerhetsgrupperNetwork security groups

En nätverks säkerhets grupp filtrerar trafik för virtuella datorer, till exempel AKS-noder.A network security group filters traffic for VMs, such as the AKS nodes. När du skapar tjänster, till exempel en LoadBalancer, konfigurerar Azure-plattformen automatiskt eventuella regler för nätverks säkerhets grupper som behövs.As you create Services, such as a LoadBalancer, the Azure platform automatically configures any network security group rules that are needed. Konfigurera inte nätverks säkerhets grupp regler manuellt för att filtrera trafik för poddar i ett AKS-kluster.Don't manually configure network security group rules to filter traffic for pods in an AKS cluster. Definiera nödvändiga portar och vidarebefordran som en del av dina Kubernetes-tjänst manifest och låt Azure-plattformen skapa eller uppdatera lämpliga regler.Define any required ports and forwarding as part of your Kubernetes Service manifests, and let the Azure platform create or update the appropriate rules. Du kan också använda nätverks principer, enligt beskrivningen i nästa avsnitt, för att automatiskt tillämpa trafik filter regler på poddar.You can also use network policies, as discussed in the next section, to automatically apply traffic filter rules to pods.

Nätverks principerNetwork policies

Som standard kan alla poddar i ett AKS-kluster skicka och ta emot trafik utan begränsningar.By default, all pods in an AKS cluster can send and receive traffic without limitations. För ökad säkerhet kan du vilja definiera regler som styr flödet av trafik.For improved security, you may want to define rules that control the flow of traffic. Backend-program exponeras ofta bara för nödvändiga frontend-tjänster, eller databas komponenter är bara tillgängliga för de program nivåer som ansluter till dem.Backend applications are often only exposed to required frontend services, or database components are only accessible to the application tiers that connect to them.

Nätverks principen är en Kubernetes-funktion som är tillgänglig i AKS som låter dig styra trafikflödet mellan poddar.Network policy is a Kubernetes feature available in AKS that lets you control the traffic flow between pods. Du kan välja att tillåta eller neka trafik baserat på inställningar som tilldelad etikett, namnrymd eller trafik port.You can choose to allow or deny traffic based on settings such as assigned labels, namespace, or traffic port. Nätverks säkerhets grupper är mer för AKS-noderna, inte poddar.Network security groups are more for the AKS nodes, not pods. Användningen av nätverks principer är ett mer lämpligt, moln sätt att styra trafik flödet.The use of network policies is a more suitable, cloud-native way to control the flow of traffic. Allteftersom poddar skapas dynamiskt i ett AKS-kluster kan de nödvändiga nätverks principerna tillämpas automatiskt.As pods are dynamically created in an AKS cluster, the required network policies can be automatically applied.

Mer information finns i skydda trafik mellan poddar med hjälp av nätverks principer i Azure Kubernetes service (AKS).For more information, see Secure traffic between pods using network policies in Azure Kubernetes Service (AKS).

Nästa stegNext steps

Kom igång med AKS-nätverk genom att skapa och konfigurera ett AKS-kluster med dina egna IP-adressintervall med hjälp av Kubernetes eller 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.

För associerade metod tips, se metod tips för nätverks anslutning och säkerhet i AKS.For associated best practices, see Best practices for network connectivity and security in AKS.

Mer information om kärn Kubernetes-och AKS-koncept finns i följande artiklar:For additional information on core Kubernetes and AKS concepts, see the following articles: