【ネットワークポリシー】

Network Policy とは?

💡 クラスタ内の通信も「通行証」がないと通れない関所
📌 このページのポイント
Network Policy によるPod間通信制御 Namespace: production Frontend label: app=web API Server label: app=api Database label: app=db ✗ ブロック Network Policy: DBへのIngressは app=api ラベルのPodのみ許可
Network Policyのイメージ
ひよこ ひよこ

Kubernetesの中って、Pod同士は自由に通信できるの?

ペンギン先生 ペンギン先生

デフォルトではそうなんだ。でもそれだとセキュリティ的にまずいよね。たとえば、フロントエンドPodから直接データベースPodにアクセスできちゃうと困るでしょ?

ひよこ ひよこ

確かに!それを制限するのがNetwork Policyなの?

ペンギン先生 ペンギン先生

そのとおり。Network Policyはラベルを使って『このラベルが付いたPodからの通信だけ許可する』みたいなルールを書くんだよ。ファイアウォールKubernetes版みたいなものだね

ひよこ ひよこ

設定するだけで使えるようになるのかな?

ペンギン先生 ペンギン先生

実はNetwork Policyの定義だけでは動かなくて、CalicoやCiliumといったCNIプラグインが必要なんだ。このプラグインが実際にパケットフィルタリングを実行してくれるよ

ひよこ ひよこ

IngressとEgressって何が違うの?

ペンギン先生 ペンギン先生

Ingressは受信トラフィック、Egressは送信トラフィックのルールだよ。たとえばデータベースPodにはAPIサーバーからのIngressだけ許可して、外部へのEgressは全部ブロックする、みたいに使うんだ

ひよこ ひよこ

マイクロサービスが増えると管理が大変そうだね?

ペンギン先生 ペンギン先生

そこが課題だね。namespace単位でデフォルトDenyポリシーを設定しておいて、必要な通信だけホワイトリスト方式で開けていくのがベストプラクティスだよ。大規模になるとサービスメッシュとの併用も検討するといいね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Network Policy」って出てきたら「Kubernetes内の通信ルール設定」と思えればだいたいOK!
📖 おまけ:英語の意味
「Network Policy」 = ネットワーク方針・規約
💬 「ネットワークのポリシー(方針)」をそのまま名前にしたシンプルな命名だよ
← 用語集にもどる