説明
NetworkPolicy の pod_selector が対象 Pod のラベルと一致しないと、期待するネットワーク制御が適用されない場合があります。ポリシーは自身の名前空間の Pod を選択し、空の selector はその名前空間のすべての Pod を選択します。
今後作成する Pod に備えたポリシーが、一時的に対象を持たないことは問題ない場合があります。実際の制御は、ネットワークプラグインの対応状況と対象 Pod に適用されるすべてのポリシーを併せて確認してください。
想定される影響
- 意図した Pod が隔離されず、想定より広く通信できる場合があります。
- 誤った Pod を選択すると、必要な通信が途切れる場合があります。
対処方法
- ポリシーの名前空間、pod_selector、実際の Pod ラベルを合わせ、match_labels や match_expressions のすべての条件を確認してください。
- 対応するネットワークプラグインで policy_types、ingress、egress を構成し、必要な通信が成功し、不要な通信が拒否されることをテストしてください。複数ポリシーの許可ルールは合算される場合があります。
例
セレクターだけを比較し、Pod spec、ポリシー種別、通信ルールは省略しています。変更前の app=ngnix の Pod が実際にあるかも確認してください。変更後は default 名前空間で一致するラベルを示します。
変更前
hcl
resource "kubernetes_network_policy" "example" {
metadata {
name = "terraform-example-network-policy"
namespace = "default"
}
spec {
pod_selector {
match_labels = {
app = "ngnix"
}
}
}
}
変更後
hcl
resource "kubernetes_pod" "example" {
metadata {
name = "terraform-example"
labels = {
app = "ngnix2"
}
}
}
resource "kubernetes_network_policy" "example" {
metadata {
name = "terraform-example-network-policy"
namespace = "default"
}
spec {
pod_selector {
match_labels = {
app = "ngnix2"
}
}
}
}
補足:
- 変更前: app=ngnix の Pod を選択します。そのような Pod がなければ、現在の適用対象はありません。
- 変更後: Pod ラベルとセレクターが app=ngnix2 で一致します。一致だけで目的の通信ルールが完成するわけではありません。