最近、私はKubernetesを使用しておもちゃのアプリに取り組んでいます。アプリの一部は、WebSocketをサポートする必要があるWebサーバーです。現在、私はポート転送を使用してWebサーバーにアクセスしていますが、すべて正常に機能します。
ポート転送の使用を避けるために、IngressとIngressControllerの使用に切り替えたいです。
ここに私のIngress
設定があります:
_apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
spec:
rules:
- http:
paths:
- path: /app
backend:
serviceName: web-svc
servicePort: 3030
- path: /ws
backend:
serviceName: web-svc
servicePort: 3030
_
$(minikube ip)/app
を介してアプリにアクセスすると問題なく動作しますが、nginxが101ではなく200を返すため、WebSocketリクエストはすべて失敗します。
_nginx.org/websocket-services
_アノテーションを追加しようとしましたが、機能していないようです。
誰かが同様の状況に遭遇しましたか?
乾杯
nginx ingress controller docs および nginx docs を見ると、おそらくKubernetes Ingress
の注釈として次のようなものが必要になります。
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
その注釈を追加すると、すべてのIngress
ルールがnginx構成のlocation
ブロックにそのスニペットを持つことに注意してください。したがって、他のルールでこれを無視する場合は、別個のKubernetes Ingress
を作成する必要があります。