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 の制限事項は、
NetworkPolicy
のipBlock
がポッドまたはノード 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 へのエグレスをブロックします。回避策として、
namespaceSelector
とpodSelector
を追加してポッドを選択できるようにします。 この例では、すべての名前空間のすべてのポッドを選択します。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: {}
注意
現在、
NetworkPolicy
をipBlock
と共に指定してノード 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 のネットワークの詳細については、次の記事を参照してください。
Azure Kubernetes Service