Contents
前提条件と環境準備
このセクションでは、Cilium が有効な AKS クラスタを作成するために最低限必要な Azure アカウント情報とローカルツールのセットアップ手順を説明します。権限不足や CLI の古いバージョンはコマンド失敗の主因になるため、事前確認が重要です。
Azure サブスクリプションと権限
対象サブスクリプションに対して Contributor 以上(または Microsoft.ContainerService/managedClusters/* が許可されたカスタムロール)を持っていることを確認してください。
|
1 2 3 4 5 6 |
# 利用可能なサブスクリプション一覧を取得 az account list --output table # 作業対象のサブスクリプションを選択 az account set --subscription <YOUR_SUBSCRIPTION_ID> |
注: サブスクリプションレベルで課金が発生し、権限が足りないと AKS の作成・更新が失敗します。
Azure CLI バージョンの確認と推奨バージョン(2026‑05‑01 現在)
Cilium 関連フラグは Azure CLI 2.55 以降で提供されています。以下コマンドでインストール済みバージョンを確認し、必要に応じてアップデートしてください。
|
1 2 3 4 5 6 7 8 9 |
# バージョン表示(yaml 出力) az version --output yaml # macOS (Homebrew) の場合 brew upgrade azure-cli # Windows (winget) の場合 winget upgrade Microsoft.AzureCLI |
- 推奨バージョン:
2.55.0以上 - 日付付き注記: 将来的に必要バージョンは変わる可能性があります。最新情報は公式リファレンス(Azure CLI release notes)で随時確認してください。
注意: フラグ名やプレビュー機能名は Azure のアップデートに伴い変更されることがあります。
--cilium-enabled、--enable-advanced-networkingなどの正確な名称は公式ドキュメントで必ずチェックしましょう。
ACNS(Advanced Container Networking Services)プレビュー機能の有効化
このセクションでは、Cilium が組み込まれた Azure CNI(ACNS)を利用できるように、サブスクリプション単位でプレビュー機能を登録する手順を示します。プレビューが未登録だと --cilium-enabled フラグは無視され、従来の Azure CNI が使用されます。
機能登録手順
|
1 2 3 4 5 6 7 8 9 10 11 |
# ACNS プレビュー機能の登録(名前は変更になる可能性があります) az feature register \ --namespace Microsoft.ContainerService \ --name AdvancedNetworkingPreview # 登録ステータスをポーリングして "Registered" を待つ az feature show \ --namespace Microsoft.ContainerService \ --name AdvancedNetworkingPreview \ --query properties.state -o tsv |
公式確認: 機能名が
AdvancedNetworkingPreviewであるかは、Azure のプレビュー機能一覧で随時確認してください。
サブスクリプションへの反映
|
1 2 3 4 5 6 7 |
# プロバイダー全体に登録内容を適用 az provider register --namespace Microsoft.ContainerService # 最終ステータス確認 az provider show -n Microsoft.ContainerService \ --query "registrationState" -o tsv |
Cilium 対応 AKS クラスターの作成
ACNS が有効化された状態で、Cilium ベースのデータプレーンを持つ AKS クラスタを構築します。以下は実務向けに最小限必要なパラメータをまとめたサンプルです。
推奨 az aks create コマンドとフラグ解説
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
az aks create \ --resource-group myResourceGroup \ --name cilium-aks-demo \ --location japaneast \ --kubernetes-version 1.30.0 \ # (2026‑05‑01 現在の最新安定版) --node-count 3 \ --network-plugin azure \ --enable-advanced-networking true \ --cilium-enabled true \ --vnet-subnet-id /subscriptions/<SUB_ID>/resourceGroups/myVNetRG/providers/Microsoft.Network/virtualNetworks/myVNet/subnets/aksSubnet \ --service-cidr 10.0.0.0/16 \ --dns-service-ip 10.0.0.10 \ --docker-bridge-address 172.17.0.1/16 \ --generate-ssh-keys |
| フラグ | 説明 | 推奨設定 |
|---|---|---|
--network-plugin azure |
Azure CNI(ACNS 前提)を使用 | 必須 |
--enable-advanced-networking true |
ACNS プレビュー有効化 | 必須 |
--cilium-enabled true |
Cilium データプレーンへ切替 | 必須 |
--kubernetes-version |
2026‑05‑01 時点の最新安定版 (1.30.0)。日付付き注記でバージョン変更に備える |
常に最新を選択 |
--node-count |
ワーカー数(可用性確保) | 最低 3 台推奨 |
注意: フラグ名は Azure CLI のリリースに伴い変わる可能性があります。コマンド実行前に
az aks create -hまたは公式ドキュメントで最新情報を確認してください。
デプロイ後の検証と mTLS 設定
クラスタ作成が完了したら、Cilium が正しく稼働しているかを確認し、その上で相互 TLS(mTLS)暗号化を有効にします。--enable-azure-cni-mtls はプレビュー機能のため、事前に ACNS の登録が必要です。
Cilium エージェントの状態確認
|
1 2 3 4 5 6 7 8 9 |
# 認証情報取得 az aks get-credentials -g myResourceGroup -n cilium-aks-demo # kube-system 名前空間の cilium-agent Pod が Running か確認 kubectl get pods -n kube-system -l k8s-app=cilium # Cilium CLI による詳細ステータス取得 cilium status --namespace=kube-system |
期待結果は cilium-agent が Running、cilium status に Kubernetes: OK が表示されることです。
mTLS の有効化手順(プレビュー機能)
|
1 2 3 4 5 6 7 8 9 |
# Azure CLI で mTLS を有効化 az aks update \ --resource-group myResourceGroup \ --name cilium-aks-demo \ --enable-azure-cni-mtls true # プレビュー機能 # 設定が反映されたか確認 kubectl get configmap -n kube-system cilium-config -o yaml | grep enable-mtls |
プレビュー有効化手順:
--enable-azure-cni-mtlsを使用する前に、ACNS プレビュー機能 が登録済みであることを必ず確認してください。
簡易動作検証
mtls-test名前空間に nginx デプロイと curl クライアント Pod を配置kubectl execで相互通信し、TLS エラーが出ないことを確認
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-mtls namespace: mtls-test spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable-alpine ports: - containerPort: 80 |
成功すれば、Cilium が自動で Envoy プロキシと証明書を付与し、Pod 間通信が暗号化されます。
サンプルアプリケーションと CiliumNetworkPolicy
実運用ではネットワークポリシーで細かく通信を制御します。ここでは nginx と redis の 2‑tier アプリに対して最小権限のポリシーを適用する例を示します。
アプリケーションデプロイ例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# Namespace 作成 kubectl create namespace demo-app # nginx デプロイ cat <<'EOF' | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: demo-app spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable-alpine ports: - containerPort: 80 EOF # redis デプロイ cat <<'EOF' | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: demo-app spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis:7-alpine ports: - containerPort: 6379 EOF |
CiliumNetworkPolicy 定義と通信テスト
ポリシー(nginx → redis のみ許可)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
apiVersion: "cilium.io/v2" kind: CiliumNetworkPolicy metadata: name: allow-nginx-to-redis namespace: demo-app spec: endpointSelector: matchLabels: app: redis ingress: - fromEndpoints: - matchLabels: app: nginx toPorts: - ports: - port: "6379" protocol: TCP |
|
1 2 |
kubectl apply -f allow-nginx-to-redis.yaml |
通信テスト手順
|
1 2 3 4 5 6 7 8 |
# nginx Pod から redis へ接続(成功すべき) NGINX_POD=$(kubectl get pod -n demo-app -l app=nginx -o jsonpath="{.items[0].metadata.name}") kubectl exec -n demo-app $NGINX_POD -- curl -s redis.demo-app.svc.cluster.local:6379 # redis Pod から nginx へ接続(失敗するはず) REDIS_POD=$(kubectl get pod -n demo-app -l app=redis -o jsonpath="{.items[0].metadata.name}") kubectl exec -n demo-app $REDIS_POD -- curl -s nginx.demo-app.svc.cluster.local:80 || echo "アクセス拒否" |
期待結果は nginx → redis が成功、逆方向が Connection refused となります。
ポイント: CiliumNetworkPolicy は Kubernetes 標準の NetworkPolicy と互換性がありますが、L7 フィルタや eBPF ベースの高度な制御も同一リソースで記述できる点がメリットです。
トラブルシューティングとベストプラクティス
Cilium の導入時に遭遇しやすい障害と、安定運用のためのベストプラクティスをまとめます。問題発生時はまず cilium status --verbose とノード上の dmesg | grep bpf を確認すると原因特定が速くなります。
代表的な障害と対策
| 障害 | 主な原因 | 推奨対策 |
|---|---|---|
| cilium‑agent が CrashLoopBackOff | ノード OS カーネルが eBPF 未対応(< 4.14) | AKS のノードプールを Ubuntu 22.04 系に変更、または --node-osdisk-type Ephemeral で最新イメージを再デプロイ ※カーネル要件は Linux 4.14 以上(参照: eBPF Kernel Requirements) |
| NetworkPolicy が効かない | 従来の Azure CNI (kubenet) が残っている |
クラスタ作成時に必ず --network-plugin azure と --enable-advanced-networking true を指定 |
| アップグレード時に Cilium が停止 | AKS バージョンと Cilium バイナリの互換性不一致 | アップグレード前に公式ドキュメントで対象バージョン相性を確認し、cilium-agent のロールアウト戦略(例: --max-surge=1)を設定 |
| mTLS 設定後に Pod が起動失敗 | Envoy が証明書取得できない | Azure AD Service Principal に Microsoft.Network/virtualNetworks/read 権限を付与し、ネットワーク情報へのアクセスを許可 ※ --enable-azure-cni-mtls はプレビュー機能であることに注意(事前に ACNS の登録が必要) |
運用上のベストプラクティス
-
リソースタグ付与
bash
az resource tag \
--ids $(az aks show -g myResourceGroup -n cilium-aks-demo --query id -o tsv) \
--tags env=prod owner=teamA
タグでコストセンターや環境情報を一元管理し、Azure Cost Management と連携させます。 -
ロギング・モニタリング
- Azure Monitor for Containers (
az aks enable-addons -a monitoring) で Cilium の eBPF メトリクスが自動収集。 -
Prometheus + Grafana を併用する場合は
cilium-exporterデプロイを推奨。 -
CI/CD パイプラインへの組み込み(例: GitHub Actions)
yaml
- name: AKS クラスタ作成 (Cilium 有効化)
run: |
az aks create ... --cilium-enabled true
- name: CiliumNetworkPolicy デプロイ
run: |
kubectl apply -f policies/
変更があれば kubectl rollout restart を実行し、Zero‑Downtime デプロイを実現。
-
定期的な eBPF カーネルチェック
AKS のマネージドノードは自動パッチが適用されますが、eBPF が削除されたカーネルへ降格しないようaz aks nodepool update --enable-node-public-ip falseで安定性を確保。 -
プレビュー機能の管理
- ACNS と
--enable-azure-cni-mtlsはプレビューであるため、機能名やフラグが変更される可能性があります。導入前に必ず公式リファレンスで最新情報を確認してください。
まとめ
| 項目 | 要点 |
|---|---|
| 前提条件 | Contributor 権限以上のサブスクリプション、Azure CLI 2.55+(日付付き注記あり) |
| ACNS プレビュー有効化 | az feature register → az provider register の手順で Cilium 対応 Azure CNI を使用可能に |
| クラスタ作成 | --network-plugin azure --enable-advanced-networking true --cilium-enabled true が鍵 |
| 動作確認 | kubectl get pods -n kube-system -l k8s-app=cilium と cilium status でエージェント稼働を検証 |
| mTLS 暗号化 | プレビュー機能 --enable-azure-cni-mtls true を有効化し、Pod 間通信が自動暗号化されることを確認 |
| ポリシー実装例 | CiliumNetworkPolicy で最小権限の通信制御(nginx ↔ redis)を検証 |
| トラブルシューティング | eBPF カーネル要件(≥ 4.14)、プラグイン競合、アップグレード時の互換性に注意。cilium status と dmesg が第一手段 |
| ベストプラクティス | タグ付与・モニタリング・CI/CD 自動化・定期的なカーネルチェック・プレビュー機能管理 |
これらの手順とポイントを押さえておけば、Azure CNI powered by Cilium を活用した AKS クラスタを安全かつ効率的に構築・運用できます。
参考情報
- Azure CLI リリースノート: https://learn.microsoft.com/cli/azure/release-notes-azure-cli
- ACNS(Advanced Container Networking Services)プレビュー機能一覧: https://learn.microsoft.com/azure/aks/preview-features
- eBPF カーネル要件(Linux 4.14+): https://www.kernel.org/doc/html/latest/bpf/index.html
- AKS ノードイメージの OS バージョン: https://learn.microsoft.com/azure/aks/node-image-upgrade
- Cilium mTLS デプロイ手順: https://learn.microsoft.com/azure/aks/container-network-security-cilium-mutual-tls-how-to