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

Network Policy とは?

最終更新:
💡 Podの送信側と受信側で、必要な通信を許可する

KubernetesでPodの受信・送信を制限するNetworkPolicy。対応するネットワークプラグインが必要な理由、IngressとEgress、複数ルールの足し合わせ、通信を許可する条件を解説します。

📌 このページのポイント
NetworkPolicy:送信と受信の条件を確認送信:アプリPod受信:DB PodEgressIngress送信の制限があれば受信の制限があれば許可が必要許可が必要両側の条件を満たす接続を許可対応するネットワークプラグインが必要複数ポリシーの許可範囲は足し合わせる経路等の到達性、暗号化や認証は別に確認
通常のPod間TCP接続の例で、EgressとIngressの制限は独立です。ノードとの通信等の仕様上の例外や実装も確認し、許可・不許可を実際に検証します。
ひよこ ひよこ
KubernetesのPod同士は、自由に通信できるの?
ペンギン先生 ペンギン先生
NetworkPolicyによる制限がない方向では、この仕組みは通信を制限しないよ。ただし実際に届くかは経路や別のファイアウォールなどにもよる。Podごとに必要な通信を絞るためにNetworkPolicyを使うんだ。
ひよこ ひよこ
何を手掛かりに、通信を許可するの?
ペンギン先生 ペンギン先生
PodやNamespaceのラベル、IPアドレスの範囲、ポートなどを指定するよ。たとえばデータベースのPodへのTCP接続を、特定のアプリのPodからだけ許可する、といった設定ができる。標準のNetworkPolicyは主にL3・L4の制御だ。
ひよこ ひよこ
Ingressを設定すれば、外に出る通信も止まる?
ペンギン先生 ペンギン先生
受信のIngressと送信のEgressは独立しているよ。ある方向の制限を受けるPodは、その方向について適用されるポリシーで許可された通信が可能になる。受信だけを制限しても、送信まで同じように制限されるわけではないんだ。
ひよこ ひよこ
後に書いたルールが、前のルールを上書きする?
ペンギン先生 ペンギン先生
そのような順序はないよ。適用される複数のポリシーの許可範囲を足し合わせる。Pod間の接続では、送信側のEgressと受信側のIngressの両方で許される必要がある。許可された接続の返答は、暗黙に許可されるんだ。
ひよこ ひよこ
設定ファイルを置いたら、すぐ安全になる?
ペンギン先生 ペンギン先生
ポリシーを適用するネットワークプラグインが必要だよ。対応していなければ、リソースを作っても通信は制限されない。制限を導入するときは、アプリの接続だけでなくDNSなど必要な通信も整理し、許可・不許可の両方を実際に確かめよう。
もっと詳しく知りたい人へ

通信を許可すれば、暗号化やログインもできる?

標準のNetworkPolicyは、TLSの暗号化やアプリの認証、HTTPのパスごとの許可を設定するものではありません。必要に応じてアプリ、Ingressコントローラー、サービスメッシュなど別の仕組みを組み合わせます。ネットワークの到達可否と、通信内容の保護や利用者の権限は別に確認します。

「すべて拒否」にすれば、本当にすべてのパケットを遮断できる?

NetworkPolicyの仕様には、Pod自身への通信やPodを実行するノードとの通信などに関する例外があります。またhostNetworkやアドレス変換、既存の接続の扱いは実装による点もあります。名前だけで全面遮断を保証すると考えず、利用するプラグインの仕様と実際の通信を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「NetworkPolicy」って出てきたら「KubernetesでPodの受信・送信を制御する設定」と思えばだいたいOK!対応するネットワークプラグインが必要だよ。
📖 おまけ:英語の意味
「NetworkPolicy」 = ネットワークの方針
💬 Kubernetes APIのリソース名です。ここでのIngressは受信方向を指し、HTTPなどを外部から公開するIngressリソースとは役割が異なります。

参考資料

← 用語集にもどる