次の方法で共有


Azure Kubernetes Service (AKS) で Azure CNI Powered by Cilium を構成する

Azure CNI Powered by Cilium では、Azure CNI の堅牢なコントロール プレーンを Cilium のデータ プレーンと組み合わせて、高パフォーマンスのネットワークとセキュリティを実現します。

Cilium を利用した Azure CNI では、Linux カーネルに読み込まれた eBPF プログラムと効率の高い API オブジェクト構造を利用することで、次の利点が得られます。

  • 既存の Azure CNI および Azure CNI オーバーレイ プラグインと同等の機能

  • サービス ルーティングの改善

  • より効率的なネットワーク ポリシーの適用

  • クラスター トラフィックの監視の向上

  • 大規模なクラスター (より多くのノード、ポッド、サービス) のサポート

Cilium を利用した Azure CNI を使用する IP アドレス管理 (IPAM)

Cilium を利用した Azure CNI をデプロイする際に、2 つの異なる方法でポッド IP を割り当てることができます。

  • オーバーレイ ネットワークから IP アドレスを割り当てる (Azure CNI オーバーレイ モードと同様)

  • 仮想ネットワークから IP アドレスを割り当てる (動的ポッド IP 割り当てを使用する既存の Azure CNI と同様)

選択するオプションがわからない場合は、「使用するネットワーク モデルの選択」を参照してください。

バージョン

Kubernetes バージョン Cilium の最小バージョン
1.27 (LTS) 1.13.18
1.28 (サポート終了) 1.13.18
1.29 1.14.19
1.30 (LTS) 1.14.19
1.31 1.16.6
1.32 1.17.0

AKS のバージョン管理とリリースタイムラインの詳細については、 サポートされている Kubernetes バージョンを参照してください。

ネットワーク ポリシーの適用

Cilium では、ネットワーク ポリシーを適用して、ポッド間のトラフィックを許可または拒否します。 Cilium を使用する場合、別のネットワーク ポリシー エンジン (Azure ネットワーク ポリシー マネージャーや Calico など) をインストールする必要はありません。

制限事項

