ワークロードの host_port の必要性の確認

host_port が必要な場合だけ、ノードのポート接続とアクセス範囲を構成してください。

説明

host_port は、コンテナーのポートをノードのポートへ接続する設定です。通常の Pod で省略しても誤りではなく、container_port を宣言するだけで任意のホストポートが公開されるわけでもありません。Service の NodePort とは別の機能です。

ノードのポートへの直接バインドが必要な場合だけ使用し、ポート競合、配置上の制約、実際のネットワーク公開を確認してください。

想定される影響

  • 不要な host_port を追加すると、ノードのサービス公開やポート競合のリスクが増える場合があります。
  • ノードへの直接接続が必要な機能では、設定やファイアウォールが不適切だと接続に失敗する場合があります。

対処方法

  • 通常のサービスは host_port を使わず、必要な Service や Ingress の公開経路を使用してください。直接ノードポートに接続する必要がある場合だけ、host_port とプロトコルを指定してください。
  • 実際のアプリケーションの待ち受けポート、ノードネットワークとファイアウォール、配置時の競合を確認してください。container_port の宣言だけでは、アプリケーションの待ち受けポートは変わりません。

例

nginx が実際に 8080 で待ち受けるよう、別途構成する必要がある例です。宣言だけで既定のイメージのポートが 8080 になるわけではありません。変更後は必要な場合のノード接続例であり、一般的なセキュリティ改善ではありません。保守されているイメージを使ってください。

変更前

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "app"
  }

  spec {
    container {
      name  = "web"
      image = "nginx:1.7.9"

      port {
        container_port = 8080
      }
    }
  }
}

変更後

hcl
resource "kubernetes_pod" "example" {
  metadata {
    name = "app"
  }

  spec {
    container {
      name  = "web"
      image = "nginx:1.7.9"

      port {
        container_port = 8080
        host_port      = 8080
      }
    }
  }
}

補足:

  • 変更前: コンテナーポートだけを宣言し、host_port 接続は要求していません。通常の有効な構成である場合があります。
  • 変更後: ノードの 8080 をコンテナーの 8080 に接続します。ノードへの直接アクセスが必要な場合だけ使用してください。

参考資料