説明
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 に接続します。ノードへの直接アクセスが必要な場合だけ使用してください。