Partilhar via


Configurar o Azure CNI Powered by Cilium no Serviço Kubernetes do Azure (AKS)

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

Ao fazer uso de programas eBPF carregados no kernel Linux e uma estrutura de objeto de API mais eficiente, o Azure CNI Powered by Cilium oferece os seguintes benefícios:

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

  • Roteamento de serviço aprimorado

  • Aplicação mais eficiente da política de rede

  • Melhor observabilidade do tráfego de cluster

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

Gerenciamento de Endereço IP (IPAM) com o Azure CNI Powered by Cilium

O Azure CNI Powered by Cilium pode ser implantado usando dois métodos diferentes para atribuir IPs de pod:

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

  • Atribuir endereços IP de uma rede virtual (semelhante ao Azure CNI 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 para usar".

Aplicação de políticas de rede

O Cilium aplica 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

O Azure CNI powered by Cilium atualmente tem as seguintes limitações:

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

  • A aplicação da política Cilium L7 está desativada.

  • As diretivas de rede não podem ser usadas ipBlock para permitir o acesso a IPs de nó ou pod. Consulte as perguntas frequentes para obter detalhes e soluções recomendadas.

  • Vários serviços Kubernetes não podem usar a mesma porta de host com protocolos diferentes (por exemplo, TCP ou UDP) (edição #14287 do Cilium).

  • As diretivas de rede podem ser aplicadas em pacotes de resposta quando um pod se conecta a si mesmo por meio do IP do cluster de serviços (edição #19406 do Cilium).

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

Pré-requisitos

  • CLI do Azure versão 2.48.1 ou posterior. Execute az --version para ver a versão atualmente instalada. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

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

Nota

As versões anteriores da API do AKS (2022-09-02preview a 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 o Azure CNI Powered by Cilium.

Criar um novo cluster AKS com o Azure CNI Powered by 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 o 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

Nota

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

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 sub-rede 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

Perguntas mais 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 CiliumNetworkPolicy recursos personalizados em vez de recursos do Kubernetes NetworkPolicy ?

    CiliumNetworkPolicy Os recursos personalizados são parcialmente suportados. Os clientes podem usar a filtragem FQDN como parte do pacote de recursos Advanced Container Networking Services .

    Este CiliumNetworkPolicy exemplo demonstra um exemplo de padrão de correspondência para serviços que correspondem ao rótulo especificado.

    apiVersion: "cilium.io/v2"
    kind: CiliumNetworkPolicy
    metadata:
      name: "example-fqdn"
    spec:
      endpointSelector:
        matchLabels:
          foo: bar
      egress:
      - toFQDNs:
        - matchPattern: "*.example.com"
    
  • Por que o tráfego está sendo bloqueado quando o NetworkPolicy tem um ipBlock que permite o endereço IP?

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

    Por exemplo, este NetworkPolicy tem um ipBlock que permite que todos os egressos: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 isso NetworkPolicy é aplicado, o Cilium bloqueará a saída para IPs de pod e nó, mesmo que os IPs estejam dentro do ipBlock CIDR.

    Como solução alternativa, você pode adicionar namespaceSelector e podSelector selecionar pods. O exemplo abaixo 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: {}
    

    Nota

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

  • O AKS configura limites de CPU ou memória no Cílio daemonset?

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

  • O Azure CNI powered by Cilium usa o Kube-Proxy?

    Não, clusters AKS criados com dataplane de rede como Cilium não usam Kube-Proxy. Se os clusters AKS estiverem na Sobreposição CNI do Azure ou no Azure CNI com alocação IP dinâmica e forem atualizados para clusters AKS executando o Azure CNI com tecnologia 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óximos passos

Saiba mais sobre redes no AKS nos seguintes artigos: