构建简单的websocket服务并部署到TKE集群

2023-10-06 17:03:48 浏览数 (2)

clb默认支持wss、ws,所以TKE的CLB类型ingress是默认支持的,不需要额外配置,直接使用

nginx ingress类型的ingress也是支持websocket需要开启这个,参考如下文档:

https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#websockets

这里我们将使用Python和WebSocket库创建一个简单的WebSocket服务,然后使用Docker和Kubernetes进行部署。

1,创建WebSocket服务

首先,确保你已经安装了Python和WebSocket库。在命令行中运行以下命令以安装WebSocket库:

代码语言:javascript复制
pip install websockets

创建一个名为websocket_server.py的文件,然后将以下代码粘贴到文件中:

代码语言:javascript复制
import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "0.0.0.0", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

2,创建Docker镜像

创建一个名为Dockerfile的文件,然后将以下代码粘贴到文件中:

代码语言:javascript复制
FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "websocket_server.py"]

在同一目录下创建一个名为requirements.txt的文件,然后将以下内容粘贴到文件中:

代码语言:javascript复制
websockets

在命令行中运行以下命令以构建Docker镜像:

代码语言:javascript复制
#镜像仓库替换成自己镜像仓库地址和命名空间名称

docker build -t ccr.ccs.tencentyun.com/chen1900s/my-websocket-server:latest .

3,部署到Kubernetes

这里是使用腾讯云TKE集群进行部署

确保你已经安装了kubectl和配置了Kubernetes集群。创建一个名为deployment.yaml的文件,然后将以下代码粘贴到文件中:

代码语言:yaml复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: websocket-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: websocket-server
  template:
    metadata:
      labels:
        app: websocket-server
    spec:
      containers:
      - name: websocket-server
        image: ccr.ccs.tencentyun.com/chen1900s/my-websocket-server:latest
        ports:
        - containerPort: 8765
---
apiVersion: v1
kind: Service
metadata:
  name: websocket-server
spec:
  selector:
    app: websocket-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8765
  type: LoadBalancer
  
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: qcloud
  name: websocket-server
spec:
  rules:
  - host: www.chen1900s.cn        #替换成自己的域名
    http:
      paths:
      - backend:
          service:
            name: websocket-server
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - secretName: chen1900s-6h3tqwaa      #需要提前创建好对应secret

在命令行中运行以下命令以部署WebSocket服务:

代码语言:shell复制
kubectl apply -f deployment.yaml

现在,WebSocket服务应该已经部署到Kubernetes集群,并通过LoadBalancer服务暴露。你可以通过运行以下命令来检查部署状态:

代码语言:shell复制
kubectl get deployments
kubectl get services

根据输出的LoadBalancer的IP地址和端口,你可以与WebSocket服务建立连接进行测试。

4,功能测试

可以使用这个在线工具测试

http://wstool.jackxiang.com/

0 人点赞