当通过HTTP路由到后端时,NginxIngress如何通过HTTPS(wss:..)处理传入的WebSocket连接?



我正在使用Nginx Ingress来kubernetes服务:

Nginx是否转换wss的请求:。。。对ws:?或Nginx是否要求后端也启用HTTPS?使其成为一个更简单的wss:。。。到wss:。。。如果是这样的话,那么后端的自签名证书可以吗?以及如何配置代理以成功连接到后端?

我目前有通过HTTP到后端的Web套接字(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

最新更新