Cilium + Kubernetes によるドメインベース通信制御構成の検討
1. 背景
以前、Docker コンテナの外向き通信制御について調査を行い、最終的には DOCKER-USER + ipset による IP allowlist 制御へ到達した。
しかし、この方式には以下の課題が残っていた。
- 許可対象はドメインで管理したい
- CDN による IP 変動への追従が必要
- DNS 解決結果の管理が必要
- IP ベース制御では意図しない到達先が残る可能性がある
また、近年は AI エージェントの利用が増え、実行環境に対するネットワーク制御の重要性も高まっている。
そこで今回は、Docker 単体での制御ではなく、Kubernetes + Cilium を利用した構成を検討してみた。
なお、本記事は構成案の整理が目的であり、ベストプラクティスを示すものではない。
2. やりたいこと
- 特定ワークロードのみ外部通信を許可する
- 許可先はドメイン単位で管理する
- 未許可通信は拒否する
- 通信状況を可視化する
- Infrastructure as Code で管理する
3. Docker 単体構成で感じた限界
Docker 単体でも iptables、nftables、DOCKER-USER、ipset、Proxy による制御は可能である。
しかし、ドメイン単位の制御を行おうとすると設計が急激に複雑になる。
4. Cilium に興味を持った理由
Cilium には FQDN ベースの Egress 制御機能が存在する。
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
spec:
egress:
- toFQDNs:
- matchName: api.openai.com
これにより IP アドレスではなくドメイン単位で通信制御を行える。
5. なぜ Kubernetes を採用するのか
Cilium は Kubernetes 上で利用するのが一般的であり、NetworkPolicy、Service、Namespace、Hubble などの仕組みを活用できる。
6. 現時点の構成案
Host Linux → KVM → minikube → Cilium → Application Pod
7. 今後の調査
- FQDN Policy の実運用性
- DNS キャッシュとの関係
- CDN 利用サービスとの相性
- Hubble による通信可視化
- Calico との比較
また、AI エージェント向けサンドボックス環境との比較も行いたい。
対象例:
- OpenAI Codex
- OpenHands
- Devin
- Cline
- Roo Code
- Anthropic Computer Use
本記事の最終目標は、AI エージェント実行基盤として成立するネットワーク制御方式を理解することである。