Pod によるホストネットワーク名前空間の共有

ホストネットワークが不要な Pod では、個別のネットワーク名前空間を使用してください。

説明

host_network = true は、Pod にノードのネットワーク名前空間と IP・ポート空間を共有させます。ホストネットワークとの分離が弱まり、ポートの競合や意図しないサービス公開が発生する場合があります。実際の外部到達性はルーティングやファイアウォールにも左右され、hostNetwork Pod に対する NetworkPolicy の扱いはネットワークプラグインによって異なります。

想定される影響

  • ノードのインターフェースで待ち受けるサービスが、意図した範囲より広く公開される場合があります。
  • ポートの競合やホストネットワークへのアクセスが、他のサービスに影響する場合があります。

対処方法

  • 通常のワークロードでは host_network = false を使用し、必要な公開経路を Service や Ingress で明示的に構成してください。
  • ホストネットワークが必要なシステムワークロードの例外を限定し、実際の待ち受けアドレスとポート、ファイアウォール、認証、適用可能なネットワークポリシーを確認してください。

例

既存の Pod のネットワーク共有だけを比較します。イメージとサービスの公開経路は、実際の運用環境に合わせて別途確認してください。

変更前

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    host_network = true

    container {
      image = "nginx:1.7.9"
      name  = "example"
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    host_network = false

    container {
      image = "nginx:1.7.9"
      name  = "example"
    }
  }
}

補足:

  • 変更前: ホストのネットワーク名前空間を共有します。
  • 変更後: ホストネットワークの共有を無効にします。この設定だけですべての外部公開経路がなくなるわけではありません。

参考資料