Conceptos de redes de aplicaciones en Azure Kubernetes Service (AKS)Network concepts for applications in Azure Kubernetes Service (AKS)

En una aproximación de los microservicios basados en contenedores al desarrollo de aplicaciones, los componentes de la aplicación deben funcionar juntos para procesar sus tareas.In a container-based microservices approach to application development, application components must work together to process their tasks. Kubernetes proporciona diversos recursos que permiten esta comunicación con la aplicación.Kubernetes provides various resources that enable this application communication. Puede conectarse a aplicaciones y exponer estas de forma interna o externa.You can connect to and expose applications internally or externally. Para compilar aplicaciones de alta disponibilidad, puede equilibrar la carga de sus aplicaciones.To build highly available applications, you can load balance your applications. Las aplicaciones más complejas pueden requerir la configuración del tráfico de entrada para la terminación SSL/TLS o el enrutamiento de varios componentes.More complex applications may require configuration of ingress traffic for SSL/TLS termination or routing of multiple components. Por motivos de seguridad, es posible que deba restringir el flujo de tráfico de red entre pods y nodos.For security reasons, you may also need to restrict the flow of network traffic into or between pods and nodes.

En este artículo se presentan los conceptos básicos que proporcionan redes para sus aplicaciones en AKS:This article introduces the core concepts that provide networking to your applications in AKS:

Aspectos básicos de KubernetesKubernetes basics

Para permitir el acceso a las aplicaciones o para que los componentes de las aplicaciones se comuniquen entre sí, Kubernetes proporciona una capa de abstracción para la red virtual.To allow access to your applications, or for application components to communicate with each other, Kubernetes provides an abstraction layer to virtual networking. Los nodos de Kubernetes están conectados a una red virtual y pueden proporcionar conectividad de entrada y salida para los pods.Kubernetes nodes are connected to a virtual network, and can provide inbound and outbound connectivity for pods. El componente kube-proxy se ejecuta en cada nodo para proporcionar estas características de red.The kube-proxy component runs on each node to provide these network features.

En Kubernetes, los servicios agrupan lógicamente los pods para permitir el acceso directo a través de una dirección IP o nombre DNS y en un puerto específico.In Kubernetes, Services logically group pods to allow for direct access via an IP address or DNS name and on a specific port. También puede distribuir el tráfico mediante un equilibrador de carga.You can also distribute traffic using a load balancer. También se puede lograr un enrutamiento del tráfico de la aplicación más complejo mediante los controladores de entradas.More complex routing of application traffic can also be achieved with Ingress Controllers. La seguridad y el filtrado del tráfico de red de los pods es posible con las directivas de red de Kubernetes.Security and filtering of the network traffic for pods is possible with Kubernetes network policies.

La plataforma Azure también ayuda a simplificar las redes virtuales de los clústeres de AKS.The Azure platform also helps to simplify virtual networking for AKS clusters. Cuando se crea un equilibrador de carga de Kubernetes, se crea y se configura el recurso de equilibrador de carga de Azure subyacente.When you create a Kubernetes load balancer, the underlying Azure load balancer resource is created and configured. Cuando abre los puertos de red a los pods, se configuran las reglas de los grupos de seguridad de red de Azure correspondientes.As you open network ports to pods, the corresponding Azure network security group rules are configured. Para el enrutamiento de aplicaciones HTTP, Azure también puede configurar un DNS externo a medida que se configuran nuevas rutas de entrada.For HTTP application routing, Azure can also configure external DNS as new ingress routes are configured.

ServiciosServices

