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 搭載 Azure CNI に更新する
Note
クラスターが次の条件を満たしていれば、既存のクラスターを Cilium を利用した Azure CNI に更新できます。
- クラスターでは、Azure CNI オーバーレイまたは動的 IP 割り当てを使用した Azure CNI のいずれかが使用されます。 これには、Azure CNI は含まれません。
- クラスターには Windows ノード プールがありません。
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
Note
Cilium 搭載 Azure CNI を AKS クラスターで有効にした後は、無効にすることはできません。 別のネットワーク データ プレーンを使用するには、新しい AKS クラスターを作成する必要があります。
よく寄せられる質問
"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 の制限は、
NetworkPolicy
のipBlock
がポッドまたはノード 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 に対するエグレスがブロックされます。回避策として、
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: {}
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 のネットワークの詳細については、次の記事を参照してください。
Azure Kubernetes Service