Perguntas frequentes sobre o Serviço de Kubernetes do Azure (AKS)Frequently asked questions about Azure Kubernetes Service (AKS)

Este artigo aborda as perguntas frequentes sobre o AKS (Serviço de Kubernetes do Azure).This article addresses frequent questions about Azure Kubernetes Service (AKS).

Quais regiões do Azure atualmente fornecem o AKS?Which Azure regions currently provide AKS?

Para obter uma lista completa das regiões disponíveis, confira Regiões e disponibilidade do AKS.For a complete list of available regions, see AKS regions and availability.

Posso distribuir um cluster do AKS entre regiões?Can I spread an AKS cluster across regions?

Não.No. Os clusters AKS são recursos regionais e não podem abranger regiões.AKS clusters are regional resources and can't span regions. Confira Melhores práticas de continuidade dos negócios e recuperação de desastres para obter diretrizes sobre como criar uma arquitetura que inclui várias regiões.See best practices for business continuity and disaster recovery for guidance on how to create an architecture that includes multiple regions.

Posso distribuir um cluster do AKS entre zonas de disponibilidade?Can I spread an AKS cluster across availability zones?

Sim.Yes. Você pode implantar um cluster do AKS em uma ou mais zonas de disponibilidade nas regiões que dão suporte a elas.You can deploy an AKS cluster across one or more availability zones in regions that support them.

Posso limitar quem tem acesso ao servidor de API do Kubernetes?Can I limit who has access to the Kubernetes API server?

Sim.Yes. Há duas opções para limitar o acesso ao servidor de API:There are two options for limiting access to the API server:

  • Usar intervalos de IP autorizados do servidor de API se você quiser manter um ponto de extremidade público para o servidor de API, mas quiser restringir o acesso a um conjunto de intervalos de IP confiáveis.Use API Server Authorized IP Ranges if you want to maintain a public endpoint for the API server but restrict access to a set of trusted IP ranges.
  • Usar um cluster particular se quiser limitar o servidor de API para ser acessível somente na sua rede virtual.Use a private cluster if you want to limit the API server to only be accessible from within your virtual network.

Posso ter diferentes tamanhos de VM em um só cluster?Can I have different VM sizes in a single cluster?

Sim, você pode usar diferentes tamanhos de máquina virtual no seu cluster do AKS criando vários pools de nós.Yes, you can use different virtual machine sizes in your AKS cluster by creating multiple node pools.

As atualizações de segurança são aplicadas aos nós do agente do AKS?Are security updates applied to AKS agent nodes?

O Azure aplica automaticamente os patches de segurança aos nós do Linux no cluster de acordo com uma agenda noturna.Azure automatically applies security patches to the Linux nodes in your cluster on a nightly schedule. No entanto, você é responsável por garantir que esses nós do Linux sejam reinicializados conforme necessário.However, you're responsible for ensuring that those Linux nodes are rebooted as required. Você tem várias opções para reinicializar os nós:You have several options for rebooting nodes:

  • Manualmente, por meio do portal do Azure ou da CLI do Azure.Manually, through the Azure portal or the Azure CLI.
  • Atualizando o cluster AKS.By upgrading your AKS cluster. O cluster atualiza automaticamente nós de cordon e frenagem e coloca um novo nó online com a última imagem do Ubuntu e uma nova versão de patch ou uma versão secundária do Kubernetes.The cluster upgrades cordon and drain nodes automatically and then bring a new node online with the latest Ubuntu image and a new patch version or a minor Kubernetes version. Para obter mais informações, confira Atualizar um cluster do AKS.For more information, see Upgrade an AKS cluster.
  • Usando a atualização de imagem de nó.By using node image upgrade.

Nós do Windows ServerWindows Server nodes

Para os nós do Windows Server, o Windows Update não executa automaticamente e aplica as atualizações mais recentes.For Windows Server nodes, Windows Update does not automatically run and apply the latest updates. Regularmente, de acordo com o ciclo de lançamento do Windows Update e o próprio processo de validação, você deverá executar uma atualização no cluster e nos pools de nó do Windows Server no cluster do AKS.On a regular schedule around the Windows Update release cycle and your own validation process, you should perform an upgrade on the cluster and the Windows Server node pool(s) in your AKS cluster. Esse processo de atualização cria nós que executam a imagem e os patches mais recentes do Windows Server e, em seguida, remove os nós mais antigos.This upgrade process creates nodes that run the latest Windows Server image and patches, then removes the older nodes. Para obter mais informações sobre esse processo, confira Atualizar um pool de nós no AKS.For more information on this process, see Upgrade a node pool in AKS.

