当通过 HTTP 路由到后端时,Nginx Ingress 如何处理通过 HTTPS (wss:...) 传入的 WebSocket 连接? (ws:...)?
How does Nginx Ingress handle an incoming WebSocket Connection over HTTPS (wss:...) when routing to backend over HTTP? (ws:...)?
我正在使用 Nginx Ingress 访问 kubernetes 服务:
Nginx 是否将请求从 wss:... 转换为 ws:... ?
要么
Nginx 是否要求后端也启用 HTTPS?使它更简单 wss:... 到 wss:...
如果是这种情况,那么后端的自签名证书是否可以?以及如何配置代理以成功连接到该后端?
我目前有 Web 套接字通过 HTTP 工作到后端(ws:... 到 ws:...),我真的不知道如何进入下一个级别并完成此工作HTTPS!我想这是这里的主要问题。
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: xxxx-virtual-server
namespace: {{ .Values.tenantName }}
labels:
{{- include "xxxx.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
host: {{ .Values.tenantName }}.x.cloud
tls:
secret: aks-ingress-tls
upstreams:
- name: aaa-upstream
service: aaa-service
port: 5000
- name: bbb-upstream-socket
service: bbb-service-socket
port: 80
routes:
- path: /
matches:
- conditions:
- header: Upgrade
value: websocket
action:
pass: bbb-upstream-socket
action:
pass: aaa-upstream
我终于成功了,所以对于那些想知道同样事情的其他人,这是我发现的。
我正在使用 Nginx Ingress 访问 kubernetes 服务:
Nginx 是否将请求从 wss:... 转换为 ws:... 是的,它可以:-)
Nginx 是否要求后端也启用 HTTPS:不,不需要。
基本上我们设置套接字来监听url“/ws/”。
使用 URL 从浏览器连接,例如:
wss://test.cytrack.cloud/ws/
然后使用 Nginx Ingress 虚拟服务器自定义资源我们添加:
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: abc-virtual-server
namespace: abcd
spec:
host: abcde
tls:
secret: aks-ingress-tls
upstreams:
- name: abc-upstream-socket
service: abc-service-socket
port: 80
read-timeout: 300s
send-timeout: 300s
- path: /ws/
action:
pass: abc-upstream-socket
我正在使用 Nginx Ingress 访问 kubernetes 服务:
Nginx 是否将请求从 wss:... 转换为 ws:... ? 要么 Nginx 是否要求后端也启用 HTTPS?使它更简单 wss:... 到 wss:... 如果是这种情况,那么后端的自签名证书是否可以?以及如何配置代理以成功连接到该后端?
我目前有 Web 套接字通过 HTTP 工作到后端(ws:... 到 ws:...),我真的不知道如何进入下一个级别并完成此工作HTTPS!我想这是这里的主要问题。
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: xxxx-virtual-server
namespace: {{ .Values.tenantName }}
labels:
{{- include "xxxx.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
host: {{ .Values.tenantName }}.x.cloud
tls:
secret: aks-ingress-tls
upstreams:
- name: aaa-upstream
service: aaa-service
port: 5000
- name: bbb-upstream-socket
service: bbb-service-socket
port: 80
routes:
- path: /
matches:
- conditions:
- header: Upgrade
value: websocket
action:
pass: bbb-upstream-socket
action:
pass: aaa-upstream
我终于成功了,所以对于那些想知道同样事情的其他人,这是我发现的。
我正在使用 Nginx Ingress 访问 kubernetes 服务:
Nginx 是否将请求从 wss:... 转换为 ws:... 是的,它可以:-)
Nginx 是否要求后端也启用 HTTPS:不,不需要。
基本上我们设置套接字来监听url“/ws/”。
使用 URL 从浏览器连接,例如:
wss://test.cytrack.cloud/ws/
然后使用 Nginx Ingress 虚拟服务器自定义资源我们添加:
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: abc-virtual-server
namespace: abcd
spec:
host: abcde
tls:
secret: aks-ingress-tls
upstreams:
- name: abc-upstream-socket
service: abc-service-socket
port: 80
read-timeout: 300s
send-timeout: 300s
- path: /ws/
action:
pass: abc-upstream-socket