我没有解决这个问题,但是我确实通过使用负载均衡器服务公开我的WSS绕过了这个问题,并且我自己实现了WebSocket的安全层。
我将证书(私钥和全链公钥-PEM格式)保存为机密,并将其作为卷装入,然后在python中使用sslcontex并将其传递给Asyncio循环创建服务器。
要创建证书机密,请创建yaml:
apiVersion: v1
kind: Secret
type: tls
metadata:
name: sslcerts
data:
# this is base64 of your pem fullchain and private key
tls.crt: XXX
tls.key: YYY
然后
kubectl apply -f [path to the yaml above]
在服务器部署中,装载机密:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
...
name: server
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
...
template:
metadata:
labels:
...
spec:
volumes:
- name: wss-ssl-certificate
secret:
secretName: sslcerts
containers:
- image: ...
imagePullPolicy: Always
name: server
volumeMounts:
- name: wss-ssl-certificate
mountPath: /etc/wss
在python代码中:
sslcontext = ssl.SSLContext()
sslcontext.load_cert_chain(/etc/wss/tls.crt, /etc/wss/tls.key)
wssIpsClientsFactory = WebSocketServerFactory()
...
loop = asyncio.get_event_loop()
coro = loop.create_server(wssIpsClientsFactory, '0.0.0.0', 9000, ssl=sslcontext)
server = loop.run_until_complete(coro)
希望它能帮助别人