Por que são criados dois grupos de recursos com o AKS?Why are two resource groups created with AKS?

O AKS baseia-se em vários recursos da infraestrutura do Azure, incluindo conjuntos de dimensionamento de máquinas virtuais, redes virtuais e discos gerenciados.AKS builds upon a number of Azure infrastructure resources, including virtual machine scale sets, virtual networks, and managed disks. Isso permite que você aproveite muitas das funcionalidades básicas da plataforma Azure no ambiente do Kubernetes gerenciado fornecido pelo AKS.This enables you to leverage many of the core capabilities of the Azure platform within the managed Kubernetes environment provided by AKS. Por exemplo, a maioria dos tipos de máquinas virtuais do Azure pode ser usada diretamente com o AKS e as Reservas do Azure podem ser usadas para receber descontos nesses recursos automaticamente.For example, most Azure virtual machine types can be used directly with AKS and Azure Reservations can be used to receive discounts on those resources automatically.

Para habilitar essa arquitetura, cada implantação do AKS abrange dois grupos de recursos:To enable this architecture, each AKS deployment spans two resource groups:

  1. Você cria o primeiro grupo de recursos.You create the first resource group. Esse grupo contém apenas o recurso do Serviço de Kubernetes.This group contains only the Kubernetes service resource. O provedor de recursos do AKS cria automaticamente o segundo grupo de recursos durante a implantação.The AKS resource provider automatically creates the second resource group during deployment. Um exemplo do segundo grupo de recursos é MC_myResourceGroup_myAKSCluster_eastus.An example of the second resource group is MC_myResourceGroup_myAKSCluster_eastus. Para obter informações sobre como especificar o nome desse segundo grupo de recursos, confira a próxima seção.For information on how to specify the name of this second resource group, see the next section.
  2. O segundo grupo de recursos, conhecido como o grupo de recursos do nó, contém todos os recursos de infraestrutura associados ao cluster.The second resource group, known as the node resource group, contains all of the infrastructure resources associated with the cluster. Esses recursos incluem as máquinas virtuais do nó do Kubernetes, rede virtual e armazenamento.These resources include the Kubernetes node VMs, virtual networking, and storage. Por padrão, o grupo de recursos do nó tem um nome como MC_myResourceGroup_myAKSCluster_eastus.By default, the node resource group has a name like MC_myResourceGroup_myAKSCluster_eastus. O AKS exclui automaticamente o recurso de nó sempre que o cluster é excluído, portanto, ele só deve ser usado para recursos que compartilham o ciclo de vida do cluster.AKS automatically deletes the node resource whenever the cluster is deleted, so it should only be used for resources that share the cluster's lifecycle.

Posso fornecer um nome personalizado para o grupo de recursos do nó no AKS?Can I provide my own name for the AKS node resource group?

Sim.Yes. Por padrão, o AKS nomeará o grupo de recursos do nó MC_resourcegroupname_clustername_location, mas você também poderá fornecer um nome personalizado.By default, AKS will name the node resource group MC_resourcegroupname_clustername_location, but you can also provide your own name.

Para especificar um nome do grupo de recursos, instale a extensão da CLI do Azure aks-preview versão 0.3.2 ou posterior.To specify your own resource group name, install the aks-preview Azure CLI extension version 0.3.2 or later. Ao criar um cluster AKS usando o comando AZ AKs Create , use o --node-resource-group parâmetro e especifique um nome para o grupo de recursos.When you create an AKS cluster by using the az aks create command, use the --node-resource-group parameter and specify a name for the resource group. Se você usar um modelo do Azure Resource Manager para implantar um cluster do AKS, defina o nome do grupo de recursos usando a propriedade nodeResourceGroup.If you use an Azure Resource Manager template to deploy an AKS cluster, you can define the resource group name by using the nodeResourceGroup property.

  • O grupo de recursos secundário é criado automaticamente pelo provedor de recursos do Azure na própria assinatura.The secondary resource group is automatically created by the Azure resource provider in your own subscription.
  • Você poderá especificar um nome de grupo de recursos personalizado somente quando estiver criando o cluster.You can specify a custom resource group name only when you're creating the cluster.

Ao trabalhar com o grupo de recursos do nó, tenha em mente que não é possível:As you work with the node resource group, keep in mind that you can't:

  • Especificar um grupo de recursos existente para o grupo de recursos do nó.Specify an existing resource group for the node resource group.
  • Especificar uma assinatura diferente para o grupo de recursos do nó.Specify a different subscription for the node resource group.
  • Alterar o nome do grupo de recursos do nó depois que o cluster for criado.Change the node resource group name after the cluster has been created.
  • Especificar nomes para os recursos gerenciados dentro do grupo de recursos do nó.Specify names for the managed resources within the node resource group.
  • Modificar ou excluir marcas criadas pelo Azure de recursos gerenciados dentro do grupo de recursos do nó.Modify or delete Azure-created tags of managed resources within the node resource group. (Confira as informações adicionais na próxima seção.)(See additional information in the next section.)

Posso modificar marcas e outras propriedades dos recursos do AKS no grupo de recursos do nó?Can I modify tags and other properties of the AKS resources in the node resource group?

Se você modificar ou excluir as marcas criadas pelo Azure e outras propriedades de recursos no grupo de recursos do nó, poderá obter resultados inesperados, como erros de dimensionamento e atualização.If you modify or delete Azure-created tags and other resource properties in the node resource group, you could get unexpected results such as scaling and upgrading errors. O AKS permite criar e modificar marcas personalizadas criadas por usuários finais, e você pode adicionar essas marcas ao criar um pool de nós.AKS allows you to create and modify custom tags created by end users, and you can add those tags when creating a node pool. O ideal é criar ou modificar marcas personalizadas, por exemplo, para atribuir uma unidade de negócios ou um centro de custo.You might want to create or modify custom tags, for example, to assign a business unit or cost center. Isso também pode ser obtido com a criação de políticas do Azure com um escopo no grupo de recursos gerenciado.This can also be achieved by creating Azure Policies with a scope on the managed resource group.

No entanto, a modificação de marcas criadas pelo Azure em recursos no grupo de recursos de nó no cluster AKs é uma ação sem suporte, que interrompe o Slo (objetivo de nível de serviço).However, modifying any Azure-created tags on resources under the node resource group in the AKS cluster is an unsupported action, which breaks the service-level objective (SLO). Para obter mais informações, confira O AKS oferece um SLA?For more information, see Does AKS offer a service-level agreement?

Quais os controles de admissão de Kubernetes que o AKS suporta?What Kubernetes admission controllers does AKS support? Controladores de admissão podem ser adicionados ou removidos?Can admission controllers be added or removed?

O AKS dá suporte aos seguintes controladores de admissão:AKS supports the following admission controllers:

  • NamespaceLifecycleNamespaceLifecycle
  • LimitRangerLimitRanger
  • ServiceAccountServiceAccount
  • DefaultStorageClassDefaultStorageClass
  • DefaultTolerationSecondsDefaultTolerationSeconds
  • MutatingAdmissionWebhookMutatingAdmissionWebhook
  • ValidatingAdmissionWebhookValidatingAdmissionWebhook
  • ResourceQuotaResourceQuota
  • PodNodeSelectorPodNodeSelector
  • PodTolerationRestrictionPodTolerationRestriction
  • ExtendedResourceTolerationExtendedResourceToleration

No momento, não é possível modificar a lista de controladores de admissão no AKS.Currently, you can't modify the list of admission controllers in AKS.

Posso usar webhooks do controlador de admissão no AKS?Can I use admission controller webhooks on AKS?

Sim, você pode usar webhooks do controlador de admissão no AKS.Yes, you may use admission controller webhooks on AKS. É recomendável que você exclua os namespaces internos do AKS, que são marcados com o rótulo do plano de controle.It's recommended you exclude internal AKS namespaces, which are marked with the control-plane label. Por exemplo, adicionando o código abaixo à configuração do webhook:For example, by adding the below to the webhook configuration:

namespaceSelector:
    matchExpressions:
    - key: control-plane
      operator: DoesNotExist

Os firewalls AKS a saída do servidor de API para que os WebHooks do controlador de admissão precisem ser acessados de dentro do cluster.AKS firewalls the API server egress so your admission controller webhooks need to be accessible from within the cluster.

Os webhooks do controlador de admissão podem afetar os namespaces internos do AKS e do kube-system?Can admission controller webhooks impact kube-system and internal AKS namespaces?

Para proteger a estabilidade do sistema e impedir que os controladores de admissão personalizados afetem os serviços internos no namespace do kube-system, o AKS tem uma Imposição de Admissões, que exclui automaticamente os namespaces internos do kube-system e do AKS.To protect the stability of the system and prevent custom admission controllers from impacting internal services in the kube-system, namespace AKS has an Admissions Enforcer, which automatically excludes kube-system and AKS internal namespaces. Esse serviço verifica se os controladores de admissão personalizados não afetam os serviços em execução no kube-system.This service ensures the custom admission controllers don't affect the services running in kube-system.

Se você tiver um caso de uso crítico para ter algo implantado no kube-system (não recomendado), que precisa ser coberto pelo webhook de admissão personalizado, adicione o rótulo ou a anotação abaixo para que a Imposição de Admissões o ignore.If you have a critical use case for having something deployed on kube-system (not recommended) which you require to be covered by your custom admission webhook, you may add the below label or annotation so that Admissions Enforcer ignores it.

Rótulo: "admissions.enforcer/disabled": "true" ou Anotação: "admissions.enforcer/disabled": trueLabel: "admissions.enforcer/disabled": "true" or Annotation: "admissions.enforcer/disabled": true

O Azure Key Vault é integrado com o AKS?Is Azure Key Vault integrated with AKS?

Atualmente, o AKS não está integrado nativamente ao Azure Key Vault.AKS isn't currently natively integrated with Azure Key Vault. No entanto, o provedor do Azure Key Vault para o repositório de segredos do CSI permite a integração direta dos pods do Kubernetes aos segredos do Key Vault.However, the Azure Key Vault provider for CSI Secrets Store enables direct integration from Kubernetes pods to Key Vault secrets.

Posso executar contêineres do Windows Server no AKS?Can I run Windows Server containers on AKS?

Sim, os contêineres do Windows Server estão disponíveis no AKS.Yes, Windows Server containers are available on AKS. Para executar os contêineres do Windows Server no AKS, crie um pool de nós que executa o Windows Server como o SO convidado.To run Windows Server containers in AKS, you create a node pool that runs Windows Server as the guest OS. Os contêineres do Windows Server podem usar apenas o Windows Server 2019.Windows Server containers can use only Windows Server 2019. Para começar a usá-lo, confira Criar um cluster do AKS com um pool de nós do Windows Server.To get started, see Create an AKS cluster with a Windows Server node pool.

O suporte do Windows Server para pools de nós inclui algumas limitações que fazem parte do Windows Server upstream no projeto do Kubernetes.Windows Server support for node pool includes some limitations that are part of the upstream Windows Server in Kubernetes project. Para obter mais informações sobre essas limitações, confira Limitações de contêineres do Windows Server no AKS.For more information on these limitations, see Windows Server containers in AKS limitations.

O AKS oferece um SLA?Does AKS offer a service-level agreement?

O AKS fornece garantias de SLA como um recurso complementar opcional com SLA de tempo de atividade.AKS provides SLA guarantees as an optional add-on feature with Uptime SLA.

Posso aplicar descontos de reserva do Azure aos meus nós de agente do AKS?Can I apply Azure reservation discounts to my AKS agent nodes?

Os nós de agente AKS são cobrados como máquinas virtuais do Azure padrão. portanto, se você comprou as reservas do Azure para o tamanho da VM que você está usando em AKs, esses descontos serão aplicados automaticamente.AKS agent nodes are billed as standard Azure virtual machines, so if you've purchased Azure reservations for the VM size that you're using in AKS, those discounts are automatically applied.

Posso mover/migrar meu cluster entre locatários do Azure?Can I move/migrate my cluster between Azure tenants?

No momento, não há suporte para a movimentação do cluster AKS entre locatários.Moving your AKS cluster between tenants is currently unsupported.

Posso mover/migrar meu cluster entre assinaturas?Can I move/migrate my cluster between subscriptions?

