次の方法で共有


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 ポリシーの適用が無効になっています。

  • Hubble が無効になっています。

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

  • internalTrafficPolicy=Local の Kubernetes サービスはサポートされません (Cilium イシュー #17796)。

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

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

前提条件

  • 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

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

既存のクラスターを Cilium を利用した Azure CNI にアップグレードする

Note

クラスターが次の条件を満たしていれば、既存のクラスターを Cilium を利用した Azure CNI に更新できます。

Note

別のネットワーク ポリシー エンジン (Azure NPM または Calico) を備えたクラスターで Cilium を有効にすると、そのネットワーク ポリシー エンジンはアンインストールされ、Cilium に置き換えられます。 詳細については、「Azure Network Policy Manager または Calico をアンインストールする」を参照してください。

警告

アップグレード プロセスにより、各ノード プールが同時に再イメージ化されます。 各ノード プールを個別にアップグレードすることはサポートされていません。 クラスター ネットワークのあらゆる中断は、ノード プール内の各ノードが再イメージ化される、ノード イメージのアップグレードまたは Kubernetes バージョンのアップグレードと似た形になります。

Cilium は、すべてのノードが再イメージ化された後にのみ、ネットワーク ポリシーの適用を開始します。

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

次のコマンドを使用して、既存のクラスターを Cilium を利用した Azure CNI にアップグレードします。 <clusterName> および <resourceGroupName> の値を置き換えます。

az aks update --name <clusterName> --resource-group <resourceGroupName> \
  --network-dataplane cilium

よく寄せられる質問

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

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

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

    CiliumNetworkPolicy カスタム リソースは公式にはサポートされていません。 お客様は、Kubernetes NetworkPolicy リソースを使用してネットワーク ポリシーを構成することをお勧めします。

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