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

En un enfoque de microservicios basado en contenedores para desarrollar aplicaciones, los componentes de la aplicación funcionan juntos para procesar sus tareas.In a container-based, microservices approach to application development, application components work together to process their tasks. Kubernetes proporciona varios recursos que permiten esta cooperación:Kubernetes provides various resources enabling this cooperation:

  • Puede conectarse a aplicaciones y exponer estas de forma interna o externa.You can connect to and expose applications internally or externally.
  • Puede equilibrar la carga de sus aplicaciones para compilar aplicaciones de alta disponibilidad.You can build highly available applications by load balancing your applications.
  • En el caso de las aplicaciones más complejas, puede configurar el tráfico de entrada para la terminación SSL/TLS o el enrutamiento de varios componentes.For your more complex applications, you can configure ingress traffic for SSL/TLS termination or routing of multiple components.
  • Por motivos de seguridad, puede restringir el flujo de tráfico de red entre pods y nodos.For security reasons, you can 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 entre los componentes de las aplicaciones, Kubernetes proporciona una capa de abstracción para la red virtual.To allow access to your applications or between application components, Kubernetes provides an abstraction layer to virtual networking. Los nodos de Kubernetes se conectan a una red virtual para proporcionar conectividad de entrada y salida para los pods.Kubernetes nodes connect to a virtual network, providing 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:In Kubernetes:

  • los servicios agrupan lógicamente los pods para permitir el acceso directo a un puerto específico mediante una dirección IP o nombre DNS.Services logically group pods to allow for direct access on a specific port via an IP address or DNS name.
  • Puede distribuir el tráfico mediante un equilibrador de carga.You can 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 simplifica las redes virtuales de los clústeres de AKS.The Azure platform also simplifies virtual networking for AKS clusters. Cuando se crea un equilibrador de carga de Kubernetes, también se crea y configura el recurso de equilibrador de carga de Azure subyacente.When you create a Kubernetes load balancer, you also create and configure the underlying Azure load balancer resource. 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:

  • IP del clústerCluster IP

    Crea una dirección IP interna para usarse dentro del clúster de AKS.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

  • NodePortNodePort

    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.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

  • LoadBalancerLoadBalancer

    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.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 un control y enrutamiento adicionales del tráfico entrante, puede usar en su lugar un controlador de entrada.For extra control and routing of the inbound traffic, you may instead use an Ingress controller.

  • ExternalNameExternalName

    Crea una entrada DNS específica para facilitar el acceso a la aplicación.Creates a specific DNS entry for easier application access.

La dirección IP tanto de los equilibradores de carga como de los servicios se puede asignar dinámicamente, o puede especificar una dirección IP estática existente.Either the load balancers and services IP address can be dynamically assigned, or you can specify an existing static IP address. Puede asignar direcciones IP estáticas internas y externas.You can assign both internal and external static IP addresses. A menudo, las direcciones IP estáticas existentes están asociadas a una entrada DNS.Existing static IP addresses are often tied to a DNS entry.

Puede crear equilibradores de carga internos y externos.You can create both internal and external load balancers. 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:

  • Redes de KubenetKubenet networking

    Los recursos de red normalmente se crean y configuran cuando se implementa el clúster de AKS.The network resources are typically created and configured as the AKS cluster is deployed.

  • Redes de Azure Container Networking Interface (CNI)Azure Container Networking Interface (CNI) networking

    el clúster de AKS está conectado a configuraciones y recursos de red virtual existentes.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:With kubenet:

  1. los nodos obtienen una dirección IP de una subred de la red virtual de Azure.Nodes receive an IP address from the Azure virtual network subnet.
  2. 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 than the nodes' Azure virtual network subnet.
  3. 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.
  4. La dirección IP de origen del tráfico se traduce a la dirección IP principal del nodo.The source IP address of the traffic is translated to the node's primary IP address.

Los nodos usan el complemento kubenet de Kubernetes.Nodes use the kubenet Kubernetes plugin. Puede:You can:

  • Deje que la plataforma Azure cree y configure las redes virtuales automáticamente, o bienLet the Azure platform create and configure the virtual networks for you, or
  • Opte por implementar el clúster de AKS en una subred de red virtual existente.Choose to deploy your AKS cluster into an existing virtual network subnet.

Recuerde que solo los nodos reciben una dirección IP enrutable.Remember, only the nodes receive a routable IP address. Los pods usan NAT para comunicarse con otros recursos fuera del clúster de AKS.The pods use NAT to communicate with other resources outside the AKS cluster. Este enfoque reduce el número de direcciones IP que se deben reservar en el espacio de red para su uso por parte de los pods.This approach reduces the number of IP addresses 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 planearse de antemano y deben ser únicas en el espacio de red.These IP addresses must be planned in advance and unique across your network space. 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 it supports. Luego, el número equivalente de direcciones IP por nodo se reserva por adelantado.The equivalent number of IP addresses per node are then reserved up front. Sin una planeación, este enfoque puede llevar al agotamiento de las direcciones IP o a la necesidad de volver a generar los clústeres en una subred de mayor tamaño, a medida que crecen las exigencias de la aplicación.Without planning, this approach can 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 CNI de Kubernetes.Nodes use the Azure 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.
    • Administre y mantenga las rutas definidas por el usuario (UDR) de manera manual.You 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 are 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. De manera predeterminada, CoreDNS está configurado para reenviar dominios desconocidos a la funcionalidad DNS de la red virtual de Azure en la que se ha implementado el clúster de AKS.CoreDNS by default is configured to forward unknown domains 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

Sin importar qué modelo de red use, kubenet y Azure CNI pueden implementarse de una de las siguientes maneras:Whatever 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 puede 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, you can't 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, también se crea un recurso subyacente de equilibrador de carga de Azure.When you create a LoadBalancer-type Service, you also create an underlying Azure load balancer resource. 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.The LoadBalancer only works at layer 4. En la capa 4, el servicio no conoce las aplicaciones reales y no puede realizar ninguna otra consideración de enrutamiento.At layer 4, the Service is unaware of the actual applications, and can't make any more 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. Normalmente un controlador de entrada enruta el tráfico HTTP a diferentes aplicaciones según la URL de entrada.Ingress controllers typically 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

Creación de un recurso de entradaCreate an ingress resource

En AKS, puede crear un recurso de entrada con NGINX, una herramienta similar o la característica de enrutamiento de la aplicación HTTP de AKS.In AKS, you can create an Ingress resource using NGINX, a similar tool, or 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 Implementación del enrutamiento de aplicaciones HTTP.For more information, see Deploy HTTP application routing.

Controlador de entrada de Application Gateway (AGIC)Application Gateway Ingress Controller (AGIC)

Con el complemento del controlador de entrada de Application Gateway (AGIC) los clientes de AKS aprovechan la tecnología nativa del equilibrador de carga de nivel 7 de Application Gateway para exponer el software en la nube a Internet.With the Application Gateway Ingress Controller (AGIC) add-on, AKS customers leverage Azure's native Application Gateway level 7 load-balancer to expose cloud software to the Internet. AGIC supervisa el clúster de Kubernetes de host y actualiza continuamente una instancia de Application Gateway, de modo que los servicios seleccionados se exponen a Internet.AGIC monitors the host Kubernetes cluster and continuously updates an Application Gateway, exposing selected services to the Internet.

Para más información acerca del 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?.

Terminación SSL/TLSSSL/TLS termination

La terminación SSL/TLS es otra característica común de la entrada.SSL/TLS termination is another common feature of Ingress. En aplicaciones web de gran tamaño a las que se accede a través de HTTPS, el recurso de entrada administra la terminación TLS, en lugar de en la propia aplicación.On large web applications accessed via HTTPS, the Ingress resource handles the TLS termination 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.

Conservación de la dirección IP de origen de clienteClient source IP preservation

Configure 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.Configure your ingress controller to preserve the client source IP on requests to containers in your AKS cluster. Cuando el controlador de entrada enruta la solicitud de un cliente a un contenedor del clúster de AKS, la dirección IP de origen de la solicitud no está disponible para el contenedor de destino.When your ingress controller routes a client's request to a container in your AKS cluster, the original source IP of that request is unavailable 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 los nodos de AKS.A network security group filters traffic for VMs like the AKS nodes. Al crear los servicios, como LoadBalancer, la plataforma Azure configura automáticamente las reglas de grupo de seguridad de red necesarias.As you create Services, such as a LoadBalancer, the Azure platform automatically configures any necessary network security group rules.

No necesita configurar manualmente las reglas del grupo de seguridad de red para filtrar el tráfico de los pods en un clúster de AKS.You don't need to manually configure network security group rules to filter traffic for pods in an AKS cluster. Simplemente defina los puertos necesarios y el reenvío como parte de los manifiestos de Kubernetes Service.Simply define any required ports and forwarding as part of your Kubernetes Service manifests. Permita que la plataforma Azure cree o actualice las reglas correspondientes.Let the Azure platform create or update the appropriate rules.

También puede usar directivas de red para aplicar automáticamente las reglas de filtro de tráfico a los pods.You can also use network policies 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, defina reglas que controlen el flujo de tráfico, como:For improved security, define rules that control the flow of traffic, like:

  • Las aplicaciones back-end solo se exponen a los servicios de front-end necesarios.Backend applications are only exposed to required frontend services.
  • Los componentes de base de datos solo son accesibles para las capas de aplicación que se conectan a ellos.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. Según la configuración se permite o deniega el tráfico al pod, como, por ejemplo, etiquetas asignadas, espacio de nombres o puerto de tráfico.You allow or deny traffic to the pod based on settings such as assigned labels, namespace, or traffic port. Aunque los grupos de seguridad de red son mejores para los nodos de AKS, las directivas de red son una manera más adecuada y nativa de la nube para controlar el flujo de tráfico de los pods.While network security groups are better for AKS nodes, network policies are a more suited, cloud-native way to control the flow of traffic for pods. 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, 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 more information on core Kubernetes and AKS concepts, see the following articles: