Compartilhar via


Configurar a CNI do Azure da plataforma Cilium no AKS (Serviço de Kubernetes do Azure)

O Azure CNI com tecnologia Cilium combina o robusto plano de controle do Azure CNI com o plano de dados do Cilium para fornecer alto desempenho de rede e segurança.

Ao usar programas eBPF carregados no kernel do Linux e uma estrutura de objeto de API mais eficiente, a CNI do Azure da plataforma Cilium oferece os seguintes benefícios:

  • Funcionalidade equivalente aos plug-ins existentes do Azure CNI e do Azure CNI Overlay

  • Roteamento de serviço aprimorado

  • Imposição de política de rede mais eficiente

  • Melhor observabilidade do tráfego de cluster

  • Suporte para clusters maiores (mais nós, pods e serviços)

IPAM (Gerenciamento de Endereço IP) com a CNI do Azure da plataforma Cilium

A CNI do Azure com tecnologia Cilium pode ser implantada usando dois métodos diferentes para atribuição de IPs de pods:

  • Atribuir endereços IP de uma rede de sobreposição (semelhante ao modo de Sobreposição da CNI do Azure)

  • Atribuir endereços IP de uma rede virtual (semelhante à CNI do Azure existente com Atribuição de IP de Pod Dinâmico)

Se você não tiver certeza de qual opção selecionar, leia "Escolhendo um modelo de rede a ser usado".

Versões

Versão do Kubernetes Versão mínima do Cilium
1.27 (LTS) 1.13.18
1.28 (Fim da vida útil) 1.13.18
1.29 1.14.19
1.30 (LTS) 1.14.19
1.31 1.16.6
1,32 1.17.0

Consulte Versões do Kubernetes com Suporte para obter mais informações sobre o versionamento do AKS e os cronogramas de lançamento.

Imposição da política de rede

O Cilium impõe políticas de rede para permitir ou negar o tráfego entre pods. Com o Cilium, você não precisa instalar um mecanismo de política de rede separado, como o Azure Network Policy Manager ou o Calico.

Limitações

Atualmente, a CNI do Azure, alimentada pelo Cilium, tem as seguintes limitações:

  • Disponível apenas para Linux, e não para Windows.

  • As políticas de rede não podem usar ipBlock para permitir acesso a IPs de nós ou pods. Veja perguntas frequentes para obter detalhes e soluções alternativas recomendadas.

  • Para as versões Cilium 1.16 ou anteriores, vários serviços do Kubernetes não podem usar a mesma porta de host com protocolos diferentes (por exemplo, TCP ou UDP) (problema Cilium nº 14287).

  • As políticas de rede não são aplicadas a pods usando a rede de host (spec.hostNetwork: true) porque esses pods usam a identidade do host em vez de ter identidades individuais.

  • As Fatias de Ponto de Extremidade do Cilium têm suporte no Kubernetes versão 1.32 e superior. As Fatias do Ponto de Extremidade do Cilium não dão suporte à configuração de como os pontos de extremidade do Cilium são agrupados. Não há suporte para namespaces de prioridade por meio de cilium.io/ces-namespace.

Considerações

Para obter recursos como observabilidade em seus recursos de segurança e tráfego de rede, como filtragem baseada em FQDN (Nome de Domínio Totalmente Qualificado) e políticas de rede baseadas em Camada 7 em seu cluster, considere habilitar serviços de Rede de Contêiner Avançado em seus clusters.

Pré-requisitos

  • CLI do Azure, versão 2.48.1 ou posterior. Execute az --version para ver a versão atualmente instalada. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

  • Se estiver usando modelos do ARM ou a API REST, a versão da API do AKS deverá ser 2022-09-02-preview ou posterior.

Observação

Versões anteriores da API do AKS (2022-09-02preview para 2023-01-02preview) usavam o campo networkProfile.ebpfDataplane=cilium. As versões da API do AKS desde 2023-02-02preview usam o campo networkProfile.networkDataplane=cilium para habilitar a CNI do Azure da plataforma Cilium.

Criar um cluster do AKS com a CNI do Azure da plataforma Cilium

Opção 1: atribuir endereços IP de uma rede de sobreposição

Use os comandos a seguir para criar um cluster com uma rede de sobreposição e Cilium. Substitua os valores de <clusterName>, <resourceGroupName> e <location>:

az aks create \
    --name <clusterName> \
    --resource-group <resourceGroupName> \
    --location <location> \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --pod-cidr 192.168.0.0/16 \
    --network-dataplane cilium \
    --generate-ssh-keys

Observação

O sinalizador --network-dataplane cilium substitui o sinalizador preterido --enable-ebpf-dataplane usado em versões anteriores da extensão da CLI aks-preview.

Opção 2: atribuir endereços IP de uma rede virtual

Execute os comandos a seguir para criar um grupo de recursos e uma rede virtual com uma sub-rede para nós e uma para pods.

# Create the resource group
az group create --name <resourceGroupName> --location <location>
# Create a virtual network with a subnet for nodes and a subnet for pods
az network vnet create --resource-group <resourceGroupName> --location <location> --name <vnetName> --address-prefixes <address prefix, example: 10.0.0.0/8> -o none
az network vnet subnet create --resource-group <resourceGroupName> --vnet-name <vnetName> --name nodesubnet --address-prefixes <address prefix, example: 10.240.0.0/16> -o none
az network vnet subnet create --resource-group <resourceGroupName> --vnet-name <vnetName> --name podsubnet --address-prefixes <address prefix, example: 10.241.0.0/16> -o none

Crie o cluster usando --network-dataplane cilium:

az aks create \
    --name <clusterName> \
    --resource-group <resourceGroupName> \
    --location <location> \
    --max-pods 250 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/nodesubnet \
    --pod-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/podsubnet \
    --network-dataplane cilium \
    --generate-ssh-keys

Opção 3: atribuir endereços IP da sub-rede de nó

Observação

A CLI do Azure versão 2.69.0 ou posterior é necessária. Execute az --version para ver a versão atualmente instalada. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Crie um cluster usando a sub-rede do nó com um plano de dados Cilium:

az aks create \
    --name <clusterName> \
    --resource-group <resourceGroupName> \
    --location <location> \
    --network-plugin azure \
    --network-dataplane cilium \
    --generate-ssh-keys

Perguntas frequentes

  • Posso personalizar a configuração do Cilium?

    Não, o AKS gerencia a configuração do Cilium e ela não pode ser modificada. Recomendamos que os clientes que precisam de mais controle usem o AKS BYO CNI e instalem o Cilium manualmente.

  • Posso usar recursos personalizados CiliumNetworkPolicy em vez de recursos NetworkPolicy do Kubernetes?

    Os clientes podem usar a filtragem FQDN e as Políticas de Camada 7 como parte do pacote de recursos serviços de rede de contêiner avançado .

  • Posso usar ClusterwideCiliumNetworkPolicy?

    Não há suporte para ClusterwideCiliumNetworkPolicy.

  • Quais recursos do Cilium têm suporte no CNI gerenciado pelo Azure? Quais deles exigem Serviços Avançados de Rede de Contêineres?

    Recurso com suporte sem ACNS com ACNS
    Fatias de Ponto de Extremidade do Cilium ✔️ ✔️
    Políticas de Rede K8s ✔️ ✔️
    Políticas de rede Cilium L3/L4 ✔️ ✔️
    Filtragem de FQDN ✔️
    Políticas de Rede L7 (HTTP/gRPC/Kafka) ✔️
    Observabilidade de rede de contêiner (logs de métricas e fluxos) ✔️
  • Por que o tráfego está sendo bloqueado quando o NetworkPolicy possui um ipBlock que permite o endereço IP?

    Uma limitação do CNI do Azure Powered da plataforma Cilium é que um NetworkPolicy's ipBlock não pode selecionar IPs de pod ou nó.

    Por exemplo, esse NetworkPolicy tem um ipBlock que permite que todas as saídas 0.0.0.0/0:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: example-ipblock
    spec:
      podSelector: {}
      policyTypes:
        - Egress
      egress:
        - to:
          - ipBlock:
              cidr: 0.0.0.0/0 # This will still block pod and node IPs.
    

    No entanto, quando esse NetworkPolicy for aplicado, o Cilium bloqueará a saída para IPs de pods e nós, mesmo que os IPs estejam dentro do CIDR ipBlock.

    Como solução alternativa, você pode adicionar namespaceSelector e podSelector para selecionar pods. Este exemplo seleciona todos os pods em todos os namespaces:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: example-ipblock
    spec:
      podSelector: {}
      policyTypes:
        - Egress
      egress:
        - to:
          - ipBlock:
              cidr: 0.0.0.0/0
          - namespaceSelector: {}
          - podSelector: {}
    

    Observação

    Atualmente não é possível especificar um NetworkPolicy com um ipBlock para permitir o tráfego para IPs de nós.

  • O AKS configura limites de CPU ou de memória no Ciliumdaemonset?

    Não, o AKS não configura limites de CPU ou memória no daemonset Cilium porque o Cilium é um componente crítico do sistema para a rede de pods e a imposição da política de rede.

  • A CNI do Azure alimentada pelo Cilium utiliza o Kube-Proxy?

    Não, os clusters do AKS criados com um plano de dados de rede como o Cilium não usam o Kube-Proxy. Se os clusters do AKS estiverem na Sobreposição da CNI do Azure ou na CNI do Azure com alocação de IP dinâmica e forem atualizados para clusters do AKS que executam a CNI do Azure da plataforma Cilium, novas cargas de trabalho de nós serão criadas sem kube-proxy. Cargas de trabalho mais antigas também são migradas para serem executadas sem kube-proxy como parte desse processo de atualização.

Próximas etapas

Saiba mais sobre a rede no AKS nos seguintes artigos: