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 KubernetesNetworkPolicy
?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 umipBlock
que permite o endereço IP?Uma limitação do Azure CNI Powered by Cilium é que um
NetworkPolicy
's não pode selecionar IPsipBlock
de pod ou node.Por exemplo, este
NetworkPolicy
tem umipBlock
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 doipBlock
CIDR.Como solução alternativa, você pode adicionar
namespaceSelector
epodSelector
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 umipBlock
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:
Atualize os modos IPAM do Serviço Kubernetes do Azure (AKS) e a Tecnologia de Dataplane.
Usar um endereço IP estático com o balanceador de carga do Serviço Kubernetes do Azure (AKS)
Usar um balanceador de carga interno com o Serviço de Contêiner do Azure (AKS)
Criar um controlador de entrada básico com conectividade de rede externa
Azure Kubernetes Service