Conceitos de rede para aplicativos no Serviço de Kubernetes do Azure (AKS)Network concepts for applications in Azure Kubernetes Service (AKS)

Em uma abordagem de micros serviços baseada em contêiner para o desenvolvimento de aplicativos, os componentes de aplicativo devem trabalhar juntos para processar suas tarefas.In a container-based microservices approach to application development, application components must work together to process their tasks. O Kubernetes fornece vários recursos que permitem a comunicação desse aplicativo.Kubernetes provides various resources that enable this application communication. Você pode se conectar e expor aplicativos internamente ou externamente.You can connect to and expose applications internally or externally. Para criar aplicativos altamente disponíveis, você pode balancear a carga de seus aplicativos.To build highly available applications, you can load balance your applications. Aplicativos mais complexos podem exigir configuração de tráfego de ingresso para terminação SSL / TLS ou roteamento de múltiplos componentes.More complex applications may require configuration of ingress traffic for SSL/TLS termination or routing of multiple components. Por motivos de segurança, você também pode precisar restringir o fluxo de tráfego de rede em ou entre pods e nós.For security reasons, you may also need to restrict the flow of network traffic into or between pods and nodes.

Este artigo apresenta os principais conceitos que fornecem rede para seus aplicativos no AKS:This article introduces the core concepts that provide networking to your applications in AKS:

Noções básicas do KubernetesKubernetes basics

Para permitir o acesso aos seus aplicativos, ou para os componentes do aplicativo se comunicarem uns com os outros, o Kubernetes fornece uma camada de abstração para a rede virtual.To allow access to your applications, or for application components to communicate with each other, Kubernetes provides an abstraction layer to virtual networking. Os nós do Kubernetes estão conectados a uma rede virtual e podem fornecer conectividade de entrada e saída para pods.Kubernetes nodes are connected to a virtual network, and can provide inbound and outbound connectivity for pods. O componente kube-proxy é executado em cada nó para fornecer esses recursos de rede.The kube-proxy component runs on each node to provide these network features.

No Kubernetes, os Serviços agrupam logicamente os pods para permitir o acesso direto por meio de um endereço IP ou nome DNS e em uma porta específica.In Kubernetes, Services logically group pods to allow for direct access via an IP address or DNS name and on a specific port. Você também pode distribuir tráfego usando um balanceador de carga.You can also distribute traffic using a load balancer. Um roteamento mais complexo de tráfego de aplicativos também pode ser obtido com os Controladores de Ingressos.More complex routing of application traffic can also be achieved with Ingress Controllers. A segurança e a filtragem do tráfego de rede para pods é possível com as políticas de rede do Kubernetes.Security and filtering of the network traffic for pods is possible with Kubernetes network policies.

A plataforma do Azure também ajuda a simplificar a rede virtual para clusters do AKS.The Azure platform also helps to simplify virtual networking for AKS clusters. Quando você cria um balanceador de carga do Kubernetes, o recurso do balanceador de carga do Azure subjacente é criado e configurado.When you create a Kubernetes load balancer, the underlying Azure load balancer resource is created and configured. À medida que você abre portas de rede para pods, as regras correspondentes do grupo de segurança de rede do Azure são configuradas.As you open network ports to pods, the corresponding Azure network security group rules are configured. Para o roteamento de aplicativos HTTP, o Azure também pode configurar DNS externo à medida que novas rotas de ingresso são configuradas.For HTTP application routing, Azure can also configure external DNS as new ingress routes are configured.

ServiçosServices