No momento, não há suporte para a movimentação de clusters entre assinaturas.Movement of clusters between subscriptions is currently unsupported.

Posso mover meus clusters do AKS da assinatura atual do Azure para outra?Can I move my AKS clusters from the current Azure subscription to another?

Não há suporte para a movimentação do cluster AKS e seus recursos associados entre assinaturas do Azure.Moving your AKS cluster and its associated resources between Azure subscriptions isn't supported.

Posso mover meu cluster AKS ou recursos de infraestrutura AKS para outros grupos de recursos ou renomeá-los?Can I move my AKS cluster or AKS infrastructure resources to other resource groups or rename them?

Não há suporte para mover ou renomear o cluster AKS e seus recursos associados.Moving or renaming your AKS cluster and its associated resources isn't supported.

Por que a exclusão do meu cluster demora tanto?Why is my cluster delete taking so long?

A maioria dos clusters é excluída mediante solicitação do usuário; em alguns casos, especialmente quando os clientes trazem o próprio grupo de recursos ou fazem a exclusão de tarefas entre grupos de recursos, isso pode levar mais tempo ou falhar.Most clusters are deleted upon user request; in some cases, especially where customers are bringing their own Resource Group, or doing cross-RG tasks deletion can take additional time or fail. Se você tiver um problema com as exclusões, verifique se você não tem bloqueios no RG, se todos os recursos fora do RG estão desassociados do RG e assim por diante.If you have an issue with deletes, double-check that you do not have locks on the RG, that any resources outside of the RG are disassociated from the RG, and so on.

Se eu tiver um pod/implantações no estado 'NodeLost' ou 'Unknown', ainda poderei atualizar o meu cluster?If I have pod / deployments in state 'NodeLost' or 'Unknown' can I still upgrade my cluster?

Você pode, mas AKS não recomenda isso.You can, but AKS doesn't recommend this. As atualizações devem ser executadas quando o estado do cluster for conhecido e íntegro.Upgrades should be performed when the state of the cluster is known and healthy.

Se eu tiver um cluster com um ou mais nós em um estado não íntegro ou desligado, poderei executar uma atualização?If I have a cluster with one or more nodes in an Unhealthy state or shut down, can I perform an upgrade?

Não, exclua/remova todos os nós em um estado de falha ou removidos do cluster antes da atualização.No, delete/remove any nodes in a failed state or otherwise removed from the cluster prior to upgrading.

Executei uma exclusão de cluster, mas o erro [Errno 11001] getaddrinfo failed é exibidoI ran a cluster delete, but see the error [Errno 11001] getaddrinfo failed

Normalmente, isso é causado pelo fato de os usuários terem um ou mais NSGs (grupos de segurança de rede) ainda em uso e associados ao cluster.Most commonly, this is caused by users having one or more Network Security Groups (NSGs) still in use and associated with the cluster. Remova-os e tente excluir novamente.Remove them and attempt the delete again.

Executei uma atualização, mas agora meus pods estão em loops de falha e as investigações de preparação falham.I ran an upgrade, but now my pods are in crash loops, and readiness probes fail?

Confirme se sua entidade de serviço não expirou.Confirm your service principal hasn't expired. Consulte: entidade de serviço AKs e credenciais de atualização do AKS.See: AKS service principal and AKS update credentials.

Meu cluster estava funcionando, mas repentinamente não pode provisionar balanceadores de carga, PVCs de montagem, etc.?My cluster was working, but suddenly can't provision LoadBalancers, mount PVCs, etc.?

Confirme se sua entidade de serviço não expirou.Confirm your service principal hasn't expired. Consulte: entidade de serviço AKs e credenciais de atualização do AKS.See: AKS service principal and AKS update credentials.

Posso dimensionar meu cluster AKS para zero?Can I scale my AKS cluster to zero?

Você pode interromper completamente um cluster AKS em execução, economizando nos respectivos custos de computação.You can completely stop a running AKS cluster, saving on the respective compute costs. Além disso, você também pode optar por dimensionar ou fazer o dimensionamento automático de todos ou de User pools de nós específicos para 0, mantendo apenas a configuração de cluster necessária.Additionally, you may also choose to scale or autoscale all or specific User node pools to 0, maintaining only the necessary cluster configuration. Não é possível dimensionar diretamente os pools de nós do sistema para zero.You can't directly scale system node pools to zero.