Para simplificar la configuración de red de las cargas de trabajo de la aplicación, Kubernetes usa servicios para agrupar lógicamente un conjunto de pods y proporcionar conectividad de red.To simplify the network configuration for application workloads, Kubernetes uses Services to logically group a set of pods together and provide network connectivity. Están disponibles los siguientes tipos de servicio:The following Service types are available:

  • Dirección IP de clúster: crea una dirección IP interna para su uso dentro del clúster de AKS.Cluster IP - Creates an internal IP address for use within the AKS cluster. Es útil solo para aplicaciones internas que admiten otras cargas de trabajo dentro del clúster.Good for internal-only applications that support other workloads within the cluster.

    Diagrama que muestra el flujo de tráfico de Dirección IP de clúster en un clúster de AKS

  • NodePort: crea una asignación de puerto en el nodo subyacente que permite que se pueda acceder a la aplicación directamente con la dirección IP del nodo y el puerto.NodePort - Creates a port mapping on the underlying node that allows the application to be accessed directly with the node IP address and port.

    Diagrama que muestra el flujo de tráfico de NodePort en un clúster de AKS

  • LoadBalancer: crea un recurso de equilibrador de carga de Azure, configura una dirección IP externa y conecta los pods solicitados al grupo de back-end del equilibrador de carga.LoadBalancer - Creates an Azure load balancer resource, configures an external IP address, and connects the requested pods to the load balancer backend pool. Para permitir que el tráfico de los clientes llegue a la aplicación, se crean reglas de equilibrio de carga en los puertos deseados.To allow customers' traffic to reach the application, load balancing rules are created on the desired ports.

    Diagrama que muestra el flujo de tráfico de LoadBalancer en un clúster de AKS

    Para mayor control y el enrutamiento del tráfico entrante, puede usar en su lugar un controlador de entrada.For additional control and routing of the inbound traffic, you may instead use an Ingress controller.

  • ExternalName: crea una entrada DNS específica para facilitar el acceso a la aplicación.ExternalName - Creates a specific DNS entry for easier application access.

La dirección IP de los equilibradores de carga y de los servicios se puede asignar dinámicamente, o puede especificar una dirección IP estática existente para su uso.The IP address for load balancers and services can be dynamically assigned, or you can specify an existing static IP address to use. Se pueden asignar direcciones IP estáticas internas y externas.Both internal and external static IP addresses can be assigned. Esta dirección IP estática existente está a menudo asociada a una entrada DNS.This existing static IP address is often tied to a DNS entry.

Se pueden crear equilibradores de carga internos y externos.Both internal and external load balancers can be created. Solo se asigna una dirección IP privada a los equilibradores de carga internos, por lo que no se puede acceder a ellos desde Internet.Internal load balancers are only assigned a private IP address, so they can't be accessed from the Internet.

Redes virtuales de AzureAzure virtual networks

En AKS, puede implementar un clúster que use uno de los dos siguientes modelos de red:In AKS, you can deploy a cluster that uses one of the following two network models:

  • Red de kubenet: los recursos de la red normalmente se crean y se configuran cuando se implementa el clúster de AKS.Kubenet networking - The network resources are typically created and configured as the AKS cluster is deployed.
  • Red de Azure Container Networking Interface (CNI) : el clúster de AKS se conecta a los recursos y configuraciones de la red virtual existentes.Azure Container Networking Interface (CNI) networking - The AKS cluster is connected to existing virtual network resources and configurations.

Red (básica) de kubenetKubenet (basic) networking

La opción de red de kubenet es la configuración predeterminada para la creación del clúster de AKS.The kubenet networking option is the default configuration for AKS cluster creation. Con kubenet, los nodos obtienen una dirección IP de una subred de la red virtual de Azure.With kubenet, nodes get an IP address from the Azure virtual network subnet. Los pods reciben una dirección IP de un espacio de direcciones lógicamente distinto a la subred de red virtual de Azure de los nodos.Pods receive an IP address from a logically different address space to the Azure virtual network subnet of the nodes. A continuación, se configura la traducción de direcciones de red (NAT) para que los pods puedan acceder a los recursos en la red virtual de Azure.Network address translation (NAT) is then configured so that the pods can reach resources on the Azure virtual network. La dirección IP de origen del tráfico se somete a un proceso NAT hacia la dirección IP principal del nodo.The source IP address of the traffic is NAT'd to the node's primary IP address.

Los nodos usan el complemento kubenet de Kubernetes.Nodes use the kubenet Kubernetes plugin. Puede dejar que la plataforma de Azure cree y configure las redes virtuales por usted o puede implementar el clúster de AKS en una subred de red virtual existente.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. Nuevamente, solo los nodos reciben una dirección IP enrutable y los pods usan NAT para comunicarse con otros recursos fuera del clúster de AKS.Again, only the nodes receive a routable IP address, and the pods use NAT to communicate with other resources outside the AKS cluster. Este enfoque reduce enormemente el número de direcciones IP que se deben reservar en el espacio de red para que los pods las usen.This approach greatly reduces the number of IP addresses that you need to reserve in your network space for pods to use.

Para más información, consulte el artículo de Configuración de la red de kubenet para un clúster de AKS.For more information, see Configure kubenet networking for an AKS cluster.

Redes (avanzadas) de Azure CNIAzure CNI (advanced) networking

Con Azure CNI, cada pod obtiene una dirección IP de la subred y se puede acceder a ella directamente.With Azure CNI, every pod gets an IP address from the subnet and can be accessed directly. Estas direcciones IP deben ser únicas en el espacio de red y deben planearse de antemano.These IP addresses must be unique across your network space, and must be planned in advance. Cada nodo tiene un parámetro de configuración para el número máximo de pods que admite.Each node has a configuration parameter for the maximum number of pods that it supports. Luego, el número equivalente de direcciones IP por nodo se reserva por adelantado para ese nodo.The equivalent number of IP addresses per node are then reserved up front for that node. Este enfoque requiere más planificación, ya que de otro modo puede conducir al agotamiento de direcciones IP o a la necesidad de recompilar los clústeres en una subred mayor, a medida que crecen las exigencias de la aplicación.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.

A diferencia de kubenet, el tráfico hacia los puntos de conexión de la misma red virtual no traduce las direcciones de red a la dirección IP principal del nodo.Unlike kubenet, traffic to endpoints in the same virtual network isn't NAT'd to the node's primary IP. La dirección de origen para el tráfico dentro de la red virtual es la dirección IP del pod.The source address for traffic inside the virtual network is the pod IP. El tráfico externo a la red virtual sigue traduciendo las direcciones de red a la dirección IP principal del nodo.Traffic that's external to the virtual network still NATs to the node's primary IP.

Los nodos usan el complemento Azure Container Networking Interface (CNI) de Kubernetes.Nodes use the Azure Container Networking Interface (CNI) Kubernetes plugin.

Diagrama que muestra dos nodos con puentes que conectan cada uno a una única red virtual de Azure

Para más información, consulte el artículo de Configuración de Azure CNI para un clúster de AKS.For more information, see Configure Azure CNI for an AKS cluster.

Comparación de modelos de redCompare network models

Kubenet y Azure CNI proporcionan conectividad de red para los clústeres de AKS.Both kubenet and Azure CNI provide network connectivity for your AKS clusters. Sin embargo, cada uno tiene sus ventajas y sus desventajas.However, there are advantages and disadvantages to each. En general, se aplican las siguientes consideraciones:At a high level, the following considerations apply:

  • kubenetkubenet
    • Conserva el espacio de direcciones IP.Conserves IP address space.
    • Usa el equilibrador de carga interno o externo de Kubernetes para llegar a los pods desde fuera del clúster.Uses Kubernetes internal or external load balancer to reach pods from outside of the cluster.
    • Debe administrar y mantener las rutas definidas por el usuario (UDR) de manera manual.You must manually manage and maintain user-defined routes (UDRs).
    • 400 nodos por clúster como máximo.Maximum of 400 nodes per cluster.
  • Azure CNIAzure CNI
    • Los pods obtienen conectividad de red virtual completa y se pueden alcanzar directamente a través de su dirección IP privada desde redes conectadas.Pods get full virtual network connectivity and can be directly reached via their private IP address from connected networks.
    • Requiere más espacio de direcciones IP.Requires more IP address space.

Existen las siguientes diferencias de comportamiento entre kubenet y Azure CNI:The following behavior differences exist between kubenet and Azure CNI:

CapacidadCapability KubenetKubenet CNI de AzureAzure CNI
Implementación del clúster en la red virtual existente o en una nuevaDeploy cluster in existing or new virtual network Se admite, las UDR se aplican manualmenteSupported - UDRs manually applied CompatibleSupported
Conectividad entre podsPod-pod connectivity CompatibleSupported CompatibleSupported
Conectividad entre la máquina virtual y el pod; con la máquina virtual en la misma red virtualPod-VM connectivity; VM in the same virtual network Funciona cuando lo inicia el podWorks when initiated by pod Funciona en ambas direccionesWorks both ways
Conectividad entre la máquina virtual y el pod; con la máquina virtual en una red virtual del mismo nivelPod-VM connectivity; VM in peered virtual network Funciona cuando lo inicia el podWorks when initiated by pod Funciona en ambas direccionesWorks both ways
Acceso local mediante VPN o ExpressRouteOn-premises access using VPN or Express Route Funciona cuando lo inicia el podWorks when initiated by pod Funciona en ambas direccionesWorks both ways
Acceso a los recursos protegidos por puntos de conexión de servicioAccess to resources secured by service endpoints CompatibleSupported CompatibleSupported
Expone los servicios de Kubernetes mediante un servicio de equilibrador de carga, App Gateway o un controlador de entradaExpose Kubernetes services using a load balancer service, App Gateway, or ingress controller CompatibleSupported CompatibleSupported
Azure DNS y zonas privadas predeterminadasDefault Azure DNS and Private Zones CompatibleSupported CompatibleSupported

Con respecto a DNS, con los complementos kubenet y Azure CNI, DNS se ofrece mediante CoreDNS, una implementación que se ejecuta en AKS con su propio escalador automático.Regarding DNS, with both kubenet and Azure CNI plugins DNS is offered by CoreDNS, a deployment running in AKS with its own autoscaler. Para más información sobre CoreDNS en Kubernetes, consulte Personalización del servicio DNS.For more information on CoreDNS on Kubernetes see Customizing DNS Service. CoreDNS se configura de forma predeterminada para reenviar dominios desconocidos a los servidores DNS de nodo, es decir, a la funcionalidad DNS de la red virtual de Azure donde se ha implementado el clúster de AKS.CoreDNS is configured per default to forward unknown domains to the node DNS servers, in other words, to the DNS functionality of the Azure Virtual Network where the AKS cluster is deployed. Por lo tanto, las zonas privadas y Azure DNS funcionarán para los pods que se ejecutan en AKS.Hence, Azure DNS and Private Zones will work for pods running in AKS.

Ámbito de compatibilidad entre los modelos de redSupport scope between network models

Independientemente del modelo de red que use, kubenet y Azure CNI pueden implementarse de una de las siguientes maneras:Regardless of the network model you use, both kubenet and Azure CNI can be deployed in one of the following ways:

  • La plataforma Azure puede crear y configurar automáticamente los recursos de red virtual al crear un clúster de AKS.The Azure platform can automatically create and configure the virtual network resources when you create an AKS cluster.
  • Puede crear y configurar los recursos de red virtual manualmente y conectarse a ellos al crear el clúster de AKS.You can manually create and configure the virtual network resources and attach to those resources when you create your AKS cluster.

Aunque se admiten funcionalidades como puntos de conexión de servicio o UDR tanto con kubenet como con Azure CNI, las directivas de compatibilidad para AKS definen los cambios que se pueden realizar.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. Por ejemplo:For example:

  • Si crea manualmente los recursos de red virtual para un clúster de AKS, tendrá soporte técnico para configurar sus propios puntos de conexión de servicio o UDR.If you manually create the virtual network resources for an AKS cluster, you're supported when configuring your own UDRs or service endpoints.
  • Si la plataforma de Azure crea automáticamente los recursos de red virtual para el clúster de AKS, no se admite cambiar manualmente esos recursos administrados de AKS para configurar sus propios UDR o puntos de conexión de servicio.If the Azure platform automatically creates the virtual network resources for your AKS cluster, it isn't supported to manually change those AKS-managed resources to configure your own UDRs or service endpoints.

Controladores de entradaIngress controllers