Para simplificar a configuração de rede para cargas de trabalho de aplicativos, o Kubernetes usa Serviços para agrupar logicamente um conjunto de pods e fornecer conectividade de rede.To simplify the network configuration for application workloads, Kubernetes uses Services to logically group a set of pods together and provide network connectivity. Os seguintes tipos de serviço estão disponíveis:The following Service types are available:

  • IP do cluster - Cria um endereço IP interno para uso no cluster do AKS.Cluster IP - Creates an internal IP address for use within the AKS cluster. Bom para aplicativos internos que suportam outras cargas de trabalho no cluster.Good for internal-only applications that support other workloads within the cluster.

    Diagrama mostrando o fluxo de tráfego IP do cluster em um cluster AKS

  • NodePort - Cria um mapeamento de porta no nó subjacente que permite que o aplicativo seja acessado diretamente com o endereço IP e a porta do nó.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 mostrando o fluxo de tráfego do NodePort em um cluster AKS

  • LoadBalancer - Cria um recurso do balanceador de carga do Azure, configura um endereço IP externo e conecta os pods solicitados ao pool de back-ends do balanceador 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 o tráfego de clientes alcance o aplicativo, as regras de balanceamento de carga são criadas nas portas desejadas.To allow customers traffic to reach the application, load balancing rules are created on the desired ports.

    Diagrama mostrando o fluxo de tráfego do Balanceador de Carga em um cluster AKS

    Para controle adicional e roteamento do tráfego de entrada, você pode usar um controlador de ingresso.For additional control and routing of the inbound traffic, you may instead use an Ingress controller.

  • ExternalName - Cria uma entrada de DNS específica para facilitar o acesso a aplicativos.ExternalName - Creates a specific DNS entry for easier application access.

O endereço IP para balanceadores de carga e serviços pode ser atribuído dinamicamente ou você pode especificar um endereço IP estático existente para uso.The IP address for load balancers and services can be dynamically assigned, or you can specify an existing static IP address to use. Endereços IP estáticos internos e externos podem ser atribuídos.Both internal and external static IP addresses can be assigned. Esse endereço IP estático existente é geralmente vinculado a uma entrada DNS.This existing static IP address is often tied to a DNS entry.

Ambos interno e externo balanceadores de carga podem ser criados.Both internal and external load balancers can be created. Os balanceadores de carga internos só recebem um endereço IP privado, portanto, eles não podem ser acessados pela Internet.Internal load balancers are only assigned a private IP address, so they can't be accessed from the Internet.

Redes virtuais do AzureAzure virtual networks

No AKS, você pode implantar um cluster que usa um dos dois modelos de rede a seguir:In AKS, you can deploy a cluster that uses one of the following two network models:

  • Rede Kubenet – os recursos de rede normalmente são criados e configurados à medida que o cluster AKS é implantado.Kubenet networking - The network resources are typically created and configured as the AKS cluster is deployed.
  • Rede da CNI (Interface de rede de contêiner) do Azure – o cluster AKS é conectado a recursos e configurações de rede virtual existentes.Azure Container Networking Interface (CNI) networking - The AKS cluster is connected to existing virtual network resources and configurations.

Rede Kubenet (básica)Kubenet (basic) networking

A opção de rede kubenet é a configuração padrão para a criação do cluster AKS.The kubenet networking option is the default configuration for AKS cluster creation. Com o kubenet, os nós obtêm um endereço IP de uma sub-rede da rede virtual do Azure.With kubenet, nodes get an IP address from the Azure virtual network subnet. Os pods recebem um endereço IP de um espaço de endereço logicamente diferente da sub-rede da rede virtual do Azure dos nós.Pods receive an IP address from a logically different address space to the Azure virtual network subnet of the nodes. A NAT (conversão de endereços de rede), então, é configurada para que os pods possam acessar recursos na rede virtual do Azure.Network address translation (NAT) is then configured so that the pods can reach resources on the Azure virtual network. O endereço IP de origem do tráfego é configurado via NAT como o endereço IP primário do nó.The source IP address of the traffic is NAT'd to the node's primary IP address.

Os nós usam o plug-in kubenet kubernetes.Nodes use the kubenet Kubernetes plugin. Você pode permitir que a plataforma do Azure crie e configure as redes virtuais para você ou pode optar por implantar o cluster do AKS em uma sub-rede da rede 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. Novamente, somente os nós recebem um endereço IP roteável e o pods usam NAT para se comunicar com outros recursos fora do 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. Essa abordagem reduz muito o número de endereços IP que você precisa reservar no espaço de rede para uso dos pods.This approach greatly reduces the number of IP addresses that you need to reserve in your network space for pods to use.

Para obter mais informações, consulte Configurar a rede kubenet para um cluster AKs.For more information, see Configure kubenet networking for an AKS cluster.

Rede da CNI do Azure (avançada)Azure CNI (advanced) networking