Posso usar as APIs do conjunto de dimensionamento de máquinas virtuais para executar uma operação de escala manual?Can I use the virtual machine scale set APIs to scale manually?

Não. Não há suporte para operações de escala por meio das APIs do conjunto de dimensionamento de máquinas virtuais.No, scale operations by using the virtual machine scale set APIs aren't supported. Use as APIs do AKS (az aks scale).Use the AKS APIs (az aks scale).

Posso usar conjuntos de dimensionamento de máquinas virtuais para dimensionar manualmente para nós zero?Can I use virtual machine scale sets to manually scale to zero nodes?

Não. Não há suporte para operações de escala por meio das APIs do conjunto de dimensionamento de máquinas virtuais.No, scale operations by using the virtual machine scale set APIs aren't supported. Você pode usar a API do AKS para dimensionar para zero pools de nó que não são do sistema ou parar o cluster em vez disso.You can use the AKS API to scale to zero non-system node pools or stop your cluster instead.

Posso interromper ou desalocar todas as minhas VMs?Can I stop or de-allocate all my VMs?

Embora o AKS tenha mecanismos de resiliência para resistir a essa configuração e recuperá-la, essa não é uma configuração com suporte.While AKS has resilience mechanisms to withstand such a config and recover from it, this isn't a supported configuration. Em vez disso, pare o cluster .Stop your cluster instead.

Posso usar extensões de VM personalizadas?Can I use custom VM extensions?

O agente de Log Analytics tem suporte porque é uma extensão gerenciada pela Microsoft.The Log Analytics agent is supported because it's an extension managed by Microsoft. Caso contrário, não, o AKS é um serviço gerenciado e não há suporte para a manipulação dos recursos de IaaS.Otherwise no, AKS is a managed service, and manipulation of the IaaS resources isn't supported. Para instalar componentes personalizados, use as APIs e os mecanismos do kubernetes.To install custom components, use the Kubernetes APIs and mechanisms. Por exemplo, use DaemonSets para instalar os componentes necessários.For example, use DaemonSets to install required components.

O AKS armazena dados de clientes fora da região do cluster?Does AKS store any customer data outside of the cluster's region?

O recurso para habilitar o armazenamento de dados do cliente em uma única região está disponível no momento apenas na região do Sudeste Asiático (Cingapura) da área geográfica do Pacífico Asiático.The feature to enable storing customer data in a single region is currently only available in the Southeast Asia Region (Singapore) of the Asia Pacific Geo. Para todas as outras regiões, os dados do cliente são armazenados na Área geográfica.For all other regions, customer data is stored in Geo.

As imagens AKS são necessárias para executar como raiz?Are AKS images required to run as root?

Exceto pelas duas imagens a seguir, as imagens AKS não são necessárias para executar como raiz:Except for the following two images, AKS images aren't required to run as root:

  • mcr.microsoft.com/oss/kubernetes/corednsmcr.microsoft.com/oss/kubernetes/coredns
  • mcr.microsoft.com/azuremonitor/containerinsights/ciprodmcr.microsoft.com/azuremonitor/containerinsights/ciprod

O que é o modo transparente do Azure CNI vs. modo de ponte?What is Azure CNI Transparent Mode vs. Bridge Mode?

Do v 1.2.0 Azure CNI terá o modo transparente como padrão para implantações de CNI do Linux de locação única.From v1.2.0 Azure CNI will have Transparent mode as default for single tenancy Linux CNI deployments. O modo transparente está substituindo o modo de ponte.Transparent mode is replacing bridge mode. Nesta seção, discutiremos mais sobre as diferenças de ambos os modos e quais são os benefícios/limitações para usar o modo transparente no Azure CNI.In this section, we will discuss more about the differences about both modes and what are the benefits/limitation for using Transparent mode in Azure CNI.

Modo de ponteBridge mode

