我有一个Ingress(默认的GKE),它在我的服务之前处理所有的SSL . 我的一项服务是WebSocket服务(python autobahn) . 当我使用LoadBalancer公开服务而没有通过抛出入口时,使用ws://我们工作的一切都很好 . 相反,当我使用NodePort公开它并通过入口时,即使没有客户端连接,我也经常看到连接丢失 . 这是autobahnlogs:
WARNING:autobahn.asyncio.websocket.WebSocketServerProtocol:dropping connection to peer tcp:10.156.0.58:36868 with abort=False: None
当我使用带有wss://的客户端进行连接时,连接成功但每隔几秒就会发生断开连接(无法获得一致的数字) . 虽然我认为它不相关我将GCE中相关后端服务的超时时间更改为3600秒,并且还尝试使用clientIP和cookie为其提供会话关联,但似乎都没有停止丢弃连接 . 这是我的入口定义:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ .Values.ingressName }}-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: {{ .Values.staticIpName }}-static-ip
labels:
oriient-app: "rest-api"
oriient-system: "IPS"
spec:
tls:
- secretName: sslcerts
rules:
- host: {{ .Values.restApiHost }}
http:
paths:
- backend:
serviceName: rest-api-internal-service
servicePort: 80
- host: {{ .Values.dashboardHost }}
http:
paths:
- backend:
serviceName: dashboard-internal-service
servicePort: 80
- host: {{ .Values.monitorHost }}
http:
paths:
- backend:
serviceName: monitor-internal-service
servicePort: 80
- host: {{ .Values.ipsHost }}
http:
paths:
- backend:
serviceName: server-internal-ws-service
servicePort: 80
ws服务是“server-internal-ws-service” . 有什么建议?
1 回答
我没有解决这个问题,但是我确实通过使用LoadBalancer服务暴露了我的wss并且我自己实现了WebSocket的安全层 . 我将证书(私钥和全链公钥 - pem格式)保存为秘密并将其作为卷安装,然后在python中使用SSLContex并将其传递给asyncio循环创建服务器 .
要创建证书,请创建一个yaml:
然后
在您的服务器部署中安装秘密:
并在python代码中:
希望它可以帮助某人