0
0

WebSocket connection Errorについて

Posted at

環境

kubernetes

  • ubuntu:22.0.4.1 LTS
  • kubernetes:1.28.2
  • containerd:1.6.24
  • IP Address: 172.21.0.8

Nodejsコンテナ

  • node:18.17.1-alpine3.17
  • react@18.2.0
  • 環境変数
    • PORT=3000

構成

  • NodePortサービス
    • TargetPort: 3000/TCP
    • NodePort: 30669/TCP

事象

kubernetesでReactを起動し、ブラウザでアクセスしたところ以下のログが発生。

WebSocket connection to 'ws://<IP Address>:<Port No.>/ws' failed:

image.png

最初のアクセスは問題なくアクセスできるためページは表示され、その後上記のログがわらわらと出力されました。
エラーログをよくよく見てみると、アクセス先のPort番号が、コンテナで設定した環境変数(PORT=3000)になっているのが原因っぽいです。
いろいろ調べてみましたが、ホットリロード用のポートの指定が別途必要そうです。

トラブルシューティング

以下の環境変数を設定して、npm startを実行する。

WDS_SOCKET_PORT=0

そのため、ConfigMapを作成し、Podに適用させるようにしました。

ConfigMapを作成

データのキー名は適当で大丈夫です。

configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: develop
  name: develop-client-cm
  namespace: develop
data:
  socket_port: "0"

Podへの適用

valueFromを利用して、環境変数の設定を追加してあげます。

pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name:
    develop-client
  labels:
    app: develop-client
  namespace: develop
spec:
  containers:
  - env:
    - name: WDS_SOCKET_PORT
      valueFrom:
        configMapKeyRef:
          name: develop-client-cm
          key: socket_port

上記の環境変数を設定することで、ログが止まりました。
おそらくプロキシを利用している場合も設定が必要になると思います。

参考記事

https://github.com/webpack/webpack-dev-server/issues/4217
https://create-react-app.dev/docs/advanced-configuration/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0