説明
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 の接続を削除し、コンテナーポートの宣言だけにします。必要なサービスアクセス経路は別途設定してください。