Como o nome sugere, o modo de ponte do Azure CNI, em uma forma "Just-in-time", criará uma ponte L2 chamada "azure0".As the name suggests, bridge mode Azure CNI, in a "just in time" fashion, will create a L2 bridge named "azure0". Todas as interfaces de par de Pod do lado do host veth serão conectadas a essa ponte.All the host side pod veth pair interfaces will be connected to this bridge. Portanto, Pod-Pod comunicação intra VM e o tráfego restante passa por essa ponte.So Pod-Pod intra VM communication and the remaining traffic goes through this bridge. A ponte em questão é um dispositivo virtual de camada 2 que, por sua vez, não pode receber ou transmitir nada, a menos que você associe um ou mais dispositivos reais a ele.The bridge in question is a layer 2 virtual device that on its own cannot receive or transmit anything unless you bind one or more real devices to it. Por esse motivo, o eth0 da VM do Linux deve ser convertido em uma ponte subordinada para "azure0".For this reason, eth0 of the Linux VM has to be converted into a subordinate to "azure0" bridge. Isso cria uma topologia de rede complexa na VM do Linux e, como um sintoma, CNI precisou cuidar de outras funções de rede, como atualização do servidor DNS e assim por diante.This creates a complex network topology within the Linux VM and as a symptom CNI had to take care of other networking functions like DNS server update and so on.

Topologia do modo de ponte

Abaixo está um exemplo de como a configuração de rota de IP é parecida no modo de ponte.Below is an example of how the ip route setup looks like in Bridge mode. Independentemente de quantos pods o nó tem, haverá apenas duas rotas.Regardless of how many pods the node has, there will only ever be two routes. O primeiro que diz, todo o tráfego, excluindo local em azure0, vai para o gateway padrão da sub-rede por meio da interface com IP "src 10.240.0.4" (que é o IP primário do nó) e o segundo que diz o espaço pod "10.20. x. x" a ser usado pelo kernel para núcleo.The first one saying, all traffic excluding local on azure0 will go to the default gateway of the subnet through the interface with ip "src 10.240.0.4" (which is Node primary IP) and the second one saying "10.20.x.x" Pod space to kernel for kernel to decide.

default via 10.240.0.1 dev azure0 proto dhcp src 10.240.0.4 metric 100
10.240.0.0/12 dev azure0 proto kernel scope link src 10.240.0.4
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
root@k8s-agentpool1-20465682-1:/#

Modo transparenteTransparent mode

O modo transparente usa uma abordagem direta para configurar a rede do Linux.Transparent mode takes a straight forward approach to setting up Linux networking. Nesse modo, o Azure CNI não alterará nenhuma propriedade da interface eth0 na VM do Linux.In this mode, Azure CNI won't change any properties of eth0 interface in the Linux VM. Essa abordagem mínima de alteração das propriedades de rede do Linux ajuda a reduzir os problemas de caso de canto complexos que os clusters podem enfrentar com o modo de ponte.This minimal approach of changing the Linux networking properties helps reduce complex corner case issues that clusters could face with Bridge mode. No modo transparente, o Azure CNI criará e adicionará interfaces de par de Pod do lado do host veth que serão adicionadas à rede do host.In Transparent Mode, Azure CNI will create and add host-side pod veth pair interfaces that will be added to the host network. A comunicação Pod a Pod da VM é por meio de rotas IP que o CNI adicionará.Intra VM Pod-to-Pod communication is through ip routes that the CNI will add. Essencialmente, a comunicação Pod a pod é sobre a camada 3 e o tráfego pod é roteado pelas regras de roteamento L3.Essentially Pod-to-Pod communication is over layer 3 and pod traffic is routed by L3 routing rules.

Topologia de modo transparente

Abaixo está um exemplo de configuração de rota de IP do modo transparente, a interface de cada pod obterá uma rota estática anexada para que o tráfego com IP de destino como o Pod seja enviado diretamente para a interface de par host do pod veth .Below is an example ip route setup of transparent mode, each Pod's interface will get a static route attached so that traffic with dest IP as the Pod will be sent directly to the Pod's host side veth pair interface.

10.240.0.216 dev azv79d05038592 proto static
10.240.0.218 dev azv8184320e2bf proto static
10.240.0.219 dev azvc0339d223b9 proto static
10.240.0.222 dev azv722a6b28449 proto static
10.240.0.223 dev azve7f326f1507 proto static
10.240.0.224 dev azvb3bfccdd75a proto static
168.63.129.16 via 10.240.0.1 dev eth0 proto dhcp src 10.240.0.4 metric 100
169.254.169.254 via 10.240.0.1 dev eth0 proto dhcp src 10.240.0.4 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

Benefícios do modo transparenteBenefits of transparent mode

  • Fornece mitigação para a conntrack condição de corrida paralela do DNS e evitar problemas de latência de DNS de 5 segundos sem a necessidade de configurar o DNS local do nó (você ainda pode usar o DNS local do nó por motivos de desempenho).Provides mitigation for conntrack DNS parallel race condition and avoidance of 5-sec DNS latency issues without the need to set up node local DNS (you may still use node local DNS for performance reasons).
  • Elimina o modo de ponte CNI de latência de DNS de 5 segundos inicial que apresenta hoje devido à configuração de ponte "Just-in-time".Eliminates the initial 5-sec DNS latency CNI bridge mode introduces today due to "just in time" bridge setup.
  • Um dos casos de canto no modo de ponte é que o CNI do Azure não pode continuar atualizando as listas de servidores DNS personalizados que os usuários adicionam à VNET ou NIC.One of the corner cases in bridge mode is that the Azure CNI can't keep updating the custom DNS server lists users add to either VNET or NIC. Isso resulta no CNI selecionando apenas a primeira instância da lista de servidores DNS.This results in the CNI picking up only the first instance of the DNS server list. Resolvido no modo transparente, pois CNI não altera nenhuma propriedade eth0.Solved in Transparent mode as CNI doesn't change any eth0 properties. Veja mais aqui.See more here.
  • Fornece melhor tratamento do tráfego UDP e mitigação para o Storm de inundação UDP quando o ARP atinge o tempo limite. No modo de ponte, quando a ponte não sabe um endereço MAC do pod de destino na comunicação de Pod a Pod da VM, por design, isso resulta no Storm do pacote para todas as portas.Provides better handling of UDP traffic and mitigation for UDP flood storm when ARP times out. In bridge mode, when bridge doesn't know a MAC address of destination pod in intra-VM Pod-to-Pod communication, by design, this results in storm of the packet to all ports. Resolvido no modo transparente, pois não há dispositivos L2 no caminho.Solved in Transparent mode as there are no L2 devices in path. Veja mais aqui.See more here.
  • O modo transparente tem melhor desempenho na comunicação Pod a Pod da VM em termos de taxa de transferência e latência quando comparado ao modo de ponte.Transparent mode performs better in Intra VM Pod-to-Pod communication in terms of throughput and latency when compared to bridge mode.

Como evitar que a propriedade de permissão defina problemas lentos quando o volume tiver muitos arquivos?How to avoid permission ownership setting slow issues when the volume has a lot of files?

Tradicionalmente, se o Pod estiver sendo executado como um usuário não raiz (que você deve), você deverá especificar um fsGroup dentro do contexto de segurança do pod para que o volume possa ser legível e gravável pelo Pod.Traditionally if your pod is running as a non-root user (which you should), you must specify a fsGroup inside the pod’s security context so that the volume can be readable and writable by the Pod. Esse requisito é abordado em mais detalhes aqui.This requirement is covered in more detail in here.

Mas um efeito colateral da configuração fsGroup é que, cada vez que um volume é montado, o kubernetes deve recursivamente chown() e chmod() todos os arquivos e diretórios dentro do volume, com algumas exceções indicadas abaixo.But one side-effect of setting fsGroup is that, each time a volume is mounted, Kubernetes must recursively chown() and chmod() all the files and directories inside the volume - with a few exceptions noted below. Isso acontece mesmo que a propriedade de grupo do volume já corresponda à solicitada fsGroup e pode ser muito dispendiosa para volumes maiores com muitos arquivos pequenos, o que faz com que a inicialização do pod demore muito tempo.This happens even if group ownership of the volume already matches the requested fsGroup, and can be pretty expensive for larger volumes with lots of small files, which causes pod startup to take a long time. Esse cenário tem sido um problema conhecido antes de v 1,20 e a solução alternativa é definir o Pod executar como raiz:This scenario has been a known problem before v1.20 and the workaround is setting the Pod run as root:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 0
    fsGroup: 0

O problema foi resolvido por kubernetes v 1,20, consulte Kubernetes 1,20: controle granular das alterações de permissão de volume para obter mais detalhes.The issue has been resolved by Kubernetes v1.20, refer Kubernetes 1.20: Granular Control of Volume Permission Changes for more details.