LocalhostListener
このメッセージは、ワークロードがlocalhostネットワークインターフェースでリッスンしているが、そのポートがサービスで公開されている場合に発生します。この場合、そのポートは他のポッドからアクセスできなくなります。
このチェックは、主に Istio 1.10 以降へのアップグレード時に破損する可能性のある、古いバージョンの Istio のワークロードを検出するために追加されました。この動作は、Istio のない標準的な Kubernetes クラスタで発生する動作と一致しますが、古いバージョンの Istio ではこれらのポートが公開されていました。
例
コマンド nc localhost 8080 -l を実行している Pod を選択する Service を検討してください。
apiVersion: v1
kind: Service
metadata:
name: netcat
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: netcat
アプリケーションがlocalhost上でトラフィックを処理しているため、他のポッドからはアクセスできません。
上記の例では、簡単なncツールを使用しています。他の言語での同等の例をいくつか示します。
- Go:
net.Listen("tcp", "localhost:8080") - Node.js:
http.createServer().listen(8080, "localhost"); - Python:
socket.socket().bind(("localhost", 8083))
解決方法
アプリケーションを他のポッドに公開する意図がない場合は、Serviceからポートを削除できます。
アプリケーションを他のポッドに公開する場合は、2つのオプションがあります。
- 他のポッドに公開されているネットワークインターフェースにバインドするようにアプリケーションを変更します。通常、これは
0.0.0.0または::にバインドすることを意味します。例:nc 0.0.0.0 8080 -l。 - ポッドのインバウンドネットワーク設定をカスタマイズするために、
Sidecar設定を作成します。たとえば、上記のアプリケーションでは次のようになります。
apiVersion: networking.istio.io/v1
kind: Sidecar
metadata:
name: ratings
spec:
workloadSelector:
labels:
app: netcat
ingress:
- port:
number: 8080
protocol: TCP
name: tcp
defaultEndpoint: 127.0.0.1:8080