Com a CNI do Azure, cada pod obtém um endereço IP da sub-rede e pode ser acessado diretamente.With Azure CNI, every pod gets an IP address from the subnet and can be accessed directly. Esses endereços IP precisam ser exclusivos no espaço de rede e ser planejados com antecedência.These IP addresses must be unique across your network space, and must be planned in advance. Cada nó tem um parâmetro de configuração para o número máximo de pods aos quais ele dá suporte.Each node has a configuration parameter for the maximum number of pods that it supports. O número equivalente de endereços IP por nó é então reservado com antecedência para esse nó.The equivalent number of IP addresses per node are then reserved up front for that node. Essa abordagem requer mais planejamento, como pode levar ao esgotamento de endereço IP ou à necessidade de recriar clusters em uma sub-rede maior conforme as demandas do seu aplicativo crescem.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.

Os nós usam o plug-in kubernetes do CNI (interface de rede de contêiner do Azure) .Nodes use the Azure Container Networking Interface (CNI) Kubernetes plugin.

Diagrama que mostra dois nós com pontes conectando cada um a uma única VNet do Azure

Para obter mais informações, consulte Configurar o Azure CNI para um cluster AKs.For more information, see Configure Azure CNI for an AKS cluster.

Comparar modelos de redeCompare network models

O kubenet e o Azure CNI fornecem conectividade de rede para seus clusters AKS.Both kubenet and Azure CNI provide network connectivity for your AKS clusters. No entanto, há vantagens e desvantagens para cada uma delas.However, there are advantages and disadvantages to each. Em um alto nível, as seguintes considerações se aplicam:At a high level, the following considerations apply:

  • kubenetkubenet
    • Conserva o espaço de endereço IP.Conserves IP address space.
    • Usa o balanceador de carga interno ou externo do kubernetes para alcançar pods fora do cluster.Uses Kubernetes internal or external load balancer to reach pods from outside of the cluster.
    • Você deve gerenciar e manter manualmente as rotas definidas pelo usuário (UDRs).You must manually manage and maintain user-defined routes (UDRs).
    • Máximo de 400 nós por cluster.Maximum of 400 nodes per cluster.
  • CNI do AzureAzure CNI
    • Os pods obtêm conectividade total de rede virtual e podem ser acessados diretamente de fora do cluster.Pods get full virtual network connectivity and can be directly reached from outside of the cluster.
    • Requer mais espaço de endereço IP.Requires more IP address space.

Existem as seguintes diferenças de comportamento entre kubenet e CNI do Azure:The following behavior differences exist between kubenet and Azure CNI:

FuncionalidadeCapability KubenetKubenet Azure CNIAzure CNI
Implantar cluster em uma rede virtual nova ou existenteDeploy cluster in existing or new virtual network Com suporte-UDRs aplicado manualmenteSupported - UDRs manually applied SuportadoSupported
Conectividade de pod de PodPod-pod connectivity SuportadoSupported SuportadoSupported
Pod-conectividade da VM; VM na mesma rede virtualPod-VM connectivity; VM in the same virtual network Funciona quando iniciado pelo PodWorks when initiated by pod Funciona de ambas as maneirasWorks both ways
Pod-conectividade da VM; VM na rede virtual emparelhadaPod-VM connectivity; VM in peered virtual network Funciona quando iniciado pelo PodWorks when initiated by pod Funciona de ambas as maneirasWorks both ways
Acesso local usando VPN ou rota expressaOn-premises access using VPN or Express Route Funciona quando iniciado pelo PodWorks when initiated by pod Funciona de ambas as maneirasWorks both ways
Acesso a recursos protegidos por pontos de extremidade de serviçoAccess to resources secured by service endpoints SuportadoSupported SuportadoSupported
Expor serviços Kubernetess usando um serviço de balanceador de carga, um gateway de aplicativo ou um controlador de entradaExpose Kubernetes services using a load balancer service, App Gateway, or ingress controller SuportadoSupported SuportadoSupported
Zonas privadas e DNS do Azure padrãoDefault Azure DNS and Private Zones SuportadoSupported SuportadoSupported

Escopo de suporte entre modelos de redeSupport scope between network models