Cuando se crea un servicio del tipo LoadBalancer, se crea un recurso subyacente de equilibrador de carga de Azure.When you create a LoadBalancer type Service, an underlying Azure load balancer resource is created. El equilibrador de carga está configurado para distribuir el tráfico a los pods en su servicio en un puerto determinado.The load balancer is configured to distribute traffic to the pods in your Service on a given port. LoadBalancer solo funciona en la capa 4: el servicio no conoce las aplicaciones reales y no puede realizar ninguna consideración de enrutamiento adicional.The LoadBalancer only works at layer 4 - the Service is unaware of the actual applications, and can't make any additional routing considerations.

Los controladores de entrada funcionan en la capa 7 y puede usar reglas más inteligentes para distribuir el tráfico de la aplicación.Ingress controllers work at layer 7, and can use more intelligent rules to distribute application traffic. Un uso habitual de un controlador de entrada es enrutar el tráfico HTTP a diferentes aplicaciones basadas en la URL de entrada.A common use of an Ingress controller is to route HTTP traffic to different applications based on the inbound URL.

Diagrama que muestra el flujo de tráfico de entrada en un clúster de AKS

En AKS, puede crear un recurso de entrada con algo parecido a NGINX, o usar la característica de enrutamiento de aplicación HTTP de AKS.In AKS, you can create an Ingress resource using something like NGINX, or use the AKS HTTP application routing feature. Cuando se habilita el enrutamiento de aplicación HTTP para un clúster de AKS, la plataforma Azure crea el controlador de entrada y un controlador de DNS externo.When you enable HTTP application routing for an AKS cluster, the Azure platform creates the Ingress controller and an External-DNS controller. Cuando se crean nuevos recursos de entrada en Kubernetes, se crean los registros DNS A necesarios en una zona DNS específica del clúster.As new Ingress resources are created in Kubernetes, the required DNS A records are created in a cluster-specific DNS zone. Para más información, consulte el artículo sobre la implementación del enrutamiento de aplicaciones HTTP.For more information, see deploy HTTP application routing.

El complemento del controlador de entrada de Application Gateway (AGIC) permite que los clientes de AKS aprovechen la tecnología nativa del equilibrador de carga de nivel 7 de Application Gateway para exponer el software en la nube a Internet.The Application Gateway Ingress Controller (AGIC) add-on allows AKS customers to leverage Azure's native Application Gateway level 7 load-balancer to expose cloud software to the Internet. AGIC supervisa el clúster de Kubernetes en el que se hospeda y actualiza continuamente una instancia de Application Gateway para que los servicios seleccionados se expongan a Internet.AGIC monitors the Kubernetes cluster it is hosted on and continuously updates an Application Gateway, so that selected services are exposed to the Internet. Para más información sobre el complemento de AGIC para AKS, consulte ¿Qué es controlador de entrada de Application Gateway?To learn more about the AGIC add-on for AKS, see What is Application Gateway Ingress Controller?

Otra característica común de los controladores de entrada es la terminación SSL/TLS.Another common feature of Ingress is SSL/TLS termination. En aplicaciones web de gran tamaño, a las que se accede a través de HTTPS, la terminación TLS puede controlarse mediante el recurso de entrada en lugar de en la propia aplicación.On large web applications accessed via HTTPS, the TLS termination can be handled by the Ingress resource rather than within the application itself. Para proporcionar una configuración y generación automática de certificados TLS, puede configurar el recurso de entrada para que use proveedores como 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. Para más información sobre cómo configurar un controlador de entrada de NGINX con Let's Encrypt, consulte el artículo de Entrada y TLS.For more information on configuring an NGINX Ingress controller with Let's Encrypt, see Ingress and TLS.

También puede configurar el controlador de entrada para conservar la dirección IP de origen de cliente en las solicitudes a los contenedores en el clúster de AKS.You can also configure your ingress controller to preserve the client source IP on requests to containers in your AKS cluster. Si la solicitud de un cliente se enruta a un contenedor del clúster de AKS mediante el controlador de entrada, la dirección IP de origen de la solicitud no estará disponible para el contenedor de destino.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 won't be available to the target container. Al habilitar la conservación de la dirección IP de origen de cliente, la dirección IP de origen para el cliente está disponible en el encabezado de solicitud en 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 usa la conservación de la dirección IP de origen de cliente en el controlador de entrada, no puede usar TLS de paso a través.If you're using client source IP preservation on your ingress controller, you can't use TLS pass-through. La conservación de la dirección IP de origen de cliente y TLS de paso a través pueden usarse con otros servicios, como de tipo LoadBalancer.Client source IP preservation and TLS pass-through can be used with other services, such as the LoadBalancer type.

