次の方法で共有


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 と同様)

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

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

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

制限事項

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

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

  • Cilium L7 ポリシーの適用が無効になっています。

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

  • 複数の Kubernetes サービスで、異なるプロトコル (TCP や UDP など) を使用して同じホスト ポートを使用することはできません (Cilium イシュー #14287)。

  • ポッドがサービス クラスター IP 経由で自身に接続するときに、応答パケットにネットワーク ポリシーが適用される場合があります (Cilium イシュー #19406)。

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

前提条件

  • 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

Note

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

よく寄せられる質問

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

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

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

    CiliumNetworkPolicy カスタム リソースは部分的にサポートされています。 お客様は、アドバンスト コンテナー ネットワークサービスの機能バンドルの一部として、FQDN フィルタリングを使用できます。

    次の CiliumNetworkPolicy の例は、指定したラベルに一致するサービスのサンプル照合パターンを示しています。

    apiVersion: "cilium.io/v2"
    kind: CiliumNetworkPolicy
    metadata:
      name: "example-fqdn"
    spec:
      endpointSelector:
        matchLabels:
          foo: bar
      egress:
      - toFQDNs:
        - matchPattern: "*.example.com"
    
  • NetworkPolicy に、IP アドレスを許可する ipBlock があるのにトラフィックがブロックされるのはなぜですか?

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

    たとえば、次の NetworkPolicy には、0.0.0.0/0 に対してすべてのエグレスを許可する ipBlock があります。

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

    Note

    現在、ノード IP へのトラフィックを許可するために、ipBlock を含むNetworkPolicy を指定することはできません。

  • "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 のネットワークの詳細については、次の記事を参照してください。