Cilium を利用した Azure CNI には、現在、次の制限があります。

  • Linux でのみ使用でき、Windows では使用できません。

  • ネットワーク ポリシーでは、 ipBlock を使用してノードまたはポッド IP へのアクセスを許可することはできません。 詳細と推奨される回避策については、「よく寄せられる質問」を参照してください。

  • Cilium バージョン 1.16 以前の場合、複数の Kubernetes サービスで、異なるプロトコル (TCP や UDP など) で同じホスト ポートを使用することはできません (Cilium 問題 #14287)。

  • ネットワーク ポリシーは、ホスト ネットワーク (spec.hostNetwork: true) を使用するポッドには適用されません。これらのポッドは、個々の ID を持つ代わりにホスト ID を使用するためです。

  • Cilium エンドポイント スライスは、Kubernetes バージョン 1.32 以降でサポートされています。 Cilium エンドポイント スライスでは、Cilium エンドポイントのグループ化方法の構成はサポートされていません。 cilium.io/ces-namespace経由の優先順位名前空間はサポートされていません。

考慮事項

ネットワーク トラフィックの監視や、クラスターでの完全修飾ドメイン名 (FQDN) ベースのフィルター処理やレイヤー 7 ベースのネットワーク ポリシーなどのセキュリティ機能を利用するには、クラスターで 高度なコンテナー ネットワーク サービス を有効にすることを検討してください。

前提条件

  • Azure CLI バージョン 2.48.1 以降。 現在インストールされているバージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

  • ARM テンプレートまたは REST API を使用する場合、AKS API バージョンは 2022-09-02-preview 以降である必要があります。

注意

以前の AKS API バージョン (2022-09-02preview から 2023-01-02preview) では、フィールド networkProfile.ebpfDataplane=ciliumが使用されていました。 2023-02-02preview 以降の AKS API バージョンでは、Cilium を利用した Azure CNI を有効にするためにフィールド networkProfile.networkDataplane=cilium が使用されます。

Cilium を利用した Azure CNI を使用して新しい AKS クラスターを作成する

オプション 1: オーバーレイ ネットワークから IP アドレスを割り当てる

次のコマンドを使用して、オーバーレイ ネットワークと Cilium でクラスターを作成します。 <clusterName><resourceGroupName><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

注意

--network-dataplane cilium フラグは、aks-preview CLI 拡張機能の以前のバージョンで使用されていた非推奨の --enable-ebpf-dataplane フラグに代わるものです。

オプション 2: 仮想ネットワークから IP アドレスを割り当てる

次のコマンドを実行して、ノードのサブネットとポッドのサブネットを含むリソース グループと仮想ネットワークを作成します。

# 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

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

オプション 3: ノード サブネットから IP アドレスを割り当てる

注意

Azure CLI バージョン 2.69.0 以降が必要です。 現在インストールされているバージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

Cilium データプレーンで ノード サブネット を使用してクラスターを作成します。

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

よく寄せられる質問

  • "Cilium の構成はカスタマイズできますか?"

    いいえ。Cilium の構成は AKS によって管理されており、変更できません。 より高度な制御を必要とするお客様は、AKS BYO CNI を使用し、Cilium を手動でインストールすることをお勧めします。

  • "Kubernetes CiliumNetworkPolicy リソースの代わりに NetworkPolicy カスタム リソースを使用できますか?"

    お客様は、 高度なコンテナー ネットワーク サービス 機能バンドルの一部として、FQDN フィルター処理とレイヤー 7 ポリシーを使用できます。

  • ClusterwideCiliumNetworkPolicyを使用できますか?

    ClusterwideCiliumNetworkPolicy はサポートされません。

  • Azure マネージド CNI でサポートされている Cilium 機能はどれですか? 高度なコンテナー ネットワーク サービスが必要なものはどれですか?

    サポートされている機能 ACNS なし ACNS あり
    Cilium エンドポイント スライス ✔️ ✔️
    K8s ネットワーク ポリシー ✔️ ✔️
    Cilium L3/L4 ネットワーク ポリシー ✔️ ✔️
    FQDN フィルタリング ✔️
    L7 ネットワーク ポリシー (HTTP/gRPC/Kafka) ✔️
    コンテナネットワーク可観測性(メトリクスとフローログ) ✔️
  • NetworkPolicy に、IP アドレスを許可する ipBlock があるのにトラフィックがブロックされるのはなぜですか?

    Cilium を利用する Azure CNI の制限事項は、 NetworkPolicyipBlock がポッドまたはノード IP を選択できないことです。

    たとえば、次の NetworkPolicy には、ipBlock に対してすべてのエグレスを許可する 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.
    

    ただし、この NetworkPolicy が適用されると、IP が ipBlock CIDR 内にある場合でも、Cilium はポッドおよびノード IP へのエグレスをブロックします。

    回避策として、namespaceSelectorpodSelector を追加してポッドを選択できるようにします。 この例では、すべての名前空間のすべてのポッドを選択します。

    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: {}
    

    注意

    現在、NetworkPolicyipBlockと共に指定してノード IP へのトラフィックを許可することはできません。

  • "AKS は Cilium daemonset に CPU やメモリの制限を構成しますか?"

    いいえ。Cilium はポッド ネットワークとネットワーク ポリシーの適用に不可欠なシステム コンポーネントのため、AKS は Cilium daemonset に CPU やメモリの制限を構成しません。

  • Azure CNI Powered by Cilium では Kube-Proxy は使用されますか?

    いいえ。Cilium としてネットワーク データプレーンで作成された AKS クラスターでは、Kube-Proxy は使われません。 Azure CNI オーバーレイ上または動的 IP 割り当てを使用する Azure CNI 上にある AKS クラスターが、Azure CNI Powered by Cilium を実行する AKS クラスターにアップグレードされた場合、Kube-Proxy を使わずに新しいノード ワークロードが作成されます。 このアップグレード プロセスの一環として、古いワークロードも Kube-Proxy を使わずに実行するように移行されます。

次のステップ

AKS のネットワークの詳細については、次の記事を参照してください。