Independentemente do modelo de rede que você usa, tanto o kubenet quanto o CNI do Azure podem ser implantados de uma das seguintes maneiras:Regardless of the network model you use, both kubenet and Azure CNI can be deployed in one of the following ways:

  • A plataforma Azure pode criar e configurar automaticamente os recursos de rede virtual quando você cria um cluster AKS.The Azure platform can automatically create and configure the virtual network resources when you create an AKS cluster.
  • Você pode criar e configurar manualmente os recursos da rede virtual e anexá-los a esses recursos ao criar o cluster AKS.You can manually create and configure the virtual network resources and attach to those resources when you create your AKS cluster.

Embora haja suporte para recursos como pontos de extremidade de serviço ou UDRs com kubenet e CNI do Azure, as políticas de suporte para AKs definem quais alterações você pode fazer.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 exemplo:For example:

  • Se você criar manualmente os recursos de rede virtual para um cluster AKS, terá suporte ao configurar seus próprios pontos de extremidade de serviço ou UDRs.If you manually create the virtual network resources for an AKS cluster, you are supported when configuring your own UDRs or service endpoints.
  • Se a plataforma Azure cria automaticamente os recursos de rede virtual para o cluster AKS, não há suporte para alterar manualmente os recursos gerenciados por AKS para configurar seus próprios pontos de extremidade UDRs ou de serviço.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.

Controladores de entradaIngress controllers

Quando você cria um serviço do tipo LoadBalancer, um recurso de balanceador de carga subjacente do Azure é criado.When you create a LoadBalancer type Service, an underlying Azure load balancer resource is created. O balanceador de carga é configurado para distribuir o tráfego para os pods em seu Serviço em uma determinada porta.The load balancer is configured to distribute traffic to the pods in your Service on a given port. O LoadBalancer só funciona na camada 4 - o Serviço não está ciente dos aplicativos reais e não pode fazer nenhuma outra consideração de roteamento.The LoadBalancer only works at layer 4 - the Service is unaware of the actual applications, and can't make any additional routing considerations.

Os controladores ingressos funcionam na camada 7 e podem usar regras mais inteligentes para distribuir o tráfego de aplicativos.Ingress controllers work at layer 7, and can use more intelligent rules to distribute application traffic. Um uso comum de um controlador de ingresso é rotear o tráfego HTTP para diferentes aplicativos com base na URL de entrada.A common use of an Ingress controller is to route HTTP traffic to different applications based on the inbound URL.

Diagrama mostrando o fluxo de tráfego de ingresso em um cluster AKS

No AKS, você pode criar um recurso do Ingress usando algo como o NGINX ou usar o recurso de roteamento do aplicativo AKS HTTP.In AKS, you can create an Ingress resource using something like NGINX, or use the AKS HTTP application routing feature. Quando você habilita o roteamento de aplicativo HTTP para um cluster AKS, a plataforma Azure cria o controlador Ingress e um controlador External-DNS.When you enable HTTP application routing for an AKS cluster, the Azure platform creates the Ingress controller and an External-DNS controller. À medida que novos recursos do Ingress são criados no Kubernetes, os registros necessários do DNS A são criados em uma zona DNS específica do cluster.As new Ingress resources are created in Kubernetes, the required DNS A records are created in a cluster-specific DNS zone. Para obter mais informações, consulte implantar o roteamento de aplicativos http.For more information, see deploy HTTP application routing.

Outro recurso comum do Ingress é o encerramento de SSL / TLS.Another common feature of Ingress is SSL/TLS termination. Em grandes aplicativos da Web acessados via HTTPS, a terminação do TLS pode ser manipulada pelo recurso Ingress, em vez de pelo próprio aplicativo.On large web applications accessed via HTTPS, the TLS termination can be handled by the Ingress resource rather than within the application itself. Para fornecer geração e configuração automática de certificação TLS, você pode configurar o recurso Ingress para usar provedores como o 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 obter mais informações sobre como configurar um controlador de entrada NGINX com vamos criptografar, consulte entrada e TLS.For more information on configuring an NGINX Ingress controller with Let's Encrypt, see Ingress and TLS.

Você também pode configurar o controlador de entrada para preservar o IP de origem do cliente em solicitações para contêineres no cluster AKS.You can also configure your ingress controller to preserve the client source IP on requests to containers in your AKS cluster. Quando a solicitação de um cliente é roteada para um contêiner em seu cluster do AKS por meio do controlador de entrada, o IP de origem dessa solicitação não estará disponível para o contêiner 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 will not be available to the target container. Quando você habilita a preservação de IP de origem do cliente, o IP de origem do cliente está disponível no cabeçalho da solicitação em X-forwardd-for.When you enable client source IP preservation, the source IP for the client is available in the request header under X-Forwarded-For. Se você estiver usando a preservação de IP de origem do cliente em seu controlador de entrada, não poderá usar passagem SSL.If you are using client source IP preservation on your ingress controller, you cannot use SSL pass-through. A preservação de IP de origem do cliente e a passagem SSL podem ser usadas com outros serviços, como o tipo de balanceador de carga .Client source IP preservation and SSL pass-through can be used with other services, such as the LoadBalancer type.

Grupos de segurança de redeNetwork security groups

Um grupo de segurança de rede filtra o tráfego para VMs, como os nós do AKS.A network security group filters traffic for VMs, such as the AKS nodes. À medida que você cria Serviços, como um LoadBalancer, a plataforma do Azure configura automaticamente as regras do grupo de segurança de rede necessárias.As you create Services, such as a LoadBalancer, the Azure platform automatically configures any network security group rules that are needed. Não configure manualmente as regras do grupo de segurança de rede para filtrar o tráfego de pods em um cluster do AKS.Don't manually configure network security group rules to filter traffic for pods in an AKS cluster. Defina as portas e o encaminhamento necessários como parte dos manifestos do Kubernetes Service e permita que a plataforma do Azure crie ou atualize as regras apropriadas.Define any required ports and forwarding as part of your Kubernetes Service manifests, and let the Azure platform create or update the appropriate rules. Você também pode usar as políticas de rede, conforme discutido na próxima seção, para aplicar automaticamente as regras de filtro de tráfego a pods.You can also use network policies, as discussed in the next section, to automatically apply traffic filter rules to pods.

Políticas de redeNetwork policies

Por padrão, todos os pods em um cluster AKS podem enviar e receber tráfego sem limitações.By default, all pods in an AKS cluster can send and receive traffic without limitations. Para melhorar a segurança, você pode definir regras que controlam o fluxo de tráfego.For improved security, you may want to define rules that control the flow of traffic. Os aplicativos de back-end geralmente só são expostos aos serviços de front-end necessários ou os componentes de banco de dados são acessíveis somente para as camadas de aplicativos que se conectam a eles.Backend applications are often only exposed to required frontend services, or database components are only accessible to the application tiers that connect to them.

A política de rede é um recurso kubernetes disponível no AKS que permite controlar o fluxo de tráfego entre pods.Network policy is a Kubernetes feature available in AKS that lets you control the traffic flow between pods. Você pode optar por permitir ou negar o tráfego com base em configurações, como rótulos atribuídos, namespace ou porta de tráfego.You can choose to allow or deny traffic based on settings such as assigned labels, namespace, or traffic port. Os grupos de segurança de rede são mais para os nós do AKS, e não para os pods.Network security groups are more for the AKS nodes, not pods. O uso de políticas de rede é uma maneira mais adequada e nativa da nuvem de controlar o fluxo de tráfego.The use of network policies is a more suitable, cloud-native way to control the flow of traffic. Como os pods são criados dinamicamente em um cluster AKS, as políticas de rede necessárias podem ser aplicadas automaticamente.As pods are dynamically created in an AKS cluster, the required network policies can be automatically applied.

Para obter mais informações, consulte proteger o tráfego entre pods usando as políticas de rede no serviço de kubernetes do Azure (AKs).For more information, see Secure traffic between pods using network policies in Azure Kubernetes Service (AKS).

Próximas etapasNext steps

Para começar a usar a rede AKS, crie e configure um cluster AKS com seus próprios intervalos de endereços IP usando kubenet ou CNI do 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 obter as práticas recomendadas associadas, consulte práticas recomendadas para conectividade de rede e segurança no AKs.For associated best practices, see Best practices for network connectivity and security in AKS.

Para obter informações adicionais sobre os principais conceitos do Kubernetes e do AKS, consulte os seguintes artigos:For additional information on core Kubernetes and AKS concepts, see the following articles: