hostPort による直接バインドの確認

hostPort が必要な場合にだけ、ノードポートへの接続とアクセス範囲を設定してください。

説明

hostPort でコンテナーポートをバインドすると、Pod が動くノードのポートを直接使います。Service の NodePort とは別の機能であり、実際の到達範囲はノードのネットワークとファイアウォールによって異なります。

直接ノードに接続する必要がなければ、用途に合う Service や Ingress 経路を使う方が管理しやすくなります。これらのリソースでも、認証とネットワーク制限は別途設定する必要があります。

想定される影響

  • 不要なノードポート接続によって、意図しないアクセス経路が生じる場合があります。
  • 同じノードの同じポートを使うワークロード間で、競合や配置制約が生じる場合があります。

対処方法

  • ノードポートへの直接接続が不要なら hostPort を削除し、必要な Service や Ingress 経路を設定してください。
  • hostPort が必要なら実際の待ち受けポート、バインド先アドレス、プロトコルを確認し、ノードのファイアウォールとアクセス範囲を制限してください。配置時のポート競合も確認してください。

例

既存の nginx の抜粋で hostPort の使用だけを比較します。別の Service や Ingress は省略しているため、実際の環境に必要な接続経路とアクセス制御を用意してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: web
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80
          hostPort: 8080

コンテナーポート 80 をノードポート 8080 に接続します。外部から実際に到達できるかはネットワーク制御によります。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: web
spec:
  containers:
    - name: nginx
      image: nginx:1.25
      ports:
        - containerPort: 80

hostPort の接続を削除し、コンテナーポートの宣言だけにします。必要なサービスアクセス経路は別途設定してください。

参考資料