Grupos de seguridad de redNetwork security groups

Un grupo de seguridad de red filtra el tráfico de las máquinas virtuales como, por ejemplo, el de los nodos de AKS.A network security group filters traffic for VMs, such as the AKS nodes. Al crear los servicios, como LoadBalancer, la plataforma Azure configura automáticamente las reglas de grupo de seguridad de red que son necesarias.As you create Services, such as a LoadBalancer, the Azure platform automatically configures any network security group rules that are needed. No configure manualmente las reglas del grupo de seguridad de red para filtrar el tráfico de los pods en un clúster de AKS.Don't manually configure network security group rules to filter traffic for pods in an AKS cluster. Defina los puertos necesarios y el reenvío como parte de los manifiestos de servicio de Kubernetes y permita que la plataforma Azure cree o actualice las reglas correspondientes.Define any required ports and forwarding as part of your Kubernetes Service manifests, and let the Azure platform create or update the appropriate rules. También puede usar las directivas de red, tal como se describe en la sección siguiente, para aplicar automáticamente las reglas de filtro de tráfico a los pods.You can also use network policies, as discussed in the next section, to automatically apply traffic filter rules to pods.

Directivas de redNetwork policies

De forma predeterminada, todos los pods de un clúster de AKS pueden enviar y recibir tráfico sin limitaciones.By default, all pods in an AKS cluster can send and receive traffic without limitations. Para mejorar la seguridad, puede definir reglas que controlan el flujo de tráfico.For improved security, you may want to define rules that control the flow of traffic. Las aplicaciones de back-end solo se suelen exponer en los servicios de front-end, o los componentes de base de datos solo son accesibles para las capas de aplicación que se conectan a ellos.Backend applications are often only exposed to required frontend services, or database components are only accessible to the application tiers that connect to them.

La directiva de red es una característica de Kubernetes disponible en AKS que permite controlar el flujo de tráfico entre pods.Network policy is a Kubernetes feature available in AKS that lets you control the traffic flow between pods. Puede permitir o denegar el tráfico según la configuración como etiquetas asignadas, espacio de nombres o puerto de tráfico.You can choose to allow or deny traffic based on settings such as assigned labels, namespace, or traffic port. Los grupos de seguridad de red se usan más para los nodos de AKS y no para los pods.Network security groups are more for the AKS nodes, not pods. El uso de directivas de red proporciona una manera más adecuada y nativa en la nube para controlar el flujo de tráfico.The use of network policies is a more suitable, cloud-native way to control the flow of traffic. Como los pods se crean dinámicamente en un clúster de AKS, se pueden aplicar automáticamente las directivas de red necesarias.As pods are dynamically created in an AKS cluster, the required network policies can be automatically applied.

Para más información, consulte Protección del tráfico entre pods mediante directivas de red en Azure Kubernetes Service (AKS).For more information, see Secure traffic between pods using network policies in Azure Kubernetes Service (AKS).

Pasos siguientesNext steps

Para empezar a trabajar con las redes de AKS, cree y configure un clúster de AKS con sus propios intervalos de direcciones IP mediante kubenet o CNI de Azure.To get started with AKS networking, create and configure an AKS cluster with your own IP address ranges using kubenet or Azure CNI.

Para los procedimientos recomendados asociados, consulte Procedimientos recomendados con la conectividad de red y la seguridad en Azure Kubernetes Service (AKS).For associated best practices, see Best practices for network connectivity and security in AKS.

Para obtener más información sobre los conceptos básicos de Kubernetes y AKS, consulte los artículos siguientes:For additional information on core Kubernetes and AKS concepts, see the following articles: