Kra*_*ebr 6 websocket kubernetes
我在 Kubernetes (k3s) 中有两个服务,一个是后端,另一个是前端,我需要通过 websocket 将数据从后端传输到前端。当我在 docker-compose 中调试时它可以工作。因此,当在后端 docker-compose 中运行时,我有(python):
import websockets
...
start_server = websockets.serve(server, "0.0.0.0", 8001)
...
Run Code Online (Sandbox Code Playgroud)
在前面我有(html):
...
var ws = new WebSocket('ws://localhost:8001');
...
Run Code Online (Sandbox Code Playgroud)
我有关闭功能:
ws.onclose = function (e) {
document.getElementById("textArea").innerHTML = 'Socket is closed. Reconnect will be attempted in 5 seconds...' + e.reason;
setTimeout(function () {
connect();
}, 5000);
};
Run Code Online (Sandbox Code Playgroud)
它的工作原理应该是这样的。
当我使用 k3s 时我得到Socket is closed. Reconnect will be attempted in 5 seconds...
这是我的后端(应用程序)部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
namespace: my-namespace
labels:
app: app
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
name: app
spec:
containers:
- args:
- python3.9
- main.py
image: app
imagePullPolicy: Never
name: app
ports:
- name: app
containerPort: 8001
Run Code Online (Sandbox Code Playgroud)
以及后端的服务清单:
apiVersion: v1
kind: Service
metadata:
name: app-service
namespace: my-namespace
labels:
app: app-service
spec:
type: ClusterIP
ports:
- port: 8001
targetPort: app
selector:
app: app
Run Code Online (Sandbox Code Playgroud)
我的前端部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-deployment
namespace: my-namespace
labels:
app: frontend
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
name: frontend
spec:
containers:
- args:
- python3.9
- -m
- uvicorn
- main:app
- --reload
- --port
- "8000"
- --host
- 0.0.0.0
image: frontend
imagePullPolicy: Never
name: frontend
ports:
- name: frontend
containerPort: 8000
Run Code Online (Sandbox Code Playgroud)
前端服务:
apiVersion: v1
kind: Service
metadata:
name: frontend-service
namespace: my-namespace
labels:
app: frontend
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 8000
targetPort: frontend
selector:
app: frontend
Run Code Online (Sandbox Code Playgroud)
我有入口控制器(traefic)将流量路由到集群:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traefik-ingress
namespace: my-namespace
annotations:
kubernetes.io/ingress.class: traefik
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: my-dns.ca
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 8000
Run Code Online (Sandbox Code Playgroud)
我这样修改了html中的代码:
var ws = new WebSocket('ws://app-service.my-namespace.svc.cluster.local:8001');
Run Code Online (Sandbox Code Playgroud)
但得到````套接字已关闭。将在 5 秒后尝试重新连接...```
如何获取服务之间的连接或调试连接?
归档时间: |
|
查看次数: |
1387 次 |
